Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

como fazer um loop aceitando a entrada do usuário com pl/sql?


Como outros já disseram, PL/SQL por si só não é adequado para essa tarefa, você precisa de uma interface do usuário no topo para interagir com o usuário final. No entanto, se você tiver uma necessidade real de fazer isso no SQL Plus, é possível usar a técnica que descrevi em esta pergunta SO .

Você precisa criar 2 scripts SQL Plus:

1) Um script para realizar uma única inserção, aqui chamado de script_insert.sql:
insert into t1 values ('&1.');
@main

2) Um script para controlar o processo, aqui chamado de 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.

Agora no SQL Plus você pode executá-lo assim:
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

Deixe-me reiterar que isso demonstra que isso pode ser feito, eu não diria que é uma boa maneira de implementar o requisito - a menos que seja apenas uma ferramenta ad hoc a ser usada por um DBA ou desenvolvedor. Eu nunca daria a um usuário final SQL Plus como uma interface do usuário!