- 论坛徽章:
- 0
|
PLSQL在sqlplus中执行如下(其中第一个是输入参数oci就是bind,第二,三个是输入参数oci就是define):
SQL> var a number;
SQL> var b number;
SQL> call keno.p2(22,:a,:b);
Call completed.
SQL> select :a,:b from dual;
:A :B
---------- ----------
23 45
SQL>
我在程序中明明也将这三个变量绑定/定义了,可执行的时候就报错:ORA-01008: not all variables bound 郁闷的很,代码如下:
strncpy(query, "begin keno.p2(:in,:ta,:tb);end;", 256);(这个是sql语句字符串)
- //依次绑定输入数据
- for( i=1; i<=in_num; i++ )
- {
- printf("bind i=%d\n\n\n",i );
- retcode=OCIBindByPos(conn->StmtHP, &pBind, conn->ErrHP, (ub4)i, (dvoid *)(indata+i-1),
- strlen((char*)(indata+i-1))+1, SQLT_STR, NULL, NULL, NULL, 0, NULL, (ub4)OCI_DEFAULT);
- if(retcode!=OCI_SUCCESS)
- {
- errNo = CheckErro( conn->ErrHP, errInfo );
- snprintf(logInfo, sizeof(logInfo), "[%s] in function DoPLSQL()", errInfo);
- InfoLog( func_id, logInfo );
- #ifdef _DEBUG
- printf("error OCIBindByPos %d \n", i);
- fprintf(stderr, "ErroNo=%d\tErrInfo=%s\n",errNo , errInfo );
- #endif
- return -1;
- }
- }
-
- //依次定义输出数据
- j = 1;
- for( i=in_num+1; i<=in_num+out_num; i++ )
- {
- printf("define i=%d\n",i );
- //初始化赋值,必须要先赋值才有输出
- memset( (outdata+i-1), 101, sizeof((outdata+i-1)) );
- retcode=OCIDefineByPos(conn->StmtHP, &pDefine, conn->ErrHP, (ub4)i, (dvoid *)(outdata+i-1),
- strlen((char*)(outdata+i-1))+1, SQLT_STR , (dvoid *)0, (ub2 *)0,
- (ub2 *)0, (ub4) OCI_DEFAULT);
- if(retcode!=OCI_SUCCESS)
- {
- errNo = CheckErro( conn->ErrHP, errInfo );
- snprintf(logInfo, sizeof(logInfo), "[%s] in function DoPLSQL()", errInfo);
- InfoLog( func_id, logInfo );
- #ifdef _DEBUG
- printf("error OCIDefineByPos %d\n", i);
- fprintf(stderr, "ErroNo=%d\tErrInfo=%s\n",errNo , errInfo );
- #endif
- return -1;
- }
- j++;
- }
-
-
- //执行sql语句
- retcode=OCIStmtExecute(conn->SvcHP, conn->StmtHP, conn->ErrHP, (ub4) 1, (ub4) 0,
- (CONST OCISnapshot *) NULL, (OCISnapshot *) NULL, OCI_DEFAULT );
- if(retcode!=OCI_SUCCESS)
- {
- errNo = CheckErro( conn->ErrHP, errInfo );
- snprintf(logInfo, sizeof(logInfo), "[%s] in function DoPLSQL()", errInfo);
- InfoLog( func_id, logInfo );
- #ifdef _DEBUG
- printf("error OCIStmtExecute!!!!!!!!!! \n");
- fprintf(stderr, "ErroNo=%d\tErrInfo=%s\n",errNo , errInfo );
- #endif
- return -1;
- }
复制代码
编译后运行如下:
- bind i=1(这个是绑定输出)
- define i=2(这两个是定义输出)
- define i=3
- error OCIStmtExecute!!!!!!!!!!
- ErroNo=1008 ErrInfo=ORA-01008: not all variables bound
复制代码
明明只有一个输入变量,输出也现实我已经绑定了,为什么还是报这个错阿,
有这方面经验的打侠客帮忙看看,谢谢了先。
莫非在plsql中后面这两个也看作是输入,也必须要用bind而不是define???
[ 本帖最后由 mgqw 于 2009-2-5 20:35 编辑 ] |
|