A5:SQL Mk-2

開発のこと、日々のこと

複数のSQL文を記述した時のReplace

ホーム フォーラム A5:SQL Mk-2掲示板 複数のSQL文を記述した時のReplace

6件の投稿を表示中 - 1 - 6件目 (全6件中)
  • 投稿者
    投稿
  • #21546 返信
    のっぽ
    ゲスト

    1つのSQLドキュメント内に複数のSQLを記述し、
    全てのSQLで疑似命令Replaceを使用しても最初のSQL内しか
    置換されません。
    全てのSQLを対象にReplaceされるようになれば大変助かります。
    よろしくお願いいたします。

    #21558 返信
    松原正和
    キーマスター

    のっぽさんこんにちは。
     
    一応、すべてのSQLで、Replace 疑似命令を記述して正しく動作するはずなのですが、再現する単純なSQLを提供していただくことは可能でしょうか?
    (テーブル名やカラム名などは仮の値にしていただいて構いません)

    #21561 返信
    のっぽ
    ゲスト

    ご対応ありがとうございます。
    それでは簡単なサンプルです
    環境はOracle 11.2.0.4、a5m2は2.19.2 x86 OCI経由です
    ——————————————-
    — * Replace ‘Z’ 3

    select * from (
    select 1 A from dual
    union all
    select 2 A from dual
    union all
    select 3 A from dual
    )
    where A = ‘Z’
    ;
    select * from (
    select 1 A from dual
    union all
    select 2 A from dual
    union all
    select 3 A from dual
    )
    where A = ‘Z’
    ;
    ——————————————-
    2つのSQLは同じで、Replaceでwhere句の引数を置換します
    1つ目は正しく3のレコードを取得できますが、
    2つ目はORA-01722: 数値が無効です。となります。

    以上です。よろしくお願い致します。

    #21566 返信
    とある利用者
    ゲスト

    のっぽさん、こんにちは。 横槍で恐縮です。

    多分、最初の WHERE句の直下にある セミコロンのせいで
    そこでSQL構文がいったん終了しているから
    その後のSQL構文には反映されないんだと思いますよ。
     (同様のクエリで再現確認しました。)

    同様の問い合わせが過去にあったようで、作者様が回答なさっています。

    疑似命令:Replaceについて
    2021/07/14 09:41   #9283

     「Replace疑似命令は、直下のSQLのみに影響する機能です。」
    だそうです。

    #21578 返信
    のっぽ
    ゲスト

    ゲストさんこんにちは。
    ご指摘ありがとうございます。
    このトピックを立ててから#9283の投稿に気が付きました。重複してしまって申し訳ないです。
    #9283で作者様は最後に「ちょっと考えてみます。」で含みを残されてますが、
    やっぱり対応は難しいのでしょうか。

    #21612 返信
    松原正和
    キーマスター

    とある利用者さん、のっぽさんこんにちは。
     
    すみません。確かに疑似命令の Replace は直下のSQLにのみ影響する機能で、開いているSQLエディタ全体に影響する機能として考えると機能自体はそこまで難しくないように思えますが、UIというか見せ方というか、難しいなと考えています。

6件の投稿を表示中 - 1 - 6件目 (全6件中)
返信先: 複数のSQL文を記述した時のReplace
あなたの情報:




コメントは受け付けていません。