1

だから私は次のようなファイルを持っています

select * from tb where start_date = to_date('20131010','yyyymmdd');
    p23 VARCHAR2(300):='something something
    still part of something above with 'this' between single quotes and close
    something to end';
 (code goes on)

これは、sqlplus 経由で実行できる自動生成コードです。しかし、3 行目では引用符を のようにエスケープする必要があるため、これは明らかに機能しません(..) with ''this'' between (...)

そのコードを生成したスクリプトにアクセスできませんが、仕事をするために awk を取得しようとしていました。スクリプトは、コード内のすべての引用符をエスケープしないように十分にスマートにする必要があることに注意してください (to_date('20131010','yyyymmdd')正しいです)。

私は awk の専門家ではないので、次のようにしました。

BEGIN {
    RS=";"
    FS="\n"
}
/\tp[0-9]+/{
    ini = match($0, "\tp[0-9]+")
    fim = match($0, ":='")
    s = substr($0,ini,fim+1)
    txt = substr($0, fim+3, length($0))
    block = substr(txt, 0, length(txt)-1)
    print gensub("'", "''", block)
}
!/\tp[0-9]+/{
    print $0";"
}

しかし、それはあまりにも面倒で、print gensub("'", "''", block)機能していません。

誰かが私に簡単な方法を教えてもらえますか?

4

1 に答える 1