12

MSSQL スクリプトを Oracle に変換していますが、テーブル名または列の代わりに変数を使用する構文がわかりません。

これは、構文をよりよく理解できるように、Oracle SQL Developerで機能させようとした簡単な例です。

 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;

VR_TABLE は、ループの反復ごとに変更される変数テーブル名です。誰かが私が間違っていることを指摘したり、私が読むのに役立つサイトにリンクしたりできますか? これについていくつかのチュートリアルを読みましたが、これまでのところ運がありません。

4

2 に答える 2

21
  1. WHEREテーブル名と後続の句の間にスペースが必要です
  2. は、動的 SQL ステートメントの一部ではなく、のINTO一部である必要があります。EXECUTE IMMEDIATE
  3. 動的 SQL ステートメントの末尾にセミコロンがあってはなりません
  4. 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、この無名ブロックを実行しても何も表示されません。

于 2012-07-24T00:09:00.977 に答える