Pro*C中调用存储过程的示例代码
2008-10-09 20:46
447 查看
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <sqlca.h> #include <sqlda.h> #include <sqlcpr.h> #define NAME_LEN 30 VARCHAR username/[NAME_LEN]; VARCHAR password/[NAME_LEN]; VARCHAR database/[NAME_LEN]; /* the cursor variable */ SQL_CURSOR emp_cursor; /* used to strip blanks from the ename and job */ typedef char asciiz/[NAME_LEN]; EXEC SQL TYPE asciiz IS STRING(NAME_LEN) REFERENCE; int empno; asciiz ename; asciiz job; void sql_error(char *msg) { char err_msg/[128]; size_t buf_len, msg_len; EXEC SQL WHENEVER SQLERROR CONTINUE; printf("/n%s/n", msg); buf_len = sizeof (err_msg); sqlglm(err_msg, &buf_len, &msg_len); printf("%.*s/n", msg_len, err_msg); EXEC SQL ROLLBACK RELEASE; exit(EXIT_FAILURE); } void main() { strncpy((char *) username.arr, "SCOTT", NAME_LEN); username.len = (unsigned short) strlen((char *) username.arr); strncpy((char *) password.arr, "TIGER", NAME_LEN); password.len = (unsigned short) strlen((char *) password.arr); strncpy((char *) database.arr, "OTNDEMO", NAME_LEN); database.len = (unsigned short) strlen((char *) database.arr); EXEC SQL WHENEVER SQLERROR DO sql_error("ORACLE error: /n"); EXEC SQL CONNECT :username IDENTIFIED BY :password USING :database; printf("/nConnected to %s as user: %s/n/n", database.arr, username.arr); /* allocate cursor variable */ EXEC SQL ALLOCATE :emp_cursor; /* call the stored procedure */ EXEC SQL EXECUTE BEGIN get_emp_info(p_rc => :emp_cursor); END; END-EXEC; EXEC SQL WHENEVER NOT FOUND DO break; for (;;) { EXEC SQL FETCH :emp_cursor INTO :empno, :ename, :job; printf("EMPNO: %d, ENAME: %s, JOB: %s/n", empno, ename, job); } /* close and free the cursor */ EXEC SQL CLOSE :emp_cursor; EXEC SQL FREE :emp_cursor; EXEC SQL COMMIT RELEASE; exit(EXIT_SUCCESS); } 编译指令:(Windows)
proc parse=full sqlcheck=semantics userid=scott/tiger refcur.pc
cl /O2 /Ot /MD refcur.c /link orasql10.lib
输出结果:
D:/My Projects/C/ProC/refcur>refcur
Connected to OTNDEMO as user: SCOTT
EMPNO: 7876, ENAME: ADAMS, JOB: CLERK
EMPNO: 7499, ENAME: ALLEN, JOB: SALESMAN
EMPNO: 7698, ENAME: BLAKE, JOB: MANAGER
EMPNO: 7782, ENAME: CLARK, JOB: MANAGER
EMPNO: 7902, ENAME: FORD, JOB: ANALYST
EMPNO: 7900, ENAME: JAMES, JOB: CLERK
EMPNO: 7566, ENAME: JONES, JOB: MANAGER
EMPNO: 7839, ENAME: KING, JOB: PRESIDENT
EMPNO: 7654, ENAME: MARTIN, JOB: SALESMAN
EMPNO: 7934, ENAME: MILLER, JOB: CLERK
EMPNO: 7788, ENAME: SCOTT, JOB: ANALYST
EMPNO: 7369, ENAME: SMITH, JOB: CLERK
EMPNO: 7844, ENAME: TURNER, JOB: SALESMAN
EMPNO: 7521, ENAME: WARD, JOB: SALESMAN
[/code]
相关文章推荐
- 集算器调用数据库存储过程的代码示例
- 代码调用存储过程超时,SQL Server Management Studio里运行很快
- Java代码调用数据库带输出参数的存储过程
- [示例]存储过程循环与用户自定义函数递归调用
- PRO*C中调用存储过程和函数
- 存储过程之八-java代码调用oracle存储过程
- PHP调用MySQL的存储过程的实现代码
- 存储过程调用示例
- Mysql存储过程循环内嵌套使用游标示例代码
- mybatis调用存储过程的实例代码
- Java调用存储过程的代码
- MyCat1.6带返回参数存储过程调用示例
- Java代码调用Oracle的存储过程,存储函数和包
- 存储过程之七—java代码调用
- ssh三大框架,三层架构 整合测试!完整分页代码,JdbcTemplate等测试,存储过程调用,留着以后复习吧
- ASP调用SqlServer存储过程的经典示例(原创)
- MySql存储过程异常处理示例代码分享
- mysql 存储过程、存储过程嵌套、自定义函数代码示例
- Oracle存储过程中执行查询返回的结果集,并使用java代码调用【转】