老兄,存储过程是不带RETURN的,函数才带RETURN,去翻一下PL/SQL书吧

解决方案 »

  1.   

    select c.name, c.id
    into name, id
    from emp c
    where c.id = empid
    你那也就存储过程 靠 让我伤心
      

  2.   

    楼上的: 不要打击人家学习 PL/SQL 的热心吗. 我相信很多人学习PL/SQL都是从最基本的语法开始学的.
      

  3.   

    我得PL/SQL 是这样的:
    CREATE OR REPLACE PROCEDURE APP.PLQUERY (empid varchar2)
    IS
    TYPE emptype IS RECORD
    (
       name  emp.name%TYPE,
             
       id  emp.id%TYPE
    );
    TYPE EMP_CURSOR IS REF CURSOR RETURN emp%ROWTYPE;
    vemp_cur EMP_CURSOR;
    vemp_rec emptype;
    BEGIN
        OPEN vemp_cur FOR SELECT * FROM emp;
         LOOP
          FETCH vemp_cur INTO vemp_rec;
           EXIT WHEN vemp_cur%NOTFOUND;
           DBMS_OUTPUT.PUT(vemp_rec.name||'  '||vemp_rec.id||'  ');
           END LOOP;
          CLOSE vemp_cur;
    END;
    /在java程序中这样写的:
    CallableStatement proc = conn.prepareCall("{ call app.PLQUERY(?) }");
    proc.setString(1,"77");  
         
            // there is a resultSetCursor

    proc.registerOutParameter(1,OracleTypes.CURSOR);
    proc.execute(); rs = (ResultSet)stmt.getObject(1);       为什么我的程序取不到rs 的值,中间过程会THROW exception 啊 !
      

  4.   

    RECORD不是oracle对象,在存储过程内怎能返回记录
    建义使用包:
    create package test_age
    as
    type mycursor is ref cursor;
    end;
    /
    CREATE OR REPLACE PROCEDURE APP.PLQUERY (empid varchar2,p_rc out test_age.mycursor) 
    ISBEGIN
      open p_rc for 'select c.name, c.id
    from emp c
    where c.id = '||empid;
    END;
    /