【发布时间】:2018-02-02 02:35:11
【问题描述】:
我从 SQL Server 来到 Oracle 11g,我正在尝试使用 SQL Developer 创建一个简单的函数 (getIDs),它将返回查询结果 (SELECT id FROM employee)。我在互联网上找到的任何东西似乎都不起作用。这是我正在尝试的代码:
test_pkg:
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() 函数的结果。
【问题讨论】:
-
你在包中创建的“number_table”类型不能在SQL语句中调用。 SQL 只能在架构级别查看用户定义的类型变量。
标签: oracle plsql oracle-sqldeveloper table-functions