pro*c 动态sql一

  1. 这种方法只能执行非查询语句, 且在非查询动态SQL语句内不能包含输入宿主变量占位符。   
  2. 这种方法使用EXECUTE IMMEDIATE命令立即执行动态SQL语句, 所以在每次执行时, Oracle需要对语句进行重新解释。   
  3. 如:   
  4. …   
  5. <连接数据库>   
  6. strcpy(str_sql,“DELETE FROM test001 WHERE name=’username’”);   
  7. Oracle Pro*C 编程入门   
  8. EXEC SQL EXECUTE IMMEDIATE :str_sql;   
  9. #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <sqlca.h>
    void connect();
    void sql_err();
    
    void dynamic_sqlone();
    
    void main()
    {
       EXEC SQL WHENEVER SQLERROR  DO sql_err();
       connect();
       dynamic_sqlone();
       EXEC SQL COMMIT RELEASE;
    }
    
    void sql_err()
    {
      //printf("%.*s\n",sqlca.sqlerrm.sqlerrml,,sqlca.sqlerrm.sqlerrmc);
    }
    
    void connect()/*数据库连接-本地数据库,不添加server*/
    {
      EXEC SQL BEGIN DECLARE SECTION;
      VARCHAR oraCN[30];
      EXEC SQL END DECLARE SECTION;
      strcpy(oraCN.arr,"scott/Tiger@TEST_dist");
      EXEC SQL CONNECT :oraCN;
    }
    
    void dynamic_sqlone()
    {
        EXEC SQL BEGIN DECLARE SECTION;
        char sql_statement[100];
        char control;
        EXEC SQL END DECLARE SECTION;
        for(;;)
        {
          printf("input the sqlstatement u want to execute:\n");
          gets(sql_statement);
          EXEC SQL EXECUTE IMMEDIATE :sql_statement;
          printf("continue? (Y/N): ");
          scanf("%c",&control);
          getchar();
          if(control=='N'||control=='n') break;
        }
    }
    
    
     

猜你喜欢

转载自m635674608.iteye.com/blog/1615645