过程中的Oracle选择查询错误[重复]
Posted
技术标签:
【中文标题】过程中的Oracle选择查询错误[重复]【英文标题】:Oracle select query error inside procedure [duplicate] 【发布时间】: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
。你想通过这个过程达到什么目的?
谢谢你的帮助,我很粗心:)
【参考方案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;
【讨论】:
以上是关于过程中的Oracle选择查询错误[重复]的主要内容,如果未能解决你的问题,请参考以下文章