资源描述:
《oracle数据库proc编程经验介绍》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、ORACLE数据库PROC编程经验介绍 PROC是ORACLE数据库提供的编程接口之一,其应用十分的广泛,本文通过一个具体的例子,介绍PROC编程的一些经验及应注意的地方。 例子程序: #include #include #include #include #include EXECSQLINCLUDEsqlca; /*RELEASE_CURSOR=YES使PROC在执行完后释放与嵌入SQL有关资源*/ EXECORACLEOPTION(RELEASE_CURSOR=YES); EXE
2、CSQLBEGINDECLARESECTION; varcharvc_user[20]; longal_empno=0; charac_ename[11]=""; charac_hiredate[20]=""; doubleaf_sal=0; EXECSQLVARac_enameISSTRING(11); EXECSQLVARac_hiredateISSTRING(20); EXECSQLENDDECLARESECTION; /*错误处理函数*/ voidsql_error(char*
3、msg) { printf("%s,%ld,%s",msg,sqlca.sqlcode,(char*)sqlca.sqlerrm.sqlerrmc);Svn8.Com EXECSQLROLLBACKRELEASE; exit(-1); } main() { EXECSQLWHENEVERSQLERRORDOsql_error("ORACLEERROR:"); /*连接数据库*/ strcpy(vc_user.arr,"scott/tiger@DEMO"); vc_user.len
4、=16; execsqlconnect:vc_user; EXECSQLDECLAREcur_empCURSORFOR SELECTEMPNO,ENAME,to_char(HIREDATE,'yyyy/mm/ddhh24:mi:ss'),SALFROMEMP; EXECSQLOPENcur_emp; while(1) { al_empno=0; strcpy(ac_ename,""); strcpy(ac_hiredate,""); af_sal=0; EXECSQLFETCHcur_emp
5、INTO:al_empno,:ac_ename:ename_ind,:ac_hiredate:hiredate_ind,:af_sal:sal_ind; if(sqlca.sqlcode==1403) { break; } printf("empno=%ld,ename=%s,hiredate=%s,sal=%lf",al_empno,ac_ename,ac_hiredate,af_sal);Bbs.Svn8.Com } EXECSQLCLOSEcur_emp; EXECSQLROLLBACKWORK
6、RELEASE; } 1、宿主变量的声明 在PROC中,在SQL语句中用到的变量称为宿主变量。他们应在EXECSQLBEGINDECLARESECTION;与EXECSQLEDNDECLARESECTION; 之间声明,如上面所示.在声明宿主变量时应注意以下几点: (1)在数据库表中定义为VARCHAR2,VARCHAR,CHAR的字段,在PROC中可声明为CHAR,但长度应为它们在表中定义的长度加1,因为PROC中 CHAR型变量用 做结尾。 如:ENAME在表中的定义为enamevar
7、char2(10),在PROC中可定义为: EXECSQLBEGINDECLARESECTION; charename[11]; EXECSQLENDDECLARESECTION; 常见错误说明: 如果插入的字符串长度大于10,如:EXECSQLINSERTINTOEMP(ENAME)VALUES('12345678901');会出现以下错误: error:ORA-01480:STR赋值变量缺少空后缀。如果定义为: EXECSQLBEGINDECLARESECTION; charename[15]; E
8、XECSQLENDDECLARESECTION; 当插入的字符串长度大于10,小于15时,如:EXECSQLINSERTINTOEMP(ENAME)VALUES('12345678901');会出现以下错误: error:ORA-01401:插入的值对于列过大。 当插入的字符串长度大于15,如:EXECSQ