card
cardno varchar2(20)
cardpassword varchar2(20)
cardstate varchar2(20)
这是过程create or replace procedure QUERYCARD
(p1 in varchar2,p2 in number,p3 out card.cardno%type,p4 out card.cardpassword%type)
as begin
select cardno,cardpassword into p3,p4 from card where cardstate = p1 and rownum = p2;
dbms_output.put_line(p3 || ' ' || p4);
end;
/这是调用declare 
cardno card.cardno%type;
cardpassword card.cardpassword%type;
begin
QUERYCARD('1',2,cardno,cardpassword); 
end;
/
怎么一直出不了结果?求救!急

解决方案 »

  1.   

    对了   QUERYCARD('1',2,cardno,cardpassword); 
    变为   QUERYCARD('1',1,cardno,cardpassword); 
      

  2.   


    编译通过了  另外end以后也可以不加过程的名字
      

  3.   


    create or replace procedure QUERYCARD
    (p1 in varchar2,p2 in number)
    as 
    p3 varchar2(20);
    p4 varchar2(20);
    begin
    select cardno,cardpassword into p3,p4 from card where cardstate = p1 and rownum = p2;
    dbms_output.put_line(p3 || ' ' || p4);
    end;
    /begin
    QUERYCARD('1',1);
    end;
    /这样就通不过,
    create or replace procedure QUERYCARD
    --(p1 in varchar2,p2 in number)
    as 
    p3 card.cardno%type;
    p4 card.cardpassword%type;
    begin
    select cardno,cardpassword into p3,p4 from card where cardstate = '1' and rownum = 1;
    dbms_output.put_line(p3 || ' '|| p4);
    end;
    /begin
    QUERYCARD();
    end;
    /这样就通过了,
      

  4.   


    create or replace procedure QUERYCARD
    (p1 in varchar2,p2 in number,p3 out card.cardno%type,p4 out card.cardpassword%type)
    as begin
        v_sql:='select cardno,cardpassword into p3,p4 from card where cardstate = p1 and rownum = p2;'
        execute immediate v_sql;
          commit;
        dbms_output.put_line(p3 || ' ' || p4||'  '||v_sql);
    exception
        dbms_output.put_line(v_sql);end;
    /
      

  5.   

    V_SQL  VARCHAR2(8000); --动态SQL
      

  6.   

    执行报错么?如果报错报的什么错误?如果不报错,是返回的记录为空么?在数据库执行下select cardno,cardpassword from card where cardstate = p1 and rownum = p2;能查出数据来么
      

  7.   

    语句能查出数据来  我用类似的语句去另一个表少查了一遍(改写了一下)  很正常 能出结果
    下面这个出错的代码create or replace procedure QUERYCARD
    (p1 in varchar2,p2 in number,p3 out card.cardno%type,p4 out card.cardpassword%type)
    as begin
    select cardno,cardpassword into p3,p4 from card where cardstate = p1 and rownum=p2;
    dbms_output.put_line(p3 || ' ' || p4);
    end;
    /set serveroutput on
    declare
    p3 varchar2(20);
    p4 varchar2(20);
    begin
    QUERYCARD('1',1,p3,p4);
    end;
    /下面这个是正确的 查的另一表的代码create or replace procedure empcaozuo3(para1 in varchar2,para4 number,para2 out varchar2,para3 out varchar2)
    as 
    begin 
      select empno,deptno into para2,para3 from emp where empno=para1 and rownum=para4; 
      dbms_output.put_line(para2 || '   ' || para3); 
    end; set serveroutput on
    declare
    para2 varchar2(20);
    para3 varchar2(20);
    begin
    empcaozuo3('1',1,para2,para3);
    end;
    /