oracle执行prc脚本,Oracle Prc C学习 之 Oracle动态SQL
在这里我先说遇到的一个问题在练习的例子中加入了头文件#include 然后我怎么编译都不行,一直说找不到oraca.h然后我把这个改成了EXEC SQL INCLUDE oraca;这样就顺利的编译过去了。第一种动态SQL语句:无宿主变量的非查询语句应用程序接收外界输入构造SQL 语句到一个字符串,然后调用EXECUTE IMMEDIATE 命令执行这个SQL 语句。这种SQL 语句不能为SELE
在这里我先说遇到的一个问题
在练习的例子中加入了头文件
#include
然后我怎么编译都不行,一直说找不到oraca.h
然后我把这个改成了
EXEC SQL INCLUDE oraca;
这样就顺利的编译过去了。
第一种动态SQL语句:无宿主变量的非查询语句
应用程序接收外界输入构造SQL 语句到一个字符串,然后调用
EXECUTE IMMEDIATE 命令执行这个SQL 语句。这种SQL 语句不能为SELECT 语句,不
能包含输入变量的占位符。
5.pc
#include
#include
EXEC SQL INCLUDE sqlca;
EXEC SQL INCLUDE oraca;
EXEC ORACLE OPTION(ORACA=YES);
EXEC ORACLE OPTION(RELEASE_CURSOR=YES);
int main(int argc, char *argv[])
{
EXEC SQL BEGIN DECLARE SECTION;
char *username = "scott";
char *passwd = "xx";
char *dynstmt1;
char dynstmt2[10];
VARCHAR dynstmt3[80];
char dynstmt4[80];
EXEC SQL END DECLARE SECTION;
oraca.orastxtf = ORASTFERR;
EXEC SQL CONNECT :username IDENTIFIED BY :passwd;
puts("CREATE TABLE dyn1 (col1 VARCHAR2(4))");
EXEC SQL EXECUTE IMMEDIATE
"CREATE TABLE dyn1 (col1 VARCHAR2(4))";
dynstmt1 = "INSERT INTO dyn1 VALUES('TEST')";
puts(dynstmt1);
EXEC SQL EXECUTE IMMEDIATE :dynstmt1;
strncpy(dynstmt2, "COMMIT", 10);
printf("%.10s\n", dynstmt2);
EXEC SQL EXECUTE IMMEDIATE :dynstmt2;
EXEC SQL COMMIT;
/*这里我自己又完全输入一个 DROP TABLE dyn1 这个字符串,来试试*/
gets(dynstmt4);
EXEC SQL EXECUTE IMMEDIATE :dynstmt4;
EXEC SQL COMMIT WORK RELEASE;
return 0;
}
第二种:已知输入变量个数的非查询语句
应用程序接受或组建一个SQL 语句,并通过PREPARE 和EXECUTE 语
句执行这个SQL。不能是查询语句。为输入宿主变量准备的占位符数目和输入宿主变量的
类型必须已知
6.pc
#include
#include
EXEC SQL BEGIN DECLARE SECTION;
#define USERNAME "scott"
#define PASSWD "xx"
EXEC SQL INCLUDE sqlca;
EXEC SQL INCLUDE oraca;
EXEC ORACLE OPTION(ORACA=YES);
char *username = USERNAME;
char *passwd = PASSWD;
VARCHAR dynstmt[80];
int empno = 1234;
int deptno1 = 20;
int deptno2 = 30;
EXEC SQL END DECLARE SECTION;
int main(int argc, char *argv[])
{
oraca.orastxtf = ORASTFERR;
EXEC SQL CONNECT :username IDENTIFIED BY :passwd;
strcpy(dynstmt.arr ,"INSERT INTO EMP (EMPNO, DEPTNO) VALUES (:v1, :v2)");
dynstmt.len = strlen(dynstmt.arr);
puts((char *)dynstmt.arr);
printf("v1 = %d, v2 = %d\n", empno, deptno1);
EXEC SQL PREPARE insert_sql FROM :dynstmt;
EXEC SQL EXECUTE insert_sql USING :empno, :deptno1;
EXEC SQL COMMIT;
empno ++;
EXEC SQL EXECUTE insert_sql USING :empno, :deptno2;
printf("v1 = %d, v2 = %d\n", empno, deptno2);
EXEC SQL COMMIT;
strcpy(dynstmt.arr, "DELETE FROM EMP WHERE EMPNO = :v1");
dynstmt.len = strlen(dynstmt.arr);
EXEC SQL PREPARE delete_sql FROM :dynstmt;
EXEC SQL EXECUTE delete_sql USING :empno;
EXEC SQL COMMIT WORK RELEASE;
return 0;
}
这个就是语句中带有宿主变量的,也就是说,我们一开始不知道要删除哪个,后来通过别的渠道给定要删除的这个条件。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)