【问题标题】:Oracle select query error inside procedure [duplicate]过程中的Oracle选择查询错误[重复]
【发布时间】:2013-12-25 11:19:18
【问题描述】:

在过程中运行select 查询时出现错误。错误打印如下:

[错误] PLS-00428 (24: 9):PLS-00428:此 SELECT 语句中应有一个 INTO 子句

CREATE OR REPLACE PACKAGE BODY PACK_EMP
IS
    PROCEDURE find_employee(
        P_ID NUMBER,
        P_ERR OUT VARCHAR2
    )
    IS
    BEGIN
        IF P_ID IS NULL THEN
            SELECT * FROM EMPLOYEE WHERE ID = P_ID
        ELSE
            P_ERR := 'An error occured on database!!';
        END IF;
        EXCEPTION
        WHEN OTHERS THEN
            P_ERR := SQLERRM;
    END;
END;

【问题讨论】:

  • 在 PL/SQL 中,当您执行任何 SELECT 时,您需要使用 INTO 子句指定将选择结果存储在哪个变量中:SELECT 1 INTO v_val FROM DUAL。你想通过这个过程达到什么目的?
  • 谢谢你的帮助,我很粗心:)

标签: sql oracle stored-procedures plsql syntax-error


【解决方案1】:
CREATE OR REPLACE PACKAGE BODY PACK_EMP
IS
    PROCEDURE find_employee(
        P_ID NUMBER,
        P_ERR OUT VARCHAR2,
        V_VAL OUT VARCHAR
    )
    IS
    BEGIN
        IF P_ID IS NULL THEN
            SELECT FIRTSNAME ||' '||LASTNAME INTO V_VAL FROM EMPLOYEE WHERE ID = P_ID
        ELSE
            P_ERR := 'An error occured on database!!';
        END IF;
        EXCEPTION
        WHEN OTHERS THEN
            P_ERR := SQLERRM;
    END;
END;

【讨论】:

    【解决方案2】:

    使用行类型。另外我认为您的意思是说“如果 P_ID IS NOT NULL THEN ...”,因为如果它为空,那么您的选择将永远无法工作。

    CREATE OR REPLACE PACKAGE BODY PACK_EMP
    IS
        PROCEDURE find_employee(
            P_ID NUMBER,
            P_ERR OUT VARCHAR2
        )
        IS
        empRec employee%rowtype; /* ADD THIS LINE */
        BEGIN
            IF P_ID IS NOT NULL THEN
                SELECT * into empRec FROM EMPLOYEE WHERE ID = P_ID;
                --now you can reference the columns like this: empRec.id
            ELSE
                P_ERR := 'An error occured on database!!';
            END IF;
            EXCEPTION
            WHEN OTHERS THEN
                P_ERR := SQLERRM;
        END;
    END;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-15
      • 1970-01-01
      • 1970-01-01
      • 2018-02-19
      • 2015-05-02
      • 2015-05-02
      • 1970-01-01
      • 2018-11-27
      相关资源
      最近更新 更多