2012-07-23 10 views
9

Przekształcam skrypt MSSQL w Oracle i nie jestem w stanie określić składni, aby użyć zmiennej zamiast nazwy tabeli lub kolumny.Oracle SQL: zmienne używane w miejsce nazw tabel

Oto prosty przykład, że byłem starają się uczynić pracę w Oracle SQL Developer, więc mogę lepiej zrozumieć składnię:

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; 

Gdzie VR_TABLE jest zmienną nazwę tabeli, która będzie się przebrać każdej iteracji pętli. Czy ktoś może wskazać, co robię źle, lub link do strony, która byłaby przydatna dla mnie, aby przeczytać? Przeczytałem kilka tutoriali na ten temat, ale do tej pory nie miałem szczęścia.

Odpowiedz

15
  1. Trzeba mieć przestrzeń między nazwą tabeli i późniejsze WHERE klauzuli
  2. W INTO potrzeby bycia częścią EXECUTE IMMEDIATE, nie jest częścią dynamicznego SQL.
  3. Dynamiczna instrukcja SQL nie powinny mieć średnik trailing
  4. Oświadczenie EXECUTE IMMEDIATE powinna kończyć się średnikiem

Umieszczenie tych razem, coś jak to powinno działać

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; 

Oczywiście, ponieważ nic nie robisz z VR_UPDATE, nic nie będzie wyświetlane po wykonaniu tego anonimowego bloku.

Powiązane problemy