我定义了一个返回类型为Record的函数,可是在SQL里面总是无法调用,在PL/SQL里面运行一切正常,同样一个返回为字符串的函数却能在SQL里面运行正常,请求高人指点create or replace package RTM_Main_Data is
  --我在package中自定义了一个Record类型--RType
  Type RType is Record(
         testerid varchar2(30),
         testhead number,
         headQty number,
         yield1 varchar2(120),
         yield2 varchar2(120));
  --定义了一个函数,返回类型为RType
  function GetAllHead(tid varchar2) 
           return Rtype ;
  --返回类型为varchar2的普通函数  
  function SayHello(s in varchar2)
           return varchar2;
end RTM_Main_Data;我想在SQL中调用GetAllHead()函数,可是总是报错
     select RTM_Main_Data.GetAllHead('A893-39') from Atable  --不行,数据类型不匹配
     select (RTM_Main_Data.GetAllHead('A893-39')).headQty from Atable  --不行,数据类型不匹配
     select * from table(RTM_Main_Data.GetAllHead('A893-39'))  --不行,数据类型不匹配
     select RTM_Main_Data.SayHello('aa') from Atable   --OK在PL/SQl test window 里面
     declare 
           -- Local variables here
           r rtm_main_data.RType;
     begin
           -- Test statements here
           r:=rtm_main_data.GetAllHead('A567-O-001-TERA');
           Dbms_Output.put_line(r.headQty);
     end;
--没有任何问题,运行正常

解决方案 »

  1.   

    record是pl/sql中的数据类型,只能用于pl/sql环境,sql语句无法使用.
      

  2.   

    楼上兄台,
    能否提供一种用oracle函数返回多值,并能在SQL里面调用的方法?谢谢
      

  3.   

    用OUT返回类型可以返回多个参数,用function和procedure均可,下面是用function的一个例子:
    CREATE OR REPLACE FUNCTION return_multi_value(p1 IN NUMBER, p2 OUT NUMBER, p3 OUT NUMBER) RETURN VARCHAR2
    AS
    BEGIN
      p2 := power(p1, 2);  --求p1的平方值
      p3 := ROUND(sqrt(p1),2);      --求p1的开方值
      RETURN 'SUCCESS';
    EXCEPTION WHEN OTHERS THEN
      RETURN 'FAILED';
    END;
    /下面调用上面的函数
    DECLARE
      p2 NUMBER;
      p3 NUMBER;
      res VARCHAR2(10);
    BEGIN
      res := return_multi_value(10, p2, p3);
      DBMS_OUTPUT.PUT_LINE(res);
      DBMS_OUTPUT.PUT_LINE(p2||','||p3);
    END;
    /
      

  4.   


    兄台,请问函数return_multi_value怎么样在SQL里面调用,而不是PL/SQL环境中,谢谢指导
      

  5.   


    我就是自定义一个Record类型,可是在SQL里面无法调用,真的只能在PL/SQL环境里调用返回自定义类型的函数吗?