J'essaie de créer un sous-programme qui prendra un code postal d'entrée, puis invitera l'utilisateur à entrer un nouveau code postal qui mettra ensuite à jour la base de données. Si le code postal qui n'est pas dans la base de données, il affichera un message. Quelque chose ne fonctionne pas avec l'instruction select
67226 Wichita 60606 Fort Dodge 50302 Kansas City 54444 Columbia 66002 Liberal 61111 Fort Hays
Si le code postal correspond à ce qui est dans la base de données, il devrait alors afficher `` la sélection fonctionne ''
si le code postal le fait ne correspond pas, il doit afficher "ce zip n'est pas dans la base de données"
données de la table:
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; /
3 Réponses :
En supposant que votre colonne zip dans la table des codes zip s'appelle zip , votre requête devrait être comme ci-dessous:
SELECT zip INTO v_zip FROM zipcodes WHERE zip = find_zip;
La condition find_zip = v_zip strong > ne vous rendra rien.
La condition si find_zip = v_zip alors est redondante car votre NO_DATA_FOUND sera de toute façon déclenché, donc vous afficherez toujours "la sélection fonctionne" lorsque les données est trouvé uniquement.
Cela m'a renvoyé une erreur selon laquelle le ZIP doit être déclaré. Zip est le nom de colonne de la table des codes postaux
Là où zip = find_zip fonctionne, problème résolu. Si le problème de déclaration qui vous préoccupait ne se produit pas. Merci pour votre aide.
Eh bien, si cela a aidé, je m'attendrais à ce que vous acceptiez ma réponse :)
cela fonctionnera:
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; /
si vous voulez vérifier si le code postal existe dans votre tableau, vous pouvez faire quelque chose comme ci-dessous:
sélectionnez count (1) dans v_zip à partir des codes postaux où maintenance_seq_no = find_zip;
si v_zip <> 0 alors
dbms_output.put_line ('Le code postal existe');
autre
dbms_output.put_line ('Le code postal n'existe pas');
end if;