📄 ex19.c
字号:
/* $Id: ex19.c,v 1.1 2005/01/13 02:56:43 cvsroot Exp $ */
#include <stdio.h>
#include <stdlib.h>
#include "examples.h"
int select_ntable(sqlo_db_handle_t dbh)
{
sqlo_stmt_handle_t sth = SQLO_STH_INIT;
sqlo_stmt_handle_t st2h; /* handle of the ref cursor */
int status;
char ename[11];
char dname[15];
char loc[14];
short eind, dind, lind;
int deptno = 10;
/* don't know why the bind variable for deptno causes a crash */
CONST char * stmt =
"SELECT ENAME, CURSOR(SELECT DNAME, LOC FROM DEPT)\n"
" FROM EMP WHERE DEPTNO = :deptno";
/* parse the statement */
if ( 0 <= (sth = sqlo_prepare(dbh, stmt))) {
/* bind all variables */
if (SQLO_SUCCESS !=
(sqlo_bind_by_name(sth, ":deptno", SQLOT_INT, &deptno, sizeof(deptno), 0, 0) ) ) {
error_exit(dbh, "sqlo_bind_by_name");
}
/* Do the defines */
/* You could also do: sqlo_define_by_pos(sth, 2, SQLOT_RSET, &st2h, 0, 0, 0, 0) */
if (SQLO_SUCCESS !=
( sqlo_define_by_pos(sth, 1, SQLOT_STR, ename, sizeof(ename), &eind, 0, 0) ) ||
( sqlo_define_ntable(sth, 2, &st2h)))
error_exit(dbh, "sqlo_define_ntable");
/* execute the main statement */
if (SQLO_SUCCESS != sqlo_execute(sth, 1))
error_exit(dbh, "sqlo_execute");
/* fetch from the main statement */
while (SQLO_SUCCESS == (status = sqlo_fetch(sth, 1))) {
printf("ENAME=%11s\n", ename);
/* define the output of the second cursor */
if (SQLO_SUCCESS !=
( sqlo_define_by_pos(st2h, 1, SQLOT_STR, dname, sizeof(dname), &dind, 0, 0) ) ||
( sqlo_define_by_pos(st2h, 2, SQLOT_STR, loc, sizeof(loc), &lind, 0, 0) ) ) {
error_exit(dbh, "sqlo_define_by_pos");
}
/* execute the cursor */
if(SQLO_SUCCESS != sqlo_execute(st2h, 1))
error_exit(dbh, "sqlo_execute");
/* fetch from the second cursor */
while (SQLO_SUCCESS == (status = sqlo_fetch(st2h, 1))) {
printf(" DNAME=%15s LOC=%15s\n", dname, loc);
}
if (status != SQLO_NO_DATA)
error_exit(dbh, "sqlo_fetch(st2)");
}
if (SQLO_SUCCESS != sqlo_close(sth))
error_exit(dbh, "sqlo_close(1)");
if (SQLO_SUCCESS != sqlo_close(st2h))
error_exit(dbh, "sqlo_close(2)");
} else {
error_exit(dbh, "sqlo_prepare");
}
return 1;
}
/* $Id: ex19.c,v 1.1 2005/01/13 02:56:43 cvsroot Exp $ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -