ITPUB??ì3
新一届的微软MVP评选已经开始,欢迎各位推荐!
ITPUB论坛 » Oracle开发 » OCI编程时,存储过程执行N遍后出现ORA-01480错误?

标题: OCI编程时,存储过程执行N遍后出现ORA-01480错误?
离线 Arraydart
一般会员



精华贴数 1
个人空间 0
技术积分 329 (5935)
社区积分 0 (55192)
注册日期 2002-4-30
论坛徽章:0
      
      

发表于 2002-5-26 20:41 
OCI编程时,存储过程执行N遍后出现ORA-01480错误?

我在C++ Builder下用OCI进行编程,执行如下的一个存储过程:
create or replace procedure mytest
(
   param     out varchar2
)
is
   param := 'test string';
end;
/
当然还有别的存储过程,但当执行了多遍时,有时会出现ORA-01480错误(ORA-01480: STR 赋值变量缺少空后缀)。我看有帖子说,要用ALTER SESSION SET NLS_LANGUAGE=AMERICAN;但我试过了,仍然不顶用。
谢了。



只看该作者    顶部
离线 jlandzpa
版主


精华贴数 28
个人空间 0
技术积分 44843 (15)
社区积分 50539 (10)
注册日期 2001-10-12
论坛徽章:14
现任管理团队成员ITPUB元老衰神奥运纪念徽章NBA常规赛纪念章管理团队2007贡献徽章
第18届世界杯(德国)纪念徽章管理团队2006纪念徽章会员2007贡献徽章会员2006贡献徽章授权会员ITPUB新首页上线纪念徽章

发表于 2002-5-26 21:02 
ORA-01480        trailing null missing from STR bind value

Cause        A bind variable specified as type SQLT_STR is not terminated with an ASCII NULL (0) character.
Action        Check maximum lengths and contents of string bind variables.

Copyright (C) 1998, Oracle Corporation


__________________
my blog: http://blog.itpub.net/jlandzpa
mail: “id”@itpub.net

注意: [投资理财版] 业已提供上证指数菠菜,欢迎参与 :)

[头像] 黑木明纱 Meisa Kuroki  :)
只看该作者    顶部
离线 Arraydart
一般会员



精华贴数 1
个人空间 0
技术积分 329 (5935)
社区积分 0 (55192)
注册日期 2002-4-30
论坛徽章:0
      
      

发表于 2002-5-26 23:16 
yeah, i work out the problem.
before i bind the variable, i use the function memset to append the null character to the variable.then it works!


只看该作者    顶部
离线 cgh_chen
苏丹·陈


精华贴数 2
个人空间 0
技术积分 5382 (243)
社区积分 249 (2108)
注册日期 2002-2-3
论坛徽章:3
ITPUB元老会员2006贡献徽章授权会员   
      

发表于 2002-5-27 07:13 
jlandzpa
楚香帅
越来越漂亮了 :)


__________________
http://asktom.oracle.com http://metalink.oracle.com  http://www.ixora.com.au  http://tahiti.oracle.com http://www.orafaq.net
只看该作者    顶部
离线 hnwgz
初级会员



精华贴数 0
个人空间 0
技术积分 2 (201851)
社区积分 0 (998943)
注册日期 2006-6-21
论坛徽章:0
      
      

发表于 2006-6-21 14:53 
使用数组可以解决

text *sql = (text *) "INSERT INTO emp  VALUES (:empno, :ename, :sal, :job ) " ;

           int empno = 100 ;

           char ename[] = "Wqr" ;

           float sal = 99.8 ;

           char job[] = "program" ;

           OCIBind *bndhp[4] ;

           checkerr( m_dbp->m_errhp , OCIHandleAlloc( (dvoid *) g_envhp ,
                                                          (dvoid **) &m_stmthp ,
                                                          OCI_HTYPE_STMT,
                                                                                                  (size_t) 0,
                                                                                                  (dvoid **) 0)
                ) ;          

      checkerr( m_dbp->m_errhp , OCIStmtPrepare( m_stmthp , m_dbp->m_errhp, sql ,
                                                (ub4)strlen( (char *)sql ), (ub4)OCI_NTV_SYNTAX,
                                                (ub4)OCI_DEFAULT)
                          ) ;

          
           checkerr( m_dbp->m_errhp , OCIBindByName( m_stmthp , &bndhp[0], m_dbp->m_errhp,
                                                 (text *) ":empno", -1, (dvoid *) &empno, sizeof(empno),
                                                 SQLT_INT, (dvoid *)0, (ub2 *)0, (ub2 *)0,
                                                                                                 (ub4) 0, (ub4 *)0,OCI_DEFAULT)
                           ) ;

           checkerr( m_dbp->m_errhp , OCIBindByName(  m_stmthp , &bndhp[1], m_dbp->m_errhp ,
                                                  (text *) ":ename", -1, (dvoid *)ename, strlen(ename) + 1 ,
                                                                                                  SQLT_STR , (dvoid *)0, (ub2 *)0, (ub2 *) 0,
                                                                                                  (ub4) 0, (ub4 *)0,OCI_DEFAULT)
                           ) ;
   
          
       checkerr( m_dbp->m_errhp , OCIBindByName( m_stmthp , &bndhp[2], m_dbp->m_errhp,
                                                 (text *) ":sal", -1, (dvoid *) &sal, sizeof(sal),
                                                 SQLT_FLT ,(dvoid *)0, (ub2 *)0, (ub2 *)0, (ub4)0,
                                                                                                 (ub4 *)0 ,OCI_DEFAULT)
                           ) ;
          
      
           checkerr( m_dbp->m_errhp ,  OCIBindByName(  m_stmthp , &bndhp[3], m_dbp->m_errhp,
                                                   (text *) ":job", -1, (dvoid *) job, sizeof(job),
                                                   SQLT_STR, (dvoid *)0, (ub2 *)0, (ub2 *)0, (ub4)0, (ub4 *)0,
                                                   OCI_DEFAULT)
                           ) ;

           checkerr( m_dbp->m_errhp ,  OCIStmtExecute( m_dbp->m_svchp ,m_stmthp , m_dbp->m_errhp ,
                                                           (ub4)1, (ub4) 0,(CONST OCISnapshot *) 0 ,
                                                                       (OCISnapshot *) 0 , OCI_DEFAULT )
                                ) ;

          
           checkerr( m_dbp->m_errhp , OCITransCommit( m_dbp->m_svchp ,m_dbp->m_errhp , (ub4) 0 ) ) ;


只看该作者    顶部
离线 summy00



精华贴数 0
个人空间 0
技术积分 38 (34422)
社区积分 0 (1772178)
注册日期 2008-5-9
论坛徽章:0
      
      

发表于 2008-6-25 11:32 
我用了数组 但是还是同样问题 比如我SELECT ename FROM emp WHERE ename = :value  这样的时候。。。 绑定的最后一个字符串时

但用INSERT语句时又不会出现


__________________
OCI 加我Q 50226907  谢谢!!!
只看该作者    顶部
离线 DragonBill
武陵愚生


精华贴数 1
个人空间 10
技术积分 3260 (454)
社区积分 391 (1614)
注册日期 2006-12-18
论坛徽章:13
2008北京奥运纪念徽章:击剑生肖徽章2007版:虎    
      

发表于 2008-6-25 14:13 
the last value of char array should be assigned to '\0'.
for example:
  ...
  char address[] = "Wqr\0";
  ...

then, you can try it again.

[ 本帖最后由 DragonBill 于 2008-6-25 14:16 编辑 ]


只看该作者    顶部
离线 DragonBill
武陵愚生


精华贴数 1
个人空间 10
技术积分 3260 (454)
社区积分 391 (1614)
注册日期 2006-12-18
论坛徽章:13
2008北京奥运纪念徽章:击剑生肖徽章2007版:虎    
      

发表于 2008-6-25 14:15 


QUOTE:
原帖由 cgh_chen 于 2002-5-27 07:13 发表
jlandzpa
楚香帅
越来越漂亮了 :)

pretty girl


只看该作者    顶部
 
    

相关内容


CopyRight 1999-2006 itpub.net All Right Reserved.
北京皓辰广域网络信息技术有限公司. 版权所有
E-mail:Webmaster@itpub.net
京ICP证:010037号 联系我们 法律顾问