簡體   English   中英

Oracle PL / SQL Developer:從打包過程返回%RowType

[英]Oracle PL/SQL Developer: Return %RowType from Package Procedure

我是Oracle Pl \\ SQL的新手。 我只是試圖用一個返回一組對象ID的過程創建一個簡單的Package; 代碼如下:

--Package Spec
CREATE OR REPLACE PACKAGE TEST IS
--GET OBJECT ID'S FROM CONTROL TABLE
   PROCEDURE get_object_id_control(p_obj_id OUT abc_table%ROWTYPE);
END;

--Package Body
PROCEDURE get_object_id_control(p_obj_id OUT abc_table%ROWTYPE) AS
  BEGIN
    SELECT object_id
      INTO p_obj_id
      FROM abc_table
     WHERE fec_proc IS NULL;     
  END;

我收到錯誤:PL / SQL:ORA-00913:值太多。 這是返回相同數據類型的多個值的正確方法,還是有更好的方法? 提前致謝。

您可以創建自定義表類型,並將過程的out參數設置為該類型。

CREATE TABLE ABC_TABLE(ID varchar2(100));

create or replace type abc_tab is table of varchar2(100);
/

CREATE OR REPLACE PACKAGE TEST IS
   PROCEDURE get_object_id_control(p_obj_id OUT abc_tab);
END;
/

CREATE OR REPLACE PACKAGE BODY TEST IS
  PROCEDURE get_object_id_control(p_obj_id OUT abc_tab) AS
  BEGIN
    SELECT id
      bulk collect INTO p_obj_id
      FROM abc_table;   
  END;
END;
/

然后,您可以這樣稱呼它:

declare
  v abc_tab;
begin
  TEST.get_object_id_control(p_obj_id => v);
  for i in v.first..v.last loop
    dbms_output.put_line(v(i));
  end loop;
end;
/

與GurV的答案類似(因為他被擊敗了我30秒...),您也可以使用PL / SQL對象類型。 如果不需要在SQL中引用類型,則不需要CREATE TYPE語句。

--Package Spec
CREATE OR REPLACE PACKAGE TEST AS
  TYPE id_table_type IS TABLE OF NUMBER;
--GET OBJECT ID'S FROM CONTROL TABLE
   PROCEDURE get_object_id_control(p_obj_id_list OUT id_table_type);
END;

--Package Body
CREATE OR REPLACE PACKAGE BODY TEST AS
   PROCEDURE get_object_id_control(p_obj_id_list OUT id_table_type) AS
  BEGIN
    SELECT object_id 
      BULK COLLECT INTO p_obj_id_list
      FROM abc_table
     WHERE fec_proc IS NULL;
  END;
END;

要使用它:

DECLARE
  l_id_list   test.id_table_type;
BEGIN
  test.get_object_id_control (p_obj_id_list => l_id_list);

  FOR i IN l_id_list.FIRST .. l_id_list.LAST LOOP
    DBMS_OUTPUT.put_line (l_id_list (i));
  END LOOP;
END;

暫無
暫無

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

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