有参数就直接写上值,但要注意out参数的用法,只可用变量代替代.

解决方案 »

  1.   

    不对呀。我有个存储过程名称叫 GETZRCLIST ,有一入参 p_TYBM in varchar2。
       
    我调用如下:1、exec GETZRCLIST('3601210101');错误如下:
    错误位于第1行:
    ORA-06550: 行1、列7:
    PLS-00306: 调用'GETZRCLIST'时自变量数量或类型错误
    ORA-06550: 行1、列7:
    PL/SQL: Statement ignored2、exec GETZRCLIST(3601210101);错误位于第1行:
    ORA-06550: 行1、列7:
    PLS-00306: 调用'GETZRCLIST'时自变量数量或类型错误
    ORA-06550: 行1、列7:
    PL/SQL: Statement ignored3、exec GETZRCLIST("3601210101");错误位于第1行:
    ORA-06550: 行1、列18:
    PLS-00201: 必须说明标识符'3601210101'
    ORA-06550: 行1、列7:
    PL/SQL: Statement ignored到底应该怎么调用,下面是我的存储过程。CREATE OR REPLACE PROCEDURE GETZRCLIST
    (p_TYBM in varchar2,p_CURSOR OUT comm_types.comm_cursor) is
    temp_str varchar2(10);
    temp_nf number;
    temp_number number;begin
         temp_str := p_TYBM;
        -- temp_nf  := p_NF;
         temp_number := to_number(temp_str);      --CDC
          
            open p_CURSOR for     
            SELECT * from T_ZRCXX where (TYBM_ID = temp_str)  order by zlcbm;
      
    end GETZRCLIST; -- TYBM_ID 是varchar2类型的。
      

  2.   

    var p_TYBM  varchar2
    /
    var p_cursor ref cursor
    /
    exec GETZRCLIST(:p_TYBM ,:p_cursor );
    print p_cursor 
    print p_TYBM
      

  3.   

    依次执行啊,依次输入,上面定义变量,中间引用变量要在前面加:
    var p_TYBM  varchar2
    /
    var p_cursor ref cursor
    /
    begin
    :p_TYBM:='123456';
    GETZRCLIST(:p_TYBM ,:p_cursor );
    end;
    /
    print p_cursor 
    懂了么?
      

  4.   

    上面的每一句话是不是在 sql plus里面执行。
    执行到第二句话 
     / 
     的时候系统就报错了。GETZRCLIST('3601210101');
    *
    错误位于第2行:
    ORA-06550: 行2、列1:
    PLS-00306: 调用'GETZRCLIST'时自变量数量或类型错误
    ORA-06550: 行2、列1:
    PL/SQL: Statement ignored
      

  5.   

    var p_TYBM varchar2
    /
    系统报错:缓冲区中无可运行的程序当我运行  var p_cursor ref cursor会报错:
    使用:VAR[IABLE] [ variable [ NUMBER | CHAR | CHAR (n) | VARCHAR2 (n) |
    NCHAR | NCHAR (n) | NVARCHAR2 (n) |
    CLOB | NCLOB | REFCURSOR ] ]当我运行:print p_cursor
    系统报错:未说明结合变量"P_CURSOR"不行啊。麻烦你亲自运行一下 ok?
      

  6.   

    open p_CURSOR for 'SELECT * from T_ZRCXX where TYBM_ID = '||temp_str||' order by zlcbm';在pl*puls执行如下:
    set serveroutput on
    declare 
    rc comm_types.comm_cursor;
    begin
    exec GETZRCLIST('3601210101',rc);
    for v_rc in rc loop
    dbms_output.put_line(v_rc.col1,....);
    end loop;
    end;
    /
      

  7.   

    错误位于第4行:
    ORA-06550: 行4、列6:
    PLS-00103: 出现符号"GETZRCLIST_BAK"在需要下列之一时:
    :=.(@%;
    符号":="被替换为"GETZRCLIST_BAK"后继续。
    ORA-06550: 行6、列32:
    PLS-00103: 出现符号"."在需要下列之一时:
    (-+modnotnullothers
    <an identifier><a double-quoted delimited-identifier>
    <a bind variable>avgcountcurrentexistsmaxminpriorsqlstddev
    sumvariancecast
    <a string literal with character set楼上,还是不行啊。
      

  8.   

    comm_types.comm_cursor是个什么东东?~~
      

  9.   

    若comm_types.comm_cursor是以下这样定义就应该没错.CREATE OR REPLACE PACKAGE comm_types
    AS
       TYPE comm_cursor IS REF CURSOR;
    END comm_types;
    /创建后重新查看是否失效,若是就重新再创建,然后再执行以上语句.
      

  10.   

    老大,按照你的意思
     CREATE OR REPLACE PROCEDURE GETZRCLIST
    (p_TYBM in varchar2,p_CURSOR OUT comm_types.comm_cursor) is
     ...
     
    1.应该有一个包comm_types中定义了comm_cursor 为 cursor 类型;2.你的存储过程明明是两个参数你只给一个,所以提示:
       ORA-06550: 行2、列1:
       PLS-00306: 调用'GETZRCLIST'时自变量数量或类型错误
       ORA-06550: 行2、列1:
       PL/SQL: Statement ignored
    3.在sql plus中执行时,要先定义两个变量(定义变量):
       sql>set serveroutput on
           declare
           p_TYBM  varchar2
           p_cursor comm_types.comm_cursor;
       
           begin
             exec GETZRCLIST('3601210101',rc);
             for v_rc in rc loop
               dbms_output.put_line(v_rc.col1,....);
             end loop;
           end;       
      

  11.   

    不要意思,rc 应该为先前声明的p_cursor ,粘错了
      

  12.   

    to: eng(eng_llw)  严格按照你的顺序执行,有如下错误。错误位于第3行:
    ORA-06550: 行3、列1:
    PLS-00103: 出现符号"P_CURSOR"在需要下列之一时:
    :=.(@%;notnullrange
    renamesdefaultcharacter
    符号";"被替换为"P_CURSOR"后继续。
    ORA-06550: 行5、列6:
    PLS-00103: 出现符号"GETZRCLIST_BAK"在需要下列之一时:
    :=.(@%;
    符号":="被替换为"GETZRCLIST_BAK"后继续。
    ORA-06550: 行7、列32:
    PLS-00103: 出现符号"."在需要下列之一时:
    (-+modnotnullothers
    <an identifier><a double-quoted delimited-identifier>
    <a bind variable>avgcountcurrentexistsmaxminpriorsqlstddev
    sumvariancecast
    <a string literal with character set
      

  13.   

    set serveroutput on
    declare
     p_TYBM  varchar2;
     p_cursor ref cursor;
    begin
    GETZRCLIST(:p_TYBM ,:p_cursor );
    dbms_output.put_line(p_TYBM  );
    end;
      

  14.   

    exec p1;=begin p1;end;