【发布时间】:2014-10-08 17:06:34
【问题描述】:
我有一个这样的 DECLARE 块
DECLARE
TYPE WordList IS TABLE OF VARCHAR2(50);
FUNCTION getWordList
RETURN WordList
IS
words WordList := WordList();
BEGIN
words.EXTEND;
words(1) := 'aardvark';
RETURN words;
END;
BEGIN
SELECT * FROM TABLE(getWordList);
END;
/
当我尝试从 sqlplus 运行它时,我得到了这个......
ERROR at line 15:
ORA-06550: line 15, column 23:
PLS-00231: function 'GETWORDLIST' may not be used in SQL
ORA-06550: line 15, column 23:
PL/SQL: ORA-00904: "GETWORDLIST": invalid identifier
ORA-06550: line 15, column 3:
PL/SQL: SQL Statement ignored
似乎如果我要在匿名块之外定义函数,那么它可以正常工作,但我试图避免这种情况,因为我想针对实时数据库运行一些函数,我不想这样做在脚本运行时实时创建和删除函数。如果我只在匿名函数中定义事物,那么我没有任何清理工作要做。
我要做的是编写一个函数,该函数将返回一个结果列表(以任何形式、集合、光标,我不挑剔),然后我可以将其传递给另一个函数以进行进一步处理。函数可能很复杂,我希望在将来重用它们,因此编写函数而不是在单个 SQL 语句中编写所有内容。
我是 Oracle 的新手,所以我试图找到符合规律而不是违背规律的习语和工作方式。
【问题讨论】:
标签: sql oracle function anonymous