我有表A。如果我使用内联函数进行查询
with function f(n number) return varchar2 as
begin
return 'const string';
end;
select id, val, count, f(count) as value from A;
结果将是:
ID VAL COUNT VALUE
---------- -------------------- ---------- ---------------
1 car 4 const string
2 building 15 const string
但是,如果我尝试使功能更复杂
with function f(n number)
return varchar2 as
begin
IF n < 5 THEN
return 'small';
ELSIF n < 50 THEN
return 'normal';
ELSE
return 'big';
END IF;
end;
select id, val, count, f(count) as value from A;
出现错误消息:
with function f(n number)
*
ERROR at line 1:
ORA-00905: missing keyword
这是什么问题?我对命令使用正确的语法吗?
答案 0 :(得分:0)
您的if
语句在then
条件子句后缺少elsif
,因此缺少指向函数f
的关键字错误。另外,解决此错误后,您可能会得到一个指向最后一个分号的ORA-00933: SQL command not properly ended
。有趣的是,“;”当WITH子句中包含PL / SQL声明时,似乎不能作为SQL语句的终止符。如果我们尝试单独使用它,SQL * Plus将等待输入更多文本。因此,您必须在新行上以/
结尾。即使在SQL Reference manual中的示例中,也使用;
和/
的组合。这是我在PL / SQL Developer 11中测试过的示例:
WITH
FUNCTION f(n number) return varchar2 IS
begin
if n<5 then
return 'small';
elsif (n>5 AND n<50) then
return 'medium';
else
return 'big';
end if;
end;
select f(25) from dual
/
输出:
F(25)
medium
编辑:另外,在函数定义中将AS
更改为IS
。