SELECT CCName INTO v_l_CCName FROM TABLE(NS_QX_GetClientByCG(v_CGNo)) WHERE CCNo = v_CCNo AND ROWNUM <= 1; 我就是在存储过程中这么用的,其中NS_QX_GetClientByCG是个函数
SELECT CCName INTO v_l_CCName FROM TABLE(NS_QX_GetClientByCG(v_CGNo)) WHERE CCNo = v_CCNo AND ROWNUM <= 1; 我就是在存储过程中这么用的,其中NS_QX_GetClientByCG是个函数
--你想用 table() 这种方式查询数据,你的函数不能是普通函数。 create table tb1(k number, v varchar2(10)); insert into tb1(k, v) values(100,'aaa'); insert into tb1(k, v) values(200,'bbb'); insert into tb1(k, v) values(200,'ccc'); select * from tb1; create type row_type1 as object(k number, v varchar2(10)); create type table_type1 as table of row_type1; create or replace function fun1 return table_type1 pipelined as v row_type1; begin for myrow in (select k, v from tb1) loop v := row_type1(myrow.k, myrow.v); pipe row (v); end loop; return; end; select * from table(fun1);
grant execute on <return type name of NS_QX_GetClientByCG> to ...
这是我的函数,也是这样啊,为什么不行呢 CREATE OR REPLACE FUNCTION NS_QX_GetClientByCG ( v_CGNo IN VARCHAR2 ) RETURN NS_QX_GetClientByCG_pkg.tt_v_Ret_54_type PIPELINED AS v_temp SYS_REFCURSOR; v_temp_1 TT_V_RET_54%ROWTYPE; BEGIN IF v_CGNo = '01' THEN INSERT INTO tt_v_Ret_54 ( CLTNO, CLTNAME, TREENO, CCID, CGNO, CCNO, CCNAME, CCTREENO, "LEVEL", FULLNAME, MEMO ) ( SELECT a.CltNo , a.CltName , a.TreeNo , b.CCID , b.CGNo , b.CCNo , b.CCName , b.TreeNo , b."Level" , b.FullName , b.Memo FROM NsClient a JOIN VW_NsCltClass b ON ( a.TradeID = b.CCID ) ); ELSE IF v_CGNo = '02' THEN INSERT INTO tt_v_Ret_54 ( CltNo, CltName, TreeNo, CCID, CGNo, CCNo, CCName, CCTreeNo, "LEVEL", FullName, Memo ) ( SELECT a.CltNo , a.CltName , a.TreeNo , b.CCID , b.CGNo , b.CCNo , b.CCName , b.TreeNo , b."Level" , b.FullName , b.Memo FROM NsClient a JOIN VW_NsCltClass b ON ( a.AreaID = b.CCID ) ); ELSE IF v_CGNo = '03' THEN INSERT INTO tt_v_Ret_54 ( CltNo, CltName, TreeNo, CCID, CGNo, CCNo, CCName, CCTreeNo, "LEVEL", FullName, Memo ) ( SELECT a.CltNo , a.CltName , a.TreeNo , b.CCID , b.CGNo , b.CCNo , b.CCName , b.TreeNo , b."Level", b.FullName , b.Memo FROM NsClient a JOIN VW_NsCltClass b ON ( a.ClassGrp1 = b.CCID ) ); ELSE IF v_CGNo = '04' THEN INSERT INTO tt_v_Ret_54 ( CltNo, CltName, TreeNo, CCID, CGNo, CCNo, CCName, CCTreeNo, "LEVEL", FullName, Memo ) ( SELECT a.CltNo , a.CltName , a.TreeNo , b.CCID , b.CGNo , b.CCNo , b.CCName , b.TreeNo , b."Level" , b.FullName , b.Memo FROM NsClient a JOIN VW_NsCltClass b ON ( a.ClassGrp2 = b.CCID ) ); ELSE IF v_CGNo = '05' THEN INSERT INTO tt_v_Ret_54 ( CltNo, CltName, TreeNo, CCID, CGNo, CCNo, CCName, CCTreeNo, "LEVEL", FullName, Memo ) ( SELECT a.CltNo , a.CltName , a.TreeNo , b.CCID , b.CGNo , b.CCNo , b.CCName , b.TreeNo , b."Level" , b.FullName , b.Memo FROM NsClient a JOIN VW_NsCltClass b ON ( a.ClassGrp3 = b.CCID ) ); END IF; END IF; END IF; END IF; END IF; OPEN v_temp FOR SELECT * FROM tt_v_Ret_54; LOOP FETCH v_temp INTO v_temp_1; EXIT WHEN v_temp%NOTFOUND; PIPE ROW ( v_temp_1 ); END LOOP; END;麻烦您再给看看吧,到底怎么回事啊?!!!!谢谢,谢谢!!!!!
INTO v_l_CCName
FROM TABLE(NS_QX_GetClientByCG(v_CGNo))
WHERE CCNo = v_CCNo AND ROWNUM <= 1;
我就是在存储过程中这么用的,其中NS_QX_GetClientByCG是个函数
INTO v_l_CCName
FROM TABLE(NS_QX_GetClientByCG(v_CGNo))
WHERE CCNo = v_CCNo AND ROWNUM <= 1;
我就是在存储过程中这么用的,其中NS_QX_GetClientByCG是个函数
--你想用 table() 这种方式查询数据,你的函数不能是普通函数。
create table tb1(k number, v varchar2(10)); insert into tb1(k, v) values(100,'aaa');
insert into tb1(k, v) values(200,'bbb');
insert into tb1(k, v) values(200,'ccc'); select * from tb1; create type row_type1 as object(k number, v varchar2(10)); create type table_type1 as table of row_type1; create or replace function fun1 return table_type1 pipelined as
v row_type1;
begin
for myrow in (select k, v from tb1) loop
v := row_type1(myrow.k, myrow.v);
pipe row (v);
end loop;
return;
end; select * from table(fun1);
这是我的函数,也是这样啊,为什么不行呢
CREATE OR REPLACE FUNCTION NS_QX_GetClientByCG
(
v_CGNo IN VARCHAR2
)
RETURN NS_QX_GetClientByCG_pkg.tt_v_Ret_54_type PIPELINED
AS
v_temp SYS_REFCURSOR;
v_temp_1 TT_V_RET_54%ROWTYPE;
BEGIN
IF v_CGNo = '01' THEN
INSERT INTO tt_v_Ret_54
( CLTNO, CLTNAME, TREENO, CCID, CGNO, CCNO, CCNAME, CCTREENO, "LEVEL", FULLNAME, MEMO )
( SELECT a.CltNo ,
a.CltName ,
a.TreeNo ,
b.CCID ,
b.CGNo ,
b.CCNo ,
b.CCName ,
b.TreeNo ,
b."Level" ,
b.FullName ,
b.Memo
FROM NsClient a
JOIN VW_NsCltClass b
ON ( a.TradeID = b.CCID ) );
ELSE
IF v_CGNo = '02' THEN
INSERT INTO tt_v_Ret_54
( CltNo, CltName, TreeNo, CCID, CGNo, CCNo, CCName, CCTreeNo, "LEVEL", FullName, Memo )
( SELECT a.CltNo ,
a.CltName ,
a.TreeNo ,
b.CCID ,
b.CGNo ,
b.CCNo ,
b.CCName ,
b.TreeNo ,
b."Level" ,
b.FullName ,
b.Memo
FROM NsClient a
JOIN VW_NsCltClass b
ON ( a.AreaID = b.CCID ) );
ELSE
IF v_CGNo = '03' THEN
INSERT INTO tt_v_Ret_54
( CltNo, CltName, TreeNo, CCID, CGNo, CCNo, CCName, CCTreeNo, "LEVEL", FullName, Memo )
( SELECT a.CltNo ,
a.CltName ,
a.TreeNo ,
b.CCID ,
b.CGNo ,
b.CCNo ,
b.CCName ,
b.TreeNo ,
b."Level",
b.FullName ,
b.Memo
FROM NsClient a
JOIN VW_NsCltClass b
ON ( a.ClassGrp1 = b.CCID ) );
ELSE
IF v_CGNo = '04' THEN
INSERT INTO tt_v_Ret_54
( CltNo, CltName, TreeNo, CCID, CGNo, CCNo, CCName, CCTreeNo, "LEVEL", FullName, Memo )
( SELECT a.CltNo ,
a.CltName ,
a.TreeNo ,
b.CCID ,
b.CGNo ,
b.CCNo ,
b.CCName ,
b.TreeNo ,
b."Level" ,
b.FullName ,
b.Memo
FROM NsClient a
JOIN VW_NsCltClass b
ON ( a.ClassGrp2 = b.CCID ) );
ELSE
IF v_CGNo = '05' THEN
INSERT INTO tt_v_Ret_54
( CltNo, CltName, TreeNo, CCID, CGNo, CCNo, CCName, CCTreeNo, "LEVEL", FullName, Memo )
( SELECT a.CltNo ,
a.CltName ,
a.TreeNo ,
b.CCID ,
b.CGNo ,
b.CCNo ,
b.CCName ,
b.TreeNo ,
b."Level" ,
b.FullName ,
b.Memo
FROM NsClient a
JOIN VW_NsCltClass b
ON ( a.ClassGrp3 = b.CCID ) );
END IF;
END IF;
END IF;
END IF;
END IF;
OPEN v_temp FOR
SELECT *
FROM tt_v_Ret_54; LOOP
FETCH v_temp INTO v_temp_1;
EXIT WHEN v_temp%NOTFOUND;
PIPE ROW ( v_temp_1 );
END LOOP;
END;麻烦您再给看看吧,到底怎么回事啊?!!!!谢谢,谢谢!!!!!