/*
CREATE OR REPLACE PROCEDURE MANAGER_NAME(P_MNAME OUT VARCHAR2)
AS
BEGIN
SELECT MGR INTO P_MNAME from emp ;
END;
*/
DECLARE
V_MNAME VARCHAR2;
BEGIN
MANAGER_NAME(V_MNAME);
DBMS_OUTPUT.PUT_LINE('雇员的经理名为: '||V_MNAME);
END;V_MNAME VARCHAR2;
        *
第 2 行出现错误:
ORA-06550: 第 2 行, 第 9 列:
PLS-00215: 字符串长度限制在范围 (1...32767)

解决方案 »

  1.   

    DECLARE
    V_MNAME VARCHAR2; -- 沒指定長度,默認為1 改成v_mname varchar2(200);
    BEGIN
    MANAGER_NAME(V_MNAME);
    DBMS_OUTPUT.PUT_LINE('雇员的经理名为: '||V_MNAME);
    END;
      

  2.   

    V_MNAME VARCHAR2;
    改为V_MNAME VARCHAR2(4000);
    varchar2变量声明的时候需要加长度
      

  3.   


    CREATE OR REPLACE PROCEDURE MANAGER_NAME(P_MNAME OUT VARCHAR2)
    AS
    BEGIN
    SELECT MGR INTO P_MNAME from emp ;
    END;
    */
    DECLARE
    V_MNAME emp.MGR%type;
    BEGIN
    MANAGER_NAME(V_MNAME);
    DBMS_OUTPUT.PUT_LINE('雇员的经理名为: '||V_MNAME);
    END;
      

  4.   

    已写入 file afiedt.buf  1  CREATE OR REPLACE PROCEDURE MANAGER_NAME(P_MNAME OUT VARCHAR2)
      2  AS
      3  BEGIN
      4  --你这个会返回多个mgr 但是P_MNAME只能接受单个值
      5  SELECT MGR INTO P_MNAME from emp where empno=7369;
      6* END;
    SQL> /过程已创建。SQL> DECLARE
      2  V_MNAME VARCHAR2(10);
      3  BEGIN
      4  MANAGER_NAME(V_MNAME);
      5  DBMS_OUTPUT.PUT_LINE('雇员的经理名为: '||V_MNAME);
      6  END;
      7  /
    雇员的经理名为: 7902PL/SQL 过程已成功完成。
      

  5.   

    请问不能一下子返回多个mgr吗
      

  6.   

    还是不行啊
    DECLARE
    *
    第 1 行出现错误:
    ORA-01422: 实际返回的行数超出请求的行数
    ORA-06512: 在 "BOOK.MANAGER_NAME", line 4
    ORA-06512: 在 line 4
      

  7.   

    同样不行啊
    DECLARE
    *
    第 1 行出现错误:
    ORA-01422: 实际返回的行数超出请求的行数
    ORA-06512: 在 "BOOK.MANAGER_NAME", line 4
    ORA-06512: 在 line 4
      

  8.   

    请问我能不能传递两个参数,就是一个传递雇员的名字,另一个是返回经理的名字,格式如下
    DBMS_OUTPUT.PUT_LINE('雇员'||v_ename '的经理名为:' ||V_MNAME);
      

  9.   

    已写入 file afiedt.buf  1  CREATE OR REPLACE PROCEDURE MANAGER_NAME(P_NO in varchar2)
      2  AS
      3  P_MNAME varchar2(20);
      4  BEGIN
      5  SELECT MGR INTO P_MNAME from emp where empno=P_NO;
      6  dbms_output.put_line('雇员'||P_NO||'的经理为:'||P_MNAME);
      7* END;
    SQL> /过程已创建。SQL> exec MANAGER_NAME('7369');
    雇员7369的经理为:7902
      

  10.   

    可以,看你的格式,两个参数应该都是传出吧,CREATE OR REPLACE PROCEDURE MANAGER_NAME(P_MNAME OUT VARCHAR2,P_ENAME OUT VARCHAR2)
    AS
    BEGIN
    SELECT MGR,ENAME INTO P_MNAME, P_ENAME from emp where empno='7369';
    END;
      

  11.   


    两个问题,首先在声明中定义的VARCHAR2变量必须赋予长度。
    另外,如果sql查询出的是多条记录的话,将会报返回行数错误,因为多个值没办法同时赋值给一个变量。
    如果单纯想测试的话,最好给sql加上查询条件,或者在查询赋值前判断返回行数。