【发布时间】:2015-12-01 18:54:45
【问题描述】:
我的要求是编写一个在COUNTRIES 表中添加值的过程。但是,首先它应该检查对应的值是否存在于另一个表中,REGIONS 因为它是一个外键。只有值存在时才允许插入COUNTRIES 表。否则,不行。
我写了一段代码并且运行良好:
create or replace procedure addi3 (c_cntry_id in out countries.country_id%type,
c_cntr_name in countries.country_name%type,
c_rgn_id in countries.region_id%type)
is
region_exists pls_integer;
begin
begin
select 1 into region_exists
from regions r
where r.region_id = c_rgn_id;
exception
when no_data_found then
region_exists := 0;
DBMS_OUTPUT.PUT_LINE('Already present');
end;
if region_exists = 1 then
insert into countries(country_id, country_name,region_id)
values (c_cntry_id, c_cntr_name,c_rgn_id);
DBMS_OUTPUT.PUT_LINE('Inserted');
end if;
end addi3;
/
它工作正常,除了如果我通过提供区域表中不存在的region_id 来执行该过程,它不会正确地插入国家表中。但是,如果region_id 不存在并且即使我有DBMS_OUTPUT.put_line,它也没有显示适当的错误消息,我想通过使用DBMS_OUTPUT.put_line 引发错误来增强它。有人可以指导一下吗?
【问题讨论】:
-
您的会话是否开启了 SERVEROUTPUT?如果没有,您将不得不手动获取“已经存在”或“已插入”消息。
-
是的,我在执行过程之前做了:“set serverout on”
-
当你说你想让它“抛出一个错误”时,你的意思是你想让它说一些除了当前的“已经存在”之外的东西吗?还是它实际上引发了异常并退出程序?
-
是的,当 region_id 不存在时,在我的情况下说“已经存在”。(实际上,它应该是“不存在”,但我想一旦错误消息可见就可以更正跨度>
-
如果该区域不存在 - 这不是应该插入的时候吗?
标签: oracle plsql exception-handling