我有以下包和功能結構,需要了解是否可能。
如果是 - 那么請幫助我理解 - 我哪里出錯了。
包 -->
CREATE OR REPLACE PACKAGE MY_PACKAGE AS
TYPE MY_EVENTS IS TABLE OF MY_TABLE%ROWTYPE INDEX BY PLS_INTEGER ;
FUNCTION MY_FUNCTION RETURN MY_EVENTS;
END MY_PACKAGE ;
包體 -->
CREATE OR REPLACE PACKAGE BODY MY_PACKAGE AS
FUNCTION MY_FUNCTION RETURN MY_EVENTS IS
EVENT_RECORDS MY_EVENTS;
BEGIN
select MT.* BULK COLLECT INTO EVENT_RECORDS from MY_TABLE MT ;
/*
some processing on EVENT_RECORDS
*/
RETURN EVENT_RECORDS ;
END MY_FUNCTION;
END MY_PACKAGE ;
我試圖呼叫這個函式的方式——>
select MY_PACKAGE.MY_FUNCTION from dual ;
它給出了錯誤-->
ORA-00902: invalid datatype
00902. 00000 - "invalid datatype"
*Cause:
*Action:
Error at Line: 13 Column: 8
提前謝謝你的幫助 !。
uj5u.com熱心網友回復:
如果您想在SQL 級別回傳該型別,那么您必須在 SQL 級別宣告它(型別),而不是在包中。
MY_FUNCTION但是,如果您從 PL/SQL呼叫,它會按照您的方式作業。
以下是您可以如何執行此操作的示例:
型別:
SQL> create or replace type t_dept_row as object
2 (deptno number,
3 dname varchar2(20),
4 loc varchar2(20));
5 /
Type created.
SQL> create or replace type t_dept_tab as table of t_dept_row;
2 /
Type created.
包裹:
SQL> create or replace package my_package as
2 function my_function return t_dept_tab;
3 end;
4 /
Package created.
SQL> create or replace package body my_package as
2 function my_function return t_dept_tab
3 is
4 l_tab t_dept_tab;
5 begin
6 select t_dept_row(deptno, dname, loc)
7 bulk collect into l_tab
8 from dept;
9
10 return l_tab;
11 end;
12 end;
13 /
Package body created.
測驗:
SQL> select * From table(my_package.my_function);
DEPTNO DNAME LOC
---------- -------------------- --------------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL>
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/426879.html
