2012-01-31 6 views
1

を即時実行を実行し、私はPL/SQLパッケージ内の次のコード行は、PL/SQLパッケージから

l_sql := 'alter table LOG_FILES location ('||chr(39)|| filename || to_char(sysdate,'DDMMYY') ||chr(39)||'))'; 
execute immediate l_sql; 

を持つPL/SQLパッケージは罰金コンパイルが、私は変更を参照してくださいいけません。 alterコマンドはまったく効果がありません。これには何らかの理由がありますか?

注:私は変更しようとしているテーブルはOracle External table.

+0

あなたは、パッケージがうまくコンパイルされると言います。実際に動的SQLを実行するパッケージでプロシージャを実行しましたか? –

+0

はい私はしました。問題は余分な閉じ括弧とエスケープされた一重引用符でした - あなたの助けをすべてありがとう。 – ziggy

答えて

5

あなたの文の末尾に余分な括弧を持っています最終声明。あなたが一重引用符をエスケープする必要があることを理解するために。 1つの方法は、2つの単一引用符を使用することです。したがって、あなたの割り当ては次のようになります。

l_sql := 'alter table LOG_FILES location ('''|| filename || to_char(sysdate,'DDMMYY') ||''')'; 
4

あなたは、ファイル名が文字列であるとにおける単一引用符と括弧する必要

関連する問題