gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 18:01:35 25 4
gpt4 key购买 nike

代码

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

最佳答案

从上面的评论中,我认为我们可以推断出数据库中预期行的 P_JOB_TYPEJOB_TYPE 数据在大小写上存在差异,因此为什么要应用谓词两侧的 lower() 开始带回数据。

值得指出的是,将 lower() 应用于谓词的两边本身并不是一个好的解决方案,因为如果功能索引不支持这可能会影响性能。可能更好地确定您存储在数据库中的情况,并且只需将 upper()lower() 应用于谓词的右侧(即 P_JOB_TYPE 端)。

关于plsql - PL/SQL Oracle 存储过程(未找到数据),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34513746/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com