2011-06-07 14 views
5

estoy usando el siguiente código en un procedimiento PL SQL:problema usando 'ejecutar inmediata' en el Procedimiento PL SQL

execute immediate 'select count(distinct item_type) into counter_variable 
from items where ' || field_name || ' is not null' 

Aquí,

counter_variable se declara en la sección de declaración de la nombre_campo procedimiento es el parámetro IN para el procedimiento PL SQL y los valores pasados ​​serán nombres de columna de la tabla 'artículos'

El error que obtengo es 'Declaración SQL no válida' y no puedo averiguar el motivo. ¿Algunas ideas?

Gracias

Respuesta

10

La cláusula into es PL/SQL y no es válida en una sentencia SQL. Pruebe esto:

execute immediate 'select count(distinct item_type) 
from items where ' || field_name || ' is not null' into counter_variable 
+3

No se olvide: si field_name es proporcionado por un usuario, se debe comprobar para la inyección SQL. –

Cuestiones relacionadas