选择元素并将其插入Oracle

时间:2015-12-10 13:30:27

标签: oracle plsql

我正在尝试将选定的列值插入表格列表中,这是我的代码:

首先我创建了一个对象:

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;

我该如何做到这一点?如果这是一个愚蠢的问题,我很抱歉,但我对此很新...

2 个答案:

答案 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