declare a varchar2(40);
        b varchar2(20);
begin
    a:='123';
    b:='456';
    select a,b from dual;
end;
/
有错怎么改让它返回一个表,返回的表有两列,一个是a,一个是b。必须要返回表。

解决方案 »

  1.   

    pl/sql块中直接select查询是不起作用的,你可以调用系统输出包来输出这两个值set serveroutput ondeclare 
    a varchar2(40); 
    b varchar2(20); 
    begin 
        a:='123'; 
        b:='456'; 
        dbms_output.put_line('a:'||a||',b:'||b);
    end; 

      

  2.   

    使用游标返回吧declare
        ocursor      sys_refcursor;
        stra         varchar2(20);
        strb         varchar2(20);
    begin
        stra := '123';
        strb := '456';    open ocursor for
            select stra as col1, strb as col2 from dual;
    end;
      

  3.   

    可以看看http://topic.csdn.net/u/20090721/12/ba403739-3212-4016-83ec-2a7062f21081.html
    这个贴子,与你的需求有些相似.
      

  4.   

    declare 
        a varchar2(40);
        b varchar2(20);
    begin
        a:='123';
        b:='456';
        execute immediate 'select ' || a || ', ' || b || 'from dual';
    end; 
      

  5.   


    --建立过程
     create or replace procedure 
     p_test(p_cur out sys_refcursor)
     as 
     begin 
     open p_cur
     for
     select * from loginfo;
     end p_test; 
    --sqlplus调用
    var r refcursor;
    exec p_test(:r);
    print r;
      

  6.   

    SQL> create or replace  type T_STRARR is table of varchar(4000);
      2  /SQL> create or replace function sample_table_test return T_STRARR is
      2  v_arr1 T_STRARR;
      3  begin
      4  v_arr1 := T_STRARR(2);
      5  v_arr1.EXTEND;
      6  v_arr1(1):='a';
      7  v_arr1.EXTEND;
      8  v_arr1(2):='b';
      9  return v_arr1;
     10  end;
     11  /Function created.
    SQL> select * from table(sample_table_test);COLUMN_VALUE
    --------------------------------------------------------------------------------
    a
    b