表值函数语法错误
Posted
技术标签:
【中文标题】表值函数语法错误【英文标题】:table value function syntax error 【发布时间】:2017-02-22 08:40:03 【问题描述】:我在 windows8 上的 oracle 12c 中有以下表值函数代码 如下
CREATE TABLE MisJob
( ID RAW(16),
JobTitle VARCHAR2(35 BYTE),
MinSalary NUMBER(6,0),
MaxSalary NUMBER(6,0),
PRIMARY KEY (ID)
)
CREATE TYPE MISJOBType AS OBJECT ( JobTitle VARCHAR2(35 BYTE), MinSalary NUMBER(6,0),MaxSalary NUMBER(6,0));
CREATE TYPE MISJOBTypeCol AS TABLE OF MISJOBType;
CREATE OR REPLACE FUNCTION fEmployee (jobid IN RAW(16))
RETURN MISJOBTypeCol PIPELINED IS
BEGIN
FOR i IN (SELECT * FROM MisJob)LOOP
PIPE ROW(MISJOBType(i.JobTitle, i.MinSalary,i.MaxSalary));
END LOOP;
RETURN;
END;
但我得到了错误 错误(2,13):PLS-00103:在期望以下之一时遇到符号“(”::=。),@%默认字符符号“:=”被替换为“(”以继续。
我不知道为什么,即使我遵循了这个例子 Table-Valued Functions in ORACLE 11g ? ( parameterized views )
怎么了
【问题讨论】:
【参考方案1】:去掉形式参数的大小限制:
CREATE OR REPLACE FUNCTION fEmployee (jobid IN RAW)
...
From the documentation:
...您不能在形式参数声明中包含约束
【讨论】:
以上是关于表值函数语法错误的主要内容,如果未能解决你的问题,请参考以下文章
SQL 2005 - 表值函数编译正常,但选择时在 .. 附近抛出不正确的语法
在 T-SQL 查询的 SELECT 子句中使用表值函数的“语法不正确”