Oracle SQL: le variabili utilizzate al posto dei nomi di tabella

Sto convertendo un MSSQL script Oracle, e non sono stato in grado di capire la sintassi per utilizzare una variabile al posto di un nome di tabella o colonna.

Ecco un semplice esempio che ho fatto provare a fare il lavoro in Oracle SQL Developer, così posso capire meglio la sintassi:

 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;

Dove VR_TABLE è la variabile nome della tabella che vengono cambiati ogni iterazione del ciclo.
Qualcuno può indicare che cosa sto facendo di sbagliato, o link a me per un sito che mi sarebbe stato utile per la lettura? Ho letto alcuni tutorial su questo, ma non ho avuto fortuna finora.

 

One Reply
  1. 17
    1. È necessario disporre di uno spazio tra il nome della tabella e il successivo WHERE clausola
    2. Il INTO deve essere parte del EXECUTE IMMEDIATE, non parte l’istruzione SQL dinamico.
    3. L’istruzione SQL dinamico non dovrebbe avere un punto e virgola finale
    4. Il EXECUTE IMMEDIATE istruzione deve terminare con un punto e virgola

    Mettere insieme, qualcosa come questo dovrebbe funzionare

    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;

    Ovviamente, visto che non stai facendo nulla con VR_UPDATE, non verrà visualizzato nulla quando questa anonima blocco viene eseguito.

Lascia un commento