2013-05-21 5 views
5

Sono molto principiante in psql e ho una domanda.SQL * Plus come accettare la variabile di testo dal prompt?

Ecco il codice:

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

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

domanda è molto semplice: Come posso passare il testo al mio variabile? Se ho un numero di ingresso è funziona correttamente e posso leggere nel registro il mio numero, ma se mi passa un testo come "MyText" invece di un numero, ho ottenuto un errore:

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: 

risposta

8

è necessario specificare il tipo di dati come parte del ACCEPT statement. Se nessuno è dato, assume un numero.

Prova ACCEPT myVariable CHAR PROMPT 'Input value: '; invece.

1

Non lo sai avere la variabile MYTEXT dichiarata ovunque.

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

No, il codice è al di sopra, l'ingresso VALUE è "mytext" che ho dato! –

6

È necessario racchiudere la variabile di sostituzione carattere tra virgolette quando la si utilizza, se si tratta di una stringa, altrimenti Oracle tenta di interpretare il valore come un nome oggetto. Lo puoi vedere nella "nuova" versione (mostrata perché hai set verify on) e sexta13 allude anche a questo. Così si dovrebbe fare:

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

Ma non è necessario per concatenare il valore in questo caso (se si tratta di una stringa numero o s):

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

Probabilmente dovresti usare due e commerciali: 'dbms_output.put_line ('&& myVariable');' In questo modo non chiederà il valore se è già definito. –

+0

La migliore risposta per questo problema ... – Iero