我定义了一个返回类型为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;
--没有任何问题,运行正常
--我在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;
--没有任何问题,运行正常
能否提供一种用oracle函数返回多值,并能在SQL里面调用的方法?谢谢
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;
/
兄台,请问函数return_multi_value怎么样在SQL里面调用,而不是PL/SQL环境中,谢谢指导
我就是自定义一个Record类型,可是在SQL里面无法调用,真的只能在PL/SQL环境里调用返回自定义类型的函数吗?