2012-07-23 46 views
9

MSSQLスクリプトをOracleに変換していますが、テーブル名またはカラムの代わりに変数を使用する構文を理解できませんでした。ここでOracle SQL:テーブル名の代わりに使用される変数

は、私はので、私はより良い構文を理解できるOracle SQL Developerで仕事をしようとしてきたという単純な例です:

VR_TABLEは各反復の変更を取得する変数テーブル名です
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; 

ループの 誰かが間違っていることを指摘できますか、私が読むのに便利なサイトにリンクしていますか?私はこれについていくつかのチュートリアルを読んだことがありますが、私はこれまでのところ運がありませんでした。

答えて

15
  1. あなたは、テーブル名とINTOEXECUTE IMMEDIATEの一部ではなく、動的SQL文の一部である必要があり、その後のWHERE
  2. の間にスペースを持っている必要があります。
  3. 、動的SQL文が一緒にそれらを置くセミコロン

で終わらなければならない最後のセミコロン

  • EXECUTE IMMEDIATE文を持つべきではない、このようなものがあるため、当然のことながら

    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; 
    

    動作するはずですVR_UPDATEで何もしていない場合、この匿名ブロックが実行されると何も表示されません。

  • 関連する問題