解决方案 »

  1.   

    没遇到过,供参考:http://blog.csdn.net/tianlesoftware/article/details/4787074
      

  2.   

    PROCEDURE sp_add_employee_info(
                i_EmployeeId              IN  T_EMPLOYEE.EmployeeId%TYPE,                   --雇员ID
                i_EmployeName             IN  T_EMPLOYEE.Employeename%TYPE,                 --雇员姓名
                i_DeptId                  IN  T_EMPLOYEE.DeptId%TYPE,                       --雇员所在部门                
                i_CurrUserId              IN   EBS_USER.USERID%TYPE,                        --操作员
                o_cursor                  OUT SYS_REFCURSOR,                                --指针
                o_RetCode                 OUT  VARCHAR2,                                    --返回编码 
                o_RetMsg                  OUT  varchar2                                     --返回值
                )IS        
                v_updatedate   DATE;     --操作日期
    V_sql varchar2(4000);
               
                 BEGIN
            V_sql :='INSERT INTO T_EMPLOYEE(
                             EMPLOYEEID,
                             EMPLOYEENAME,
                             DEPTID,
                             OPERATOR,
                             UPDATEDATE 
                          )
                          VALUES( 
                            i_EmployeeId,                  
                            i_EmployeName,                
                            i_DeptId,                                  
                            i_CurrUserId,
                            v_updatedate
                          )';  
                          
             open  o_cursor for V_sql;           
     END sp_add_employee_info;
    已知不用游标时,可以正常操作,网上搜的说是超过最大量,需要在java代码中用command.close()方法,但是我现在存储过程中,该怎么解决呢?要求:不改变游标的上限,不改变表的原来容量
      

  3.   

    这个有点奇怪。有没有更多信息试试增加open_cursors参数值。注意关闭游标
      

  4.   


    试了下,即使在
     open  o_cursor for V_sql;   
    后加
    close  o_cursor 
    还是不行,问了项目经理,他说只有select语句可以,这个insert语句不可以
      

  5.   

    第一:游标貌似只能用做select语句。
    第二:这insert拼接有问题这i_xxx全部存的不是你的参数值,而是i_xxx;
    如果要执行的话用execute immediate;
      

  6.   

    如果sql 是动态赋值的 然后就报错 java.sql.SQLException: ORA-00604: 递归 SQL 级别 1 出现错误
    ORA-01003: 语句未进行语法分析‘。
    以下代码供参考:create or replace procedure ap3 is
      type cType is ref cursor;
      c1   cType;  
      vName  varchar2(10);
      vSql   varchar2(4000);
      vTable varchar2(10);
    begin
      vTable := 'a02';
      vSql   := 'select t from ';
      vSql   := vSql || vTable;
      open c1 for vSql;
      loop
        fetch c1
          into vName;
        exit when c1%notfound;
        dbms_output.put_line(vName);
      end loop;
    end ap3;
     
     
    SQL> exec ap3;
      
    wwwww
    1
    2
      
    PL/SQL procedure successfully completed
      
      

  7.   

    你的v_sql拼接有问题把?
    参数不是应该用 || 来连接吗?
    V_sql :='INSERT INTO T_EMPLOYEE(
                             EMPLOYEEID,
                             EMPLOYEENAME,
                             DEPTID,
                             OPERATOR,
                             UPDATEDATE 
                          )
                          VALUES( ‘||
                            i_EmployeeId ||...