我希望能够运行以下代码来选择记录:
所需的语法
select * from table(my_new_package.get_data(123))
我已成功创建可编译的代码,但无法使用上述语法检索数据。谁能确定我如何更新它以确保上述查询能够正常运行。
这是当前代码:
包装规格
create or replace package my_new_package is
-- Types
-------------
type my_data_type is record (
myfield1 VARCHAR2(10)
,myfield2 VARCHAR2(10)
);
type my_data_type_TABLE is table of my_data_type index by binary_integer;
-- Functions
-------------
FUNCTION get_data(i_id_number varchar2) return my_data_type_table;
end my_new_package;
包体
create or replace package body my_new_package is
function get_data(i_id_number varchar2) return my_data_type_table IS
current_row my_data_type;
all_rows my_data_type_table;
n integer;
-- Will update the cursor to pull real data
cursor cur is
select '1' myfield1, '10' myfield2 from dual
union all
select '2' myfield1, '20' myfield2 from dual
;
BEGIN
n := 0;
for rec in cur LOOP
n := n+ 1;
current_row := rec;
-- do some things to current row
-- Add modified current row
all_rows(n) := current_row;
END LOOP;
return all_rows;
END;
end my_new_package;
上面的代码可以编译,但我无法使用所需的语法从数据中进行选择。
无论如何,在自定义类型仅嵌入包级别而不是在数据库级别创建的情况下,是否可以这样做?
这将适用于 Oracle 12(和 Oracle 19)。
您需要将函数定义为流水线。以下适用于 19c。
包头:
包体:
测试: