Oracle 使用过程处理PL/SQL异常 创建或替换过程UPD\U DEP (部门名称%type中的dd_名称,--必须更新的部门 d_dept.dname%type中的名称)--第一个参数必须更新到的名称 是 abc_例外; 开始 如果(dnamedd_名称),则 提出abc_异常; 如果结束; 更新部门 设置dname=d_名称 其中dname=dd_名称; 犯罪 例外情况 那什么时候例外呢 dbms_output.put_行('您希望更新的部门不存在'); 结束时请戴副;
第9行错误:PL/SQL:语句被忽略Oracle 使用过程处理PL/SQL异常 创建或替换过程UPD\U DEP (部门名称%type中的dd_名称,--必须更新的部门 d_dept.dname%type中的名称)--第一个参数必须更新到的名称 是 abc_例外; 开始 如果(dnamedd_名称),则 提出abc_异常; 如果结束; 更新部门 设置dname=d_名称 其中dname=dd_名称; 犯罪 例外情况 那什么时候例外呢 dbms_output.put_行('您希望更新的部门不存在'); 结束时请戴副;,oracle,stored-procedures,plsql,Oracle,Stored Procedures,Plsql,第9行错误:PL/SQL:语句被忽略 7如果(dnamedd_名称),则(第7行) 8提出abc_例外情况;(第8行) 9如果结束,则结束;(第9行) 10更新部门(第10行) 11设置dname=d_名称(第11行) 在第7行中,您引用了dname作为变量,但没有使用该名称的变量。我的第一个假设是,您的意思是d_name,函数的第二个参数,但这没有意义,因为您将跳过更新,除非这两个值相等 根据您在异常处理程序中所做的操作,我猜,if是为了检查是否存在要更新的行,而dname是为了引用表中的实
- 7如果(dnamedd_名称),则(第7行)
- 8提出abc_例外情况;(第8行)
- 9如果结束,则结束;(第9行)
- 10更新部门(第10行)
- 11设置dname=d_名称(第11行)
dname
作为变量,但没有使用该名称的变量。我的第一个假设是,您的意思是d_name
,函数的第二个参数,但这没有意义,因为您将跳过更新,除非这两个值相等
根据您在异常处理程序中所做的操作,我猜,if
是为了检查是否存在要更新的行,而dname
是为了引用表中的实际列。但是,你不能仅仅在奇想中引用PL/SQL代码中间的表列——编译器应该如何理解这个引用?
此外,检查更新是否会影响任何行的最佳方法是执行更新并测试结果
create or replace procedure UPD_DEP
(dd_name in dept.dname%type, --department which has to be updated
d_name in dept.dname%type) --name to which the first parameter has to be updated
is
abc_exception exception;
begin
if (dname<>dd_name) THEN
raise abc_exception;
end if;
update dept
set dname=d_name
where dname=dd_name;
commit;
EXCEPTION
WHEN abc_exception THEN
dbms_output.put_line('department not present which u want to be updated');
end upd_dep;
请使用花括号按钮设置您的问题格式。它真的解决了我的问题。现在一切都很好。非常感谢。愿上帝让您快乐:)
create or replace procedure UPD_DEP
(dd_name in dept.dname%type, --department which has to be updated
d_name in dept.dname%type) --name to which the first parameter has to be updated
is
begin
update dept
set dname=d_name
where dname=dd_name;
if SQL%FOUND then
commit;
else
dbms_output.put_line('department not present which u want to be updated');
end if;
end upd_dep;