我正在尝试创建一个子程序,该子程序将使用输入的邮政编码,然后提示用户输入新的邮政编码,然后将更新数据库。如果邮政编码不在数据库中,则会显示一条消息。 select语句不起作用
SET SERVEROUTPUT ON;
ACCEPT p_find_zip PROMPT 'Please enter a 5 digit zip code:'
DECLARE
find_zip char(5) :=&p_find_zip;
v_zip char(5);
BEGIN
SELECT zip
INTO v_zip
FROM zipcodes
WHERE find_zip = v_zip;
if find_zip = v_zip then
DBMS_OUTPUT.PUT_LINE('the select is working');
end if;
EXCEPTION WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('THAT ZIP IS NOT IN THE DATABASE');
END;
/
如果邮政编码与数据库中的邮政编码匹配,则应打印“选择正在工作”
如果邮政编码不匹配,则应打印“该邮政编码不在数据库中”
表格数据:
67226 Wichita
60606 Fort Dodge
50302 Kansas City
54444 Columbia
66002 Liberal
61111 Fort Hays
答案 0 :(得分:0)
假设您在邮政编码表中的zip列称为 zip ,您的查询应如下所示:
SELECT zip
INTO v_zip
FROM zipcodes
WHERE zip = find_zip;
条件 find_zip = v_zip 不会给您任何回报。
还有一个条件如果find_zip = v_zip那么是多余的,因为您的NO_DATA_FOUND仍将被引发,因此当仅找到数据时,您将始终打印“选择正在工作”。
答案 1 :(得分:0)
这将起作用:
create table NS_zipcodes3(zipcode varchar(5),city varchar(20));
insert into NS_zipcodes3 values('67226','Wichita');
insert into NS_zipcodes3 values('60606' , 'Fort Dodge');
insert into NS_zipcodes3 values('50302' , 'Kansas City');
insert into NS_zipcodes3 values('54444' , 'Columbia');
insert into NS_zipcodes3 values('66002', 'Liberal');
insert into NS_zipcodes3 values('61111' , 'Fort Hays');
select * from NS_zipcodes3;
SET SERVEROUTPUT ON;
DECLARE
find_zip varchar(10);
v_zip varchar(5);
BEGIN
DBMS_OUTPUT.PUT_LINE('please enter a 5 digit zipcode') ;
select :p_find_zip into find_zip from dual;
SELECT zipcode
INTO v_zip
FROM NS_zipcodes
WHERE zipcode = find_zip;
if to_number(find_zip) =to_number(v_zip) then
DBMS_OUTPUT.PUT_LINE('the select is working');
end if;
EXCEPTION WHEN no_data_found THEN
DBMS_OUTPUT.PUT_LINE('THAT ZIP IS NOT IN THE DATABASE');
WHEN others THEN
DBMS_OUTPUT.PUT_LINE('invalid zipcode entered');
END;
/
答案 2 :(得分:0)
如果要检查表中是否存在邮政编码,可以执行以下操作:
从其中maintenance_seq_no = find_zip的邮政编码中选择count(1)放入v_zip;
如果v_zip <> 0则
dbms_output.put_line('邮政编码存在');
其他
dbms_output.put_line('邮政编码不存在');
如果结束,