无法在子程序中获得选择语句

时间:2019-08-13 02:22:49

标签: sql oracle plsql

我正在尝试创建一个子程序,该子程序将使用输入的邮政编码,然后提示用户输入新的邮政编码,然后将更新数据库。如果邮政编码不在数据库中,则会显示一条消息。 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

3 个答案:

答案 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('邮政编码不存在');

如果结束,