--pl/sql如下:
declare
rout varchar2(100);
re varchar2(100);
begin
re:= zhiydba.f_login('33','444',rs_msg => rout);
if re<>'-1' then
rout:='';
end if;
--select rout
end ;怎么以数据表的形式返回rout的值

解决方案 »

  1.   

    --在sqlplus在中执行块--声明变量
    var cur refcursor;--执行块
    DECLARE
      rout VARCHAR2(100);
      re   VARCHAR2(100);
    BEGIN
      re := zhiydba.f_login('33', '444', rs_msg => rout);
      IF re <> '-1' THEN
        rout := '';
      END IF;
      OPEN :cur FOR
        SELECT rout FROM dual;
    END;
    /--打印游标
    print cur;
      

  2.   

    请问如果在ado.net 中执行这些sql,比如 string sql = @"
    --在sqlplus在中执行块
    --声明变量
    var cur refcursor;
    --执行块
    DECLARE
      rout VARCHAR2(100);
      re   VARCHAR2(100);
    BEGIN
      re := zhiydba.f_login('33', '444', rs_msg => rout);
      IF re <> '-1' THEN
        rout := '';
      END IF;
      OPEN :cur FOR
        SELECT rout FROM dual;
    END;
    --打印游标
    print cur;
    ";
                using (OracleConnection conn = new OracleConnection(connStr))
                {
                    conn.Open();
                    OracleCommand cmd = conn.CreateCommand();
                    cmd.CommandText = sql;
                    cmd.CommandType = System.Data.CommandType.Text;                object result = cmd.ExecuteOracleScalar();
                }返回的result 值要等于查询结果rout ,还需要对sql进行修改吗?
      

  3.   

    还是将你上面的sql组合成一个procedure吧,这样可以满足动态的请求,
    而且你可以通过给过程传递参数,返回不同表中对数据到dateset中
      

  4.   

    --改为存储过程,返回游标
    CREATE OR REPLACE PROCEDURE p_getret(cur OUT SYS_REFCURSOR) IS
      rout VARCHAR2(100);
      re   VARCHAR2(100);
    BEGIN
      re := zhiydba.f_login('33', '444', rs_msg => rout);
      IF re <> '-1' THEN
        rout := '';
      END IF;
      OPEN cur FOR
        SELECT rout FROM dual;
    END;
    /
      

  5.   

    但悲剧的是其它公司的数据库,只提供了函数zhiydba.f_login,而不能在数据库中创建存储过程..
      

  6.   

    请教各位大虾,用临时表怎么实现?
    我试了下下面这种写法,但不行declare
    rout varchar2(100);
    re varchar2(100);
    begin
    re:= zhiydba.f_login('33','444',rs_msg => rout);
    if re<>'-1' then
    rout:='';
    end if;--输出结果
    WITH TEST AS(
    SELECT rout AS result FROM Dual
    )
    select * from TEST;end;