从用户读取条件时,条件无法正常运行(PLSQL,匿名块)

问题描述 投票:0回答:2

当我运行我的代码时,它似乎经历了每个案例条件,无论其中的语句如何。

我想要实现的目标:

  • 我从用户那里读取一个简单的整数,如果他输入0值,我想结束程序并退出loop

运行程序时会发生什么:

  • 输入when的每个case声明

运行示例:

  1. 程序要求用户输入整数(0/1/2/3)
  2. 用户输入0(程序必须退出并中断循环)
  3. 询问城市详情(第32行)

我没有尝试输入城市细节并继续运行该程序

我开发的代码:

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;

我做错了什么吗?可能是什么?谢谢你的时间。

oracle plsql
2个回答
0
投票

&Var是替换变​​量。

&Epilogi,&Enter_City_Name,&Enter_City_Lat,&Enter_City_Lon - 它们都在脚本执行并传递给它之前设置。

因此情况正常,但必须在执行前设置所有变量。例如,即使在以下情况下,您也需要提供价值。

declare 
var1 int;

begin
    return;
    dbms_output.put_line('Unreachable code');
    var1 := &v1;


end;

-2
投票

请注意,在Postgres中,CASE .. WHEN ... THEN ... ELSE ...是一个表达而不是声明。因此,预期它必须在表达式有效的任何地方使用,即赋值,返回等......

*编辑:真正的错误,PLSQL vs PGSQL .. Oracle变体通常带有斜杠(PL / SQL),这让我感到困惑*

© www.soinside.com 2019 - 2024. All rights reserved.