我从 SQL Server 来到 Oracle 11g,我正在尝试使用 SQL Developer 创建一个简单的函数 (getIDs),它将返回查询结果 (SELECT id FROM employee)。我在互联网上找到的任何东西似乎都不起作用。这是我正在尝试的代码:
测试包:
CREATE OR REPLACE PACKAGE test_pkg AS
TYPE number_table IS TABLE OF NUMBER;
FUNCTION getIDs RETURN number_table;
END TEST_PKG;
test_pkg 正文:
CREATE OR REPLACE PACKAGE BODY test_pkg AS
FUNCTION getIDs RETURN number_table AS
ids number_table;
BEGIN
SELECT id BULK COLLECT INTO ids
FROM employee;
RETURN ids;
END getIDs;
END test_pkg;
SQL 开发人员工作表:
SELECT *
FROM TABLE(test_pkg.getIDs());
-- The above gives
-- ORA-00902: invalid datatype
DECLARE
nums test_pkg.number_table;
BEGIN
SELECT column_value BULK COLLECT INTO nums
FROM TABLE(test_pkg.getIDs);
END;
-- The above gives:
-- PLS-00642: local collection types not allowed in SQL statements
-- PL/SQL: ORA-22905: cannot access rows from a non-nested table item
如果有人能看到我在这里做错了什么,我将不胜感激。我花了很多时间寻找答案,看来这应该可行。最后,我还想在其他函数、过程和查询中查询 getIDs() 函数的结果。