您的位置:首页 > 数据库

pro*c 动态sql一

2016-03-10 16:05 435 查看
这种方法只能执行非查询语句, 且在非查询动态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;
}
}

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: