私は 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() 関数の結果もクエリしたいと思います。