私のコードを実行すると、そのコード内のステートメントに関係なく、すべてのケース条件を通過するようです。私が達成しようとしている何ケースユーザ(PLSQL、匿名ブロック)から読み込んだときに条件が正しく実行されない場合
:
- 私は、ユーザーからの単純な整数を読んで、彼は0値を入力した場合、私はプログラムを終了し、
loop
を終了したいと思います。- は
case
実行例のすべての
when
文が入ります:- プログラムは、(整数の入力をユーザーに尋ねる私はプログラムを実行するとどうなり
- は
0/1/2/3)
私は都市の詳細を入力し、プログラム
走り続けることをしようとしていませんコードを開発しました:
SET SERVEROUTPUT ON;
declare
poli_name poli.name%type;
poli_lat poli.lat%type;
poli_lon poli.lon%type;
counter int :=1;
cursor poli_c is select name,lat,lon from poli;
number_of_cities int;
epilogi number;
begin
dbms_output.put_line('Select 1 To Enter Details');
dbms_output.put_line('Select 2 To View All The Details');
dbms_output.put_line('Select 3 To Run Group Algorithm');
dbms_output.put_line('Select 0 To Exit The Programm');
epilogi:=&Epilogi;
loop
case epilogi
when 0 then
dbms_output.putline('Exiting Programm...');
exit;
when 1 then
name_c := &Enter_City_Name; --line 32
lat := &Enter_City_Lat;
lon := &Enter_City_Lon;
if lon >= -180 and lon <= 180 and lat >= -90 and lat <= 90 then
select count(id) into number_of_cities from poli;
if number_of_cities <= 15 then
insert into poli values(counter,name_c,lat,lon);
dbms_output.putline('City Successfully Added');
else
dbms_output.putline('Cities Can Not Be More Than 15');
end if;
else
dbms_output.putline('Wrong Longitude Or Latidute Values');
end if;
when 2 then
open poli_c;
fetch poli_c into poli_name,poli_lat,poli_lon;
dbms_output.put_line('Onoma Polis:'||poli_name);
dbms_output.put_line('Latidute '||poli_name||': '||poli_lat);
dbms_output.put_line('Longtidute '||poli_name||': '||poli_lon);
close poli_c;
when 3 then
null;
else
dbms_output.put_line('Wrong input - try again...');
end case;
counter := counter+1;
epilogi := &Epilogi;
end loop;
end;
私は間違って何かしていますか?それは何でしょうか?御時間ありがとうございます。
あなたが見たことを理解しているか分からない。あなたのブロックは決して実行されませんでした。置換変数( '&'で始まるもの)は、SQL * Plusまたは使用しているインターフェース(SQL Developer、Toadなど)によってユーザー提供の値に置き換えられます** **コードを送信する前に - 完了しました。** ALL **変数 - 解析および実行のためのPL/SQLエンジン。 &Epilogiの最初の値を指定すると、SQL¥* Plusは他の置換変数の値を要求し続けます。あなたのコードは決して実行を開始しないのでCASE文を決して入力しません! – mathguy
これを修正する方法はありますか? –
pl/sqlはユーザーとのやりとりを目的としたものではありません。それを処理するには、追加のレイヤーが必要です。 Answersの1つのコメントで、Steven FeuersteinsはApExのページを提案しています。または、あなたが慣れ親しんでいる可能性のある他のアプリケーションであれ、ユーザーインターフェイスを作成することができます。これはpl/sqlの目的ではありません。 – mathguy