【问题标题】:Can't create programm properly. Encountered the symbol "end-of-file" in Oracle无法正确创建程序。在 Oracle 中遇到符号“文件结尾”
【发布时间】:2020-04-03 01:06:56
【问题描述】:
<<VARCHAR2_TO_NUMBER>>
DECLARE
    NUM NUMBER(10);
    FUNCTION VARCHAR2_TO_NUMBER(SYM IN VARCHAR2) RETURN NUMBER IS
    BEGIN
        RETURN CAST(SYM AS NUMBER);
        EXCEPTION
        WHEN VALUE_ERROR THEN
            DBMS_OUTPUT.PUT_LINE('ERROR: argument is not a number: ' || str);
            RETURN NULL;
        WHEN OTHERS THEN
            RAISE_APPLICATION_ERROR(-20103, 'Unexpected error');
        RETURN NULL;
   END;
--END VARCHAR2_TO_NUMBER;

我需要编写一个程序,但我的错误是:

ORA-06550: 第 16 行,第 0 列:PLS-00103: 遇到符号 “文件结尾”。

我应该怎么做才能解决它?

【问题讨论】:

    标签: oracle plsql


    【解决方案1】:

    您的代码顺序有误(当然DECLARE 不需要通过这种方式)。更喜欢转换为:

    SQL> SET SERVEROUTPUT ON
    SQL> CREATE OR REPLACE FUNCTION VARCHAR2_TO_NUMBER(SYM IN VARCHAR2) RETURN NUMBER IS
        NUM NUMBER;        
    BEGIN
           NUM := CAST(SYM AS NUMBER);     
           RETURN NUM;
        EXCEPTION
        WHEN VALUE_ERROR THEN
             DBMS_OUTPUT.PUT_LINE('ERROR: argument is not a number: ' || SYM);
             RETURN NULL;
        WHEN OTHERS THEN
             RAISE_APPLICATION_ERROR(-20103, 'Unexpected error');
             RETURN NULL;
    END;
    /
    

    并调用

    SQL> EXEC VARCHAR2_TO_NUMBER('someCharval');
    /
    

    【讨论】:

      【解决方案2】:

      如果你使用 PL\SQL 块,你需要完成它:

      <<VARCHAR2_TO_NUMBER>>
      DECLARE
          NUM NUMBER(10);
          FUNCTION VARCHAR2_TO_NUMBER(SYM IN VARCHAR2) RETURN NUMBER IS
          BEGIN
              RETURN CAST(SYM AS NUMBER);
              EXCEPTION
              WHEN VALUE_ERROR THEN
                  DBMS_OUTPUT.PUT_LINE('ERROR: argument is not a number: ' || sym);
                  RETURN NULL;
              WHEN OTHERS THEN
                  RAISE_APPLICATION_ERROR(-20103, 'Unexpected error');
              RETURN NULL;
         END;
      BEGIN
         NUM := VARCHAR2_TO_NUMBER('a');
      END;
      /
      

      db<>fiddle demo

      相关:

      “Safe” TO_NUMBER()/How can you tell if a value is not numeric in Oracle?

      【讨论】:

        猜你喜欢
        • 2016-02-12
        • 2018-04-11
        • 2023-03-21
        • 1970-01-01
        • 2012-03-03
        • 2021-12-24
        • 1970-01-01
        相关资源
        最近更新 更多