Oracle SQL开发人员。创建存储过程时出现语法错误

时间:2013-11-19 09:26:38

标签: sql oracle stored-procedures

我的代码:

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;

问题仍然存在,我该如何声明变量?

3 个答案:

答案 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;

/

sqlfiddle demo

答案 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>