2016-04-02 6 views
0

Das ist mein Programm:PL/SQL Akzeptieren Eingang, wenn sonst

SET VERIFY OFF 
SET FEED OFF 
SET SERVEROUTPUT ON 

PROMPT 'Vehicle Inventory Record' 
ACCEPT p_Options; 
ACCEPT myVariable PROMPT 'Input value: '; 

DECLARE 
    n_numb number := 1; 

BEGIN 

    IF '&p_Options' = 'YES' THEN   
    dbms_output.put_line('input YES'); 

    ELSIF '&p_Options' = 'NO' THEN  
    dbms_output.put_line('input NO'); 

    ELSE 
    dbms_output.put_line('&myVariable'); 

    END IF; 

END; 
/

Nun, wenn ich das Programm ausführen, ich geben Sie den Wert für p_Options, aber unabhängig von dem, was ich eingeben, fragt er mich an den Eingang für MeineVariable.

Ich möchte den Wert für myVariable nur im else-Fall eingeben, wenn p_Options weder JA noch NEIN ist.

Warum fragt es immer nach myVariable, auch wenn es im anderen Fall ist?

Antwort

0

Da die Substitutionsvariablen (& ...) vor dem Interpretieren der Prozedur durch tatsächliche Werte ersetzt werden müssen, wird sie "lange vor" zur Ausführung gesendet.

Der Interpreter (im Gegensatz zur Laufzeit) wertet die "if" -Anweisung nicht aus, um zu sehen, ob sie wahr oder falsch ergibt; das wird zur Laufzeit passieren.

Was versuchen Sie zu tun - haben Sie eine Prozedur, die den Benutzer während der Ausführung zu myVariable auffordert, und nur wenn es benötigt wird? Mit Substitutionsvariablen ist das nicht möglich.

+0

Ja, ich möchte Benutzer für myVariable nur eingeben, wenn es benötigt wird. Wie kann dies ohne Substitutionsvariablen geschehen? – user5155835

+0

Es kann nicht in PL/SQL ausgeführt werden, das ist eine Datenbank-SERVER-Sprache, es interagiert nicht mit dem Endbenutzer (Clientseite) während der Ausführung. Für was Sie wollen, müssen Sie eine Front-End-Anwendung in Java oder C# oder was auch immer in Ihrer Organisation verwendet wird. – mathguy

+0

Also, für die Annahme von Benutzereingaben gibt es keine Alternative zu Substitutionsvariablen? Kann in diesem Fall etwas wie SET DEFINE OFF verwendet werden? – user5155835