pro*c 动态sql三

2017-12-30 11:34:42来源:oschina作者:xiaomin0322人点击

分享
pro*c 动态sql三 博客分类: 数据库这种方法可以执行包括查询语句在内的动态SQL语句,但它要求在预编译时刻动态SQL语句内选择列表项数,输入宿主变量占位符数据以及输入宿主变量的数据类型必须确定。方法三以游标方式执行动态SQL语句,它对SQL语句的处理过程为:
①.准执行PREPARE命令准备SQL语句;
#实际就是把要执行的动态语句调入内存,以
便以后对它进行操作。
②.执行DECLARE命令声明游标;
③.执行OPEN打开游标;
④.调用FETCH语句提取游标;
⑤.调用CLOSE语句关闭游标。
动态SQL语句中的数据库对象名称和列名可以在运行时刻指定,便此时不能以宿主变量形式指定对象名称或列名.
其实就是多了一个游标的使用。
如下面程序:
<连接数据库>;
strcpy(sql_stmt,"SELECTname,address,sexFROMtest001");
EXECSQLPREPAREselect_stmtFROM:sql_stmt;
EXECSQLDECLAREc1CURSORFORselect_stmt;
EXECSQLOPENc1;
EXECSQLWHENEVERNOTFOUNDDOBREAK;
while(1)
OraclePro*C编程入门
{
EXECSQLFETCHc1INTO:Name,:address,:sex;
printf("Thenameis:%s,TheAddressis:%s,Thesexis:%s/n",Name,address,
sex);
}
EXECSQLCLOSEc1;
#include
#include
#include
#include
void connect();
void sql_err();
void dynamic_sqlthree();
void main()
{
EXEC SQL WHENEVER SQLERRORDO sql_err();
connect();
dynamic_sqlthree();
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_sqlthree()
{
EXEC SQL BEGIN DECLARE SECTION;
char name[10];
intsalary;
intdno;
EXEC SQL END DECLARE SECTION;
printf("input deptno u want to view: ");
scanf("%d",&dno);
getchar();
EXEC SQL PREPARE stat FROM 'SELECT sal,ename from empWHERE deptno=:a';
EXEC SQL DECLARE emp_cursor CURSOR FOR stat;
EXEC SQL OPEN emp_cursor USING :dno;
EXEC SQL WHENEVER NOT FOUND DO break;
for(;;)
{
EXEC SQL FETCH emp_cursor INTO :salary,:name;
printf("name: %s,salary: %d/n",name,salary);
}
EXEC SQL CLOSE emp_cursor;
}

最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台