Oracle
 sql >> Database >  >> RDS >> Oracle

come eseguire il loop accettando l'input dell'utente con pl/sql?

Come altri hanno già detto, PL/SQL da solo non è adatto a questa attività, è necessaria un'interfaccia utente in alto per interagire con l'utente finale. Tuttavia, se hai una reale necessità di farlo in SQL Plus, è possibile utilizzare la tecnica che ho descritto in questa domanda SO .

Devi creare 2 script SQL Plus:

1) Uno script per eseguire un singolo inserimento, qui chiamato script_insert.sql:

insert into t1 values ('&1.');
@main

2) Uno script per controllare il processo, qui chiamato main.sql:

accept selection prompt "Please enter value, enter 'done' when no more values: "

set term off verify off

column script new_value v_script

select case '&selection.'
       when 'done' then ''
       else '@script_insert &selection.'
       end as script
from dual;

set term on

@&v_script.

Ora in SQL Plus puoi eseguirlo in questo modo:

SQL> select * from t1;

no rows selected

SQL> @main
Please enter value, enter 'done' when no more values: 1
Please enter value, enter 'done' when no more values: 2
Please enter value, enter 'done' when no more values: 3
Please enter value, enter 'done' when no more values: done
SQL> select * from t1;

        N1
----------
         1
         2
         3

Consentitemi di ribadire che questo dimostra che può essere fatto, non affermerei che sia un buon modo per implementare il requisito, a meno che non sia solo uno strumento ad hoc che deve essere utilizzato da un DBA o da uno sviluppatore. Non darei mai a un utente finale SQL Plus come interfaccia utente!