【发布时间】:2016-04-03 11:55:12
【问题描述】:
代码
-- Stored Procedure
CREATE OR REPLACE PROCEDURE DEVELOPMENT_PROCEDURE
(
P_JOB_TYPE IN JOBS.JOB_TITLE%type DEFAULT 'Manager'
, P_JOB_ID OUT JOBS.JOB_ID%type
, P_JOB_TITLE OUT JOBS.JOB_TITLE%type
) AS
BEGIN
SELECT JOB_ID, JOB_TITLE
INTO P_JOB_ID, P_JOB_TITLE
FROM JOBS
WHERE JOB_TITLE = P_JOB_TYPE;
END DEVELOPMENT_PROCEDURE;
代码
-- Calling the Stored Procedure
DECLARE
P_JOB_ID JOBS.JOB_ID%type;
P_JOB_TITLE JOBS.JOB_TITLE%type;
P_JOB_TYPE VARCHAR2(25) := 'Manager';
BEGIN
DEVELOPMENT_PROCEDURE(P_JOB_TYPE,P_JOB_ID,P_JOB_TITLE);
SYS.DBMS_OUTPUT.PUT_LINE(P_JOB_ID);
SYS.DBMS_OUTPUT.PUT_LINE(P_JOB_TITLE);
END;
问题
这是我在运行后收到的错误消息。我正在学习这封信的教程,但仍然收到错误;解决了大多数...卡在这里。
ORA-01403: no data found
ORA-06512: at "HR.DEVELOPMENT_PROCEDURE", line 8
ORA-06512: at line 8
没有异常设置,但我应该看到 15 条记录。有任何想法吗?
这可能是声明的问题吗?我需要读取 Manager 而不是 MANAGER 的参数。这可能是问题吗?如果是这样,我该如何修复它,以便变量读取为 Manager。谢谢。
正如@Drumbeg 所指出的,我实际上提取了太多记录,但即使在修复 SQL 以选择单个记录之后,我仍然收到相同的错误。数据库本身可能有问题吗?
【问题讨论】:
-
您对
JOBS表的查询未返回任何数据。您确定存在job_title或'Manager'的记录吗? -
您需要处理 NO_DATA_FOUND 和 TOO_MANY 异常。或者确保 SELECT INTO 始终有一个匹配的行。
-
嗨@PZNevill,你的例外在哪里?看这个答案stackoverflow.com/questions/1256112/…
-
@Andy K 我现在将查看该答案。谢谢。
-
请记住,如果您的查询返回 15 行,那么无论如何您都会收到 TOO MANY ROWS 异常。目前,您的代码仅在您的查询带回一行时才有效。如前所述,您需要将查询包装在异常块中或使用显式
CURSOR来解决此问题。
标签: plsql oracle11g oracle-sqldeveloper