函数创建时编译错误成功,为啥?

Posted

技术标签:

【中文标题】函数创建时编译错误成功,为啥?【英文标题】:success with compilation error on Function creation, why?函数创建时编译错误成功,为什么? 【发布时间】:2016-12-07 11:46:31 【问题描述】:

我尝试在 Oracle Apex 5,SQL 命令中创建此函数,并导致此错误“ORA-24344:编译错误成功。”你为什么这么认为?我正在尝试创建一个随机生成的代码。

CREATE OR REPLACE FUNCTION generate_code()
    return varchar2
    AS
    code varchar2;
    BEGIN
    code := DBMS_RANDOM.value(1,100);
    return code;
    END;

【问题讨论】:

【参考方案1】:

语法错误,见下文

正确的语法是

CREATE OR REPLACE FUNCTION generate_code

    return varchar2
    AS
    code varchar2(100);
    BEGIN
    code := DBMS_RANDOM.value(1,100);
    return code;
    END;

带有错误描述的原始语法:

SQL> CREATE OR REPLACE FUNCTION generate_code()
  2
  3      return varchar2
  4      AS
  5      code varchar2;
  6      BEGIN
  7      code := DBMS_RANDOM.value(1,100);
  8      return code;
  9      END;
 10
 11  /

Warning: Function created with compilation errors.

SQL> show error
Errors for FUNCTION GENERATE_CODE:

LINE/COL ERROR
-------- -----------------------------------------------------------------
1/24     PLS-00103: Encountered the symbol ")" when expecting one of the
         following:
         <an identifier> <a double-quoted delimited-identifier>
         current delete exists prior

【讨论】:

您先生真了不起!谢谢,我的问题已经解决了。

以上是关于函数创建时编译错误成功,为啥?的主要内容,如果未能解决你的问题,请参考以下文章

为啥在尝试调用采用动态参数的基本构造函数/方法时会出现此编译错误?

为啥在 TypeScript 中的“任何”字段类型变量上使用“字符串”函数时没有编译时错误?

当我的代码超出函数范围时,为啥会出现编译器错误“未命名类型”?

尝试创建程序时出错,您认为这是为啥?

为啥没有返回语句时没有编译器错误?

为啥当我有两个函数时编译器没有显示错误,一个将基类作为参数,一个将派生类作为参数?