ORA-00907 使用 sql 调用函数时

Posted

技术标签:

【中文标题】ORA-00907 使用 sql 调用函数时【英文标题】:ORA-00907 when using sql to call a function 【发布时间】:2015-12-22 17:18:40 【问题描述】:

尝试从返回自定义类型的函数中进行选择,该类型是表格

我认为这会起作用

 select * from table(FW.CustomFunction ('value1','value2')) 

返回一个

ora-000902: 无效的数据类型

好的,所以我认为这会起作用:

select * from table(cast  FW.CustomFunction ('value1','value2') AS CustomTypes.CustomTable  )

但我明白了

ORA-00907: 缺少右括号

任何线索我错过了什么? 架构定义如下:

CREATE OR REPLACE PACKAGE FW.CustomTypes IS
    TYPE CustomTable IS TABLE OF VARCHAR2(255 CHAR)
        INDEX BY BINARY_INTEGER;
END CustomTypes;
/

CREATE OR REPLACE FUNCTION FW.CustomFunction ( param1 IN VARCHAR2, param2 IN VARCHAR2 ) RETURN CustomTypes.CustomTable IS
    CustomTableToReturn CustomTypes.CustomTable;
BEGIN
    LOOP
        ...add items to CustomTableToReturn

    END LOOP; 

    RETURN CustomTableToReturn;
END;
/

【问题讨论】:

不确定oracle,但在sql-sever中这是select * from yourTableValuedFunction () where somefield = 'value1' etc 【参考方案1】:

要转换的参数需要用括号括起来:

table(cast ( FW.CustomFunction ('value1','value2') AS CustomTypes.CustomTable ) )

【讨论】:

啊..我错过了添加它,但我确实尝试了这个。它返回 ORA-00902: invalid datatype....格式如下: select * from table(cast ( FW.CustomFunction ('value1','value2') AS CustomTypes.CustomTable )) 在我看来这是一个应该可以工作的。

以上是关于ORA-00907 使用 sql 调用函数时的主要内容,如果未能解决你的问题,请参考以下文章

exeption ORA-00907: missing right parenthesis

SQL 错误:ORA-00907:缺少右括号 00907。00000 -“缺少右括号”

sql错误:ORA-00907:缺少右括号[重复]

ORA-00907: SQL 中的自然连接缺少右括号

Oracle Live SQL:ORA-00907:缺少右括号 -

Oracle SQL - 奇怪的“ORA-00907 缺少右括号”错误