当我运行我的代码时,它似乎经历了每个案例条件,无论其中的语句如何。
我想要实现的目标:
loop
。运行程序时会发生什么:
when
case
声明
运行示例:
我没有尝试输入城市细节并继续运行程序
我开发的代码:
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;
我做错了什么吗?可能是什么?谢谢你的时间。
答案 0 :(得分:0)
&amp; Var是替换变量。
&amp; Epilogi,&amp; Enter_City_Name,&amp; Enter_City_Lat,&amp; Enter_City_Lon - 它们都在脚本执行并传递给它之前设置。
因此情况正常,但必须在执行前设置所有变量。 例如,即使在以下情况下,您也需要提供价值。
declare
var1 int;
begin
return;
dbms_output.put_line('Unreachable code');
var1 := &v1;
end;
答案 1 :(得分:-2)
请注意,在Postgres中CASE .. WHEN ... THEN ... ELSE ...
是表达式而非声明。因此,预期必须在表达式有效的地方使用它,即赋值,返回等......
*编辑: 真正的错误,PLSQL vs PGSQL .. Oracle变种通常带有斜杠(PL / SQL),这让我感到困惑 *