我正在尝试将选定的列值插入表格列表中,这是我的代码:
首先我创建了一个对象:
CREATE OR REPLACE TYPE ordersinf as OBJECT(orderDate DATE, orderName VARCHAR2(20), orderPrice NUMBER)
然后
CREATE OR REPLACE orders_tab IS TABLE OF ordersinf
最后我的功能:
create or replace function execImmFunc(orderName in VARCHAR2, orderPrice in NUMBER) return orders_tab is
Result orders_tab := orders_tab();
myName orders_table.orders_name%type;
myPrice orders_table.orders_price%type;
begin
RESULT.extend();
SELECT orders_name, orders_price
**INTO RESULT(1).ordersInf('NULL',orders_name, orders_price)**
--I'm Having trouble with the above code..
FROM orders_table
WHERE orders_name = orderName AND orders_price = orderPrice;
--result.extend();
--result(result.last) := ordersinf(NULL,orderName, orderPrice);
return(Result);
end execImmFunc;
我该如何做到这一点?如果这是一个愚蠢的问题,我很抱歉,但我对此很新...
答案 0 :(得分:2)
嘿,只需使用PIPELINED即可实现替代方法 功能如下所述。希望它也有帮助
CREATE OR REPLACE TYPE ordersinf
AS
OBJECT
(
orderDate DATE,
orderName VARCHAR2(20 CHAR),
orderPrice NUMBER);
CREATE OR REPLACE TYPE orders_tab IS TABLE OF ordersinf;
CREATE OR REPLACE FUNCTION execImmFunc(
orderName IN VARCHAR2,
orderPrice IN NUMBER)
RETURN orders_tab pipelined
IS
Rsult orders_tab := orders_tab();
myName orders_table.orders_name%type;
myPrice orders_table.orders_price%type;
BEGIN
SELECT NULL,
orders_name,
orders_price BULK COLLECT
INTO Rsult
FROM orders_table
WHERE orders_name = orderName
AND orders_price = orderPrice;
FOR i IN Rsult.FIRST..Rsult.LAST
LOOP
PIPE ROW(I);
END LOOP;
RETURN ;
END execImmFunc;
答案 1 :(得分:1)
您可以使用BULK COLLECT
来检索数据:
create or replace function execImmFunc(orderName in VARCHAR2, orderPrice in NUMBER)
return orders_tab is
Result orders_tab := orders_tab();
begin
SELECT ordersinf(null, orders_name, orders_price)
bulk collect INTO RESULT
FROM orders_table
WHERE orders_name = orderName AND orders_price = orderPrice;
return(Result);
end execImmFunc;
测试:
create or replace type ordersinf
as object(orderdate date, ordername varchar2(20), orderprice number);
create or replace type orders_tab is table of ordersinf;
create table orders_table (orders_name varchar2(20), orders_price number);
insert into orders_table values ('ORD1', 101);
insert into orders_table values ('ORD2', 102);
insert into orders_table values ('ORD3', 103);
select * from table(execImmFunc('ORD1', 101))
输出:
ORDERDATE ORDERNAME ORDERPRICE
----------- -------------------- ----------
ORD1 101