资源描述:
《proc是oracle数据库提供的编程接口》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、PROC是ORACLE数据库提供的编程接口之一,其应用十分的广泛,本文通过一个具体的例子,介绍PROC编程的一些经验及应注意的地方。例子程序:#include#include#include#include#includeEXECSQLINCLUDEsqlca;/*RELEASE_CURSOR=YES使PROC在执行完后释放与嵌入SQL有关资源*/EXECORACLEOPTION(RELEASE_CURS
2、OR=YES);EXECSQLBEGINDECLARESECTION;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*msg){p
3、rintf("%s,%ld,%s",msg,sqlca.sqlcode,(char*)sqlca.sqlerrm.sqlerrmc);EXECSQLROLLBACKRELEASE;exit(-1);}main(){EXECSQLWHENEVERSQLERRORDOsql_error("ORACLEERROR:");/*连接数据库*/strcpy(vc_user.arr,"scott/tiger@DEMO");vc_user.len=16;execsqlconnect:vc_user;EXEC
4、SQLDECLAREcur_empCURSORFORSELECTEMPNO,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_empINTO:al_empno,:ac_ename:ename_ind,:ac_hiredate
5、: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);}EXECSQLCLOSEcur_emp;EXECSQLROLLBACKWORKRELEASE;}1、宿主变量的声明在PROC中,在SQL语句中用到的变量称为宿主变量。他们应在EXECSQLBEGINDEC
6、LARESECTION;与EXECSQLEDNDECLARESECTION;之间声明,如上面所示.在声明宿主变量时应注意以下几点:(1)在数据库表中定义为VARCHAR2,VARCHAR,CHAR的字段,在PROC中可声明为CHAR,但长度应为它们在表中定义的长度加1,因为PROC中CHAR型变量用 做结尾。如:ENAME在表中的定义为enamevarchar2(10),在PROC中可定义为:EXECSQLBEGINDECLARESECTION;charename[11];EXECSQLENDDE
7、CLARESECTION;常见错误说明:如果插入的字符串长度大于10,如:EXECSQLINSERTINTOEMP(ENAME)VALUES('12345678901');会出现以下错误:error:ORA-01480:STR赋值变量缺少空后缀。如果定义为:EXECSQLBEGINDECLARESECTION;charename[15];EXECSQLENDDECLARESECTION;当插入的字符串长度大于10,小于15时,如:EXECSQLINSERTINTOEMP(ENAME)VALUES('
8、12345678901');会出现以下错误:error:ORA-01401:插入的值对于列过大。当插入的字符串长度大于15,如:EXECSQLINSERTINTOEMP(ENAME)VALUES('12345678901234');会出现以下错误:error:ORA-01401:STR赋值变量缺少空后缀。(2)从SQL语句中取字段的值到宿主变量中时,PROC不会自动给宿主变量去掉右空格。而是以在DECLARESECTION中定义的长度为准(与表中定义的无关)不足补右空