PL / SQL Oracle存储过程(未找到数据)

时间:2015-12-29 15:07:57

标签: plsql oracle11g oracle-sqldeveloper

CODE

 -- 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;

CODE

-- 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以选择单个记录后,我仍然收到相同的错误。数据库本身会出现问题吗?

1 个答案:

答案 0 :(得分:0)

从上面的评论中,我认为我们可以推断,数据库中预期行的P_JOB_TYPEJOB_TYPE数据之间存在差异,因此将lower()应用于lower()谓词的两边都开始带回数据。

值得指出的是,将upper()应用于谓词的两边并不是一个很好的解决方案,因为如果不支持这可能会对性能产生影响。功能指数。可能更好地确定您存储在数据库中的情况,只需将lower()P_JOB_TYPE应用于谓词的右侧(即[34] pry(main)> f.title => "???? ????? ??? ?????? ?? ??????? ? ???????????????????????????????????" 侧)。