我的代码:
CREATE OR REPLACE
FUNCTION TODAY(text IN STRING) RETURN STRING AS
DECLARE
output STRING;
BEGIN
output := text;
output += SYSDATE;
RETURN (output);
END TODAY;
编译时的错误是:
错误(3,1):PLS-00103:期待时遇到符号“DECLARE” 以下之一:begin function package pragma procedure 子类型使用表单当前游标外部语言
尝试将代码最小化为:
CREATE OR REPLACE
FUNCTION TODAY(text IN STRING) RETURN STRING AS
DECLARE
output STRING;
BEGIN
RETURN ('a');
END TODAY;
问题仍然存在,我该如何声明变量?
答案 0 :(得分:2)
删除DECLARE
。你在函数声明中不需要它。
CREATE OR REPLACE
FUNCTION TODAY(text IN STRING) RETURN STRING AS
output STRING;
BEGIN
output := text;
output += SYSDATE;
RETURN (output);
END TODAY;
/
答案 1 :(得分:1)
有3个问题:
首先,您应该删除DECLARE
关键字。
其次,STRING
确实是VARCHAR2
,您必须指定其最大长度,例如STRING(200)
。
第三,要连接值,请使用||
运算符。您不能使用then +=
运算符,PL / SQL中是否没有这样的运算符。我还建议使用TO_CHAR
以您想要的格式获取日期。
总而言之,这有效:
CREATE OR REPLACE
FUNCTION TODAY(text IN STRING) RETURN STRING AS
output STRING(200);
BEGIN
output := text;
output := output || TO_CHAR(SYSDATE, 'DD-MM-YYYY');
RETURN (output);
END TODAY;
/
SELECT today('Today is ') AS val FROM dual;
VAL ------------------- Today is 19-11-2013
您可以在Oracle文档中了解有关日期格式模型的更多信息:Format Models
答案 2 :(得分:0)
我的代码:
在函数和过程中声明变量时,我们不必在oracle中指定'declare'子句。如果我们进行匿名阻止,我们只指定'declare'。
<p>CREATE OR REPLACE
FUNCTION TODAY(text IN STRING) RETURN STRING AS
output STRING;
BEGIN
output := text;
output += SYSDATE;
RETURN (output);
END TODAY;</p>
enter code here
<p>CREATE OR REPLACE
FUNCTION TODAY(text IN STRING) RETURN STRING AS
output STRING;
BEGIN
RETURN ('a');
END TODAY;</p>