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以选择单个记录后,我仍然收到相同的错误。数据库本身会出现问题吗?
答案 0 :(得分:0)
从上面的评论中,我认为我们可以推断,数据库中预期行的P_JOB_TYPE
和JOB_TYPE
数据之间存在差异,因此将lower()
应用于lower()
谓词的两边都开始带回数据。
值得指出的是,将upper()
应用于谓词的两边并不是一个很好的解决方案,因为如果不支持这可能会对性能产生影响。功能指数。可能更好地确定您存储在数据库中的情况,只需将lower()
或P_JOB_TYPE
应用于谓词的右侧(即[34] pry(main)> f.title
=>
"???? ????? ??? ?????? ?? ??????? ? ???????????????????????????????????"
侧)。