|
- 这种方法只能执行非查询语句, 且在非查询动态SQL语句内不能包含输入宿主变量占位符。
- 这种方法使用EXECUTE IMMEDIATE命令立即执行动态SQL语句, 所以在每次执行时, Oracle需要对语句进行重新解释。
- 如:
- …
- <连接数据库>
- strcpy(str_sql,“DELETE FROM test001 WHERE name=’username’”);
- Oracle Pro*C 编程入门
- EXEC SQL EXECUTE IMMEDIATE :str_sql;
#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;
}
}
|
|
|