日期:2014-05-17  浏览次数:21961 次

ORA-24338: 未执行语句句柄
v_sql :=  
  'SELECT * FROM PAYROLLSALARYCHANGE WHERE BRANCH_ID in ' || p_branchid || ' AND BATCH_NUMBER = (SELECT DISTINCT BATCH_NUMBER FROM PAYROLLSTANDARDSETUP WHERE CREATION_DATE = (SELECT MAX(CREATION_DATE) FROM PAYROLLSTANDARDSETUP)) ORDER BY EMPLOYEE_NUMBER,DIVISION_NAME,BRANCH_NAME,PERSONNEL_TYPE_NAME,GRADE_NAME';
  OPEN p_change  
  FOR v_sql;

有个存储过程的错误,其中p_branchid 是形如('xxx', 'xxx', ...),当传入的参数只有几个的时候没报错误,当传入几十个'xxx'的时候去报错(ORA-24338: 未执行语句句柄),求教?

 p_branchid IN VARCHAR2 是个输入参数
 p_change OUT c_change 是游标,我输出的时候已经打开了( OPEN p_change)

------解决方案--------------------
还有一个可能就是在你OPEN p_change FOR v_sql; 之前就出错了,导致你返回的游标 p_change未打开。
你看看你 v_sql变量的长度是否足够长,当你参数p_branchid输入多个 'xxx'时,是否会导致 v_sql变量的长度不够,
然后就报错了,就没有执行你OPEN p_change FOR v_sql; 最好就报此错误。