2012-07-23 18 views
9

Estoy convirtiendo una secuencia de comandos MSSQL a Oracle, y no he podido descifrar la sintaxis para usar una variable en lugar de una columna o nombre de tabla.Oracle SQL: variables utilizadas en lugar de nombres de tabla

Aquí está un ejemplo sencillo que he estado a tratar de hacer que el trabajo en Oracle SQL Developer para que pueda entender mejor la sintaxis:

set serveroutput on format wrapped; 
declare 
    VR_TABLE VARCHAR2(256); 
    VR_UPDATE VARCHAR2(256); 
begin 
    VR_TABLE :='SYSTEM_STATUS'; 
    EXECUTE IMMEDIATE 'select UPDATE_VERSION INTO VR_UPDATE from ' || VR_TABLE || 'where rownum < 2 ;' 
end; 

Dónde VR_TABLE es el nombre de la tabla variable que cambiarse cada iteración del bucle ¿Puede alguien señalar lo que estoy haciendo mal, o vincularme a un sitio que me sería útil para leer? He leído algunos tutoriales sobre esto, pero hasta ahora no he tenido suerte.

Respuesta

15
  1. Es necesario tener un espacio entre el nombre de la tabla y la posterior WHERE cláusula
  2. Los INTO tiene que ser parte de la EXECUTE IMMEDIATE, que no forma parte de la sentencia de SQL dinámico.
  3. La sentencia de SQL dinámico no debería tener un punto y coma final
  4. La declaración EXECUTE IMMEDIATE debe terminar con un punto y coma

Poniendo todo esto junto, algo como esto debería funcionar

declare 
    VR_TABLE VARCHAR2(256); 
    VR_UPDATE VARCHAR2(256); 
begin 
    VR_TABLE :='SYSTEM_STATUS'; 
    EXECUTE IMMEDIATE 'select UPDATE_VERSION from ' || VR_TABLE || ' where rownum < 2' 
       INTO VR_UPDATE; 
end; 

Por supuesto, ya no está haciendo nada con VR_UPDATE, no se mostrará nada cuando se ejecute este bloque anónimo.

Cuestiones relacionadas