sql >> Base de Datos >  >> RDS >> Oracle

¿Cómo hacer un bucle para aceptar la entrada del usuario con pl/sql?

Como han dicho otros, PL/SQL solo no es adecuado para esta tarea, necesita una interfaz de usuario en la parte superior para interactuar con el usuario final. Sin embargo, si realmente necesita hacer esto en SQL Plus, es posible usar la técnica que describí en esta SO pregunta .

Necesita crear 2 scripts SQL Plus:

1) Un script para realizar una sola inserción, aquí llamado script_insert.sql:

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

2) Un script para controlar el proceso, aquí llamado 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.

Ahora en SQL Plus puedes ejecutarlo así:

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

Permítanme reiterar que esto demuestra que se puede hacer, no diría que es una buena manera de implementar el requisito, a menos que sea solo una herramienta ad hoc para ser utilizada por un DBA o un desarrollador. Nunca le daría a un usuario final ¡SQL Plus como interfaz de usuario!