表值函数语法错误

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 子句中使用表值函数的“语法不正确”

为啥 erlang spawn 函数调用中出现语法错误 - “之前的语法错误:')'”?

表变量 表中的值函数

SQL 语法错误:SET 语法(Lambda 函数)

为啥我在此 SQL Server 内联表值函数上收到 11555 错误?