簡體   English   中英

將Oracle PL / SQL數組輸入到流水線函數的參數中

[英]Oracle PL/SQL array input into parameter of pipelined function

我是PL / SQL的新手。 我在一個包內創建了一個流水線函數,該函數將一個數字數組(嵌套表)作為其參數輸入。

但是我無法嘗試通過sql查詢運行它。 請看下面

我的輸入數組

 CREATE OR REPLACE TYPE num_array is TABLE of number;

我的函數聲明

CREATE OR REPLACE PACKAGE "my_pack" as
    TYPE myRecord is RECORD(column_a NUMBER);
    TYPE myTable IS TABLE of myRecord;

    FUNCTION My_Function(inp_param num_array) return myTable PIPELINED;

end my_pack;

我的功能定義

CREATE OR REPLACE PACKAGE BODY "my_pack" as

FUNCTION My_Function(inp_param num_array) return myTable PIPELINED as
        rec myRecord;
    BEGIN

        FOR i in 1..inp_param.count LOOP
            FOR e IN 
                (
                   SELECT column_a FROM  table_a where id=inp_param(i)

                )
                LOOP
                rec.column_a := e.column_a;

                PIPE ROW (rec); 

            END LOOP;
        END LOOP;

    RETURN;
END;

end my_pack;

這是我嘗試從蟾蜍運行的最新代碼。 但這不起作用

declare
    myarray num_array;
    qrySQL varchar2(4000);
begin
    myarray := num_array(6341,6468);
    qrySQL := 'select * from TABLE(my_pack.My_Function(:myarray))';
    execute immediate qrySQL;
end;

所以我的問題是如何從TOAD或SQL Developer向該流水線函數提供數組。 一個例子真的很方便。

謝謝

該錯誤非常清楚,您有一個綁定變量,沒有分配任何東西。 您需要通過以下方式傳遞實際數組:

qrySQL := 'select * from TABLE(my_pack.My_Function(:myarray))';
execute immediate qrySQL using myarray;

如果要從PL / SQL調用它,則將靜態SQL用作游標可能會更有用:

set serveroutput on
declare
    myarray num_array;
begin
    myarray := num_array(6341,6468);
    for r in (select * from TABLE(my_pack.My_Function(myarray))) loop
      dbms_output.put_line(r.column_a);
    end loop;
end;
/

或者只是作為測試靜態查詢它,以獲取固定值:

select * from TABLE(my_pack.My_Function(num_array(6341,6468)));

SQL Fiddle對功能進行了一些細微調整,以消除我認為來自編輯和發布的錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM