2013-05-21 3 views
5

Im sehr Anfänger in psql und ich habe eine Frage. HierSQL * Plus, wie Text Variable von Eingabeaufforderung zu akzeptieren?

ist der Code:

SET serveroutput ON 
ACCEPT myVariable PROMPT "Input value: "; 

BEGIN 
    dbms_output.put_line('My input variable is: '||&myVariable); 
END; 

Frage ist ganz einfach: Wie ich Text auf meine Variable übergeben kann? Wenn ich Eingabe eine Zahl funktioniert es richtig ist, und ich kann meine Nummer in der sich einzuloggen, lesen, aber wenn ich einen Text wie „mytext“ pass statt einer Nummer, bekam ich einen Fehler:

old:BEGIN 


    dbms_output.put_line('My input variable is: '||&myVariable); 
    END; 


    new:BEGIN 

    dbms_output.put_line('My input variable is: '||mytext); 
END; 

    Error starting at line 5 in command: 
    BEGIN 
     dbms_output.put_line('My input variable is: '||&myVariable); 
    END; 
    Error report: 
    ORA-06550: 2 sor, 50 oszlop: 
    PLS-00201: identifier 'MYTEXT' must be declared 
    ORA-06550: 2 sor, 3 oszlop: 
    PL/SQL: Statement ignored 
    06550. 00000 - "line %s, column %s:\n%s" 
    *Cause: Usually a PL/SQL compilation error. 
    *Action: 

Antwort

8

Sie müssen den Datentyp als Teil des ACCEPT statement angeben. Wenn keine angegeben ist, wird eine Nummer angenommen.

Versuchen ACCEPT myVariable CHAR PROMPT 'Input value: '; statt.

1

Sie dies nicht tun habe MYTEXT-Variable irgendwo deklariert.

dbms_output.put_line('My input variable is: '||mytext); -- here is the error. It should be &myVariable. 
+0

Nein, der Code über die Eingabe VALUE ist "Mytext", den ich gegeben habe! –

6

Sie müssen die Zeichenersetzungsvariable in Anführungszeichen einschließen, wenn Sie sie verwenden, wenn es eine Zeichenfolge ist. Andernfalls versucht Oracle, den -Wert als Objektnamen zu interpretieren. Sie können, dass auf der ‚neuen‘ Version (gezeigt, weil Sie set verify on haben) sehen, und sexta13 auf das auch erwähnt. So würden Sie tun:

dbms_output.put_line('My input variable is: '||'&myVariable'); 

Aber Sie brauchen nicht den Wert in diesem Fall verketten (ob es sich um eine Zahl ist oder s string):

dbms_output.put_line('My input variable is: &myVariable'); 
+3

Sie sollten wahrscheinlich zwei Et-Zeichen verwenden: 'dbms_output.put_line (‚&& myVariable‘);' Auf diese Weise wird es nicht für den Wert fragen, ob er bereits definiert. –

+0

Beste Antwort für dieses Problem ... – Iero

Verwandte Themen