ファイルから SQL ステートメントを抽出して変換するスクリプトを作成しています。gupta sqlbase データベースからアンロードされた sql を、SQLServer が理解できる sql に変換する必要があります。
1 つのタスクは、列名として許可されていないキーワードを互換性のある名前に置き換えることです。
次のコードの $commands は、SQL ステートメントを含む配列参照です。(実際にはもっとコードがありますが、ここでは関係ないので抜粋しました)
my @KeyWords = ("LEFT", "RIGHT", "PERCENT", "FILE", "PRINT", "CROSS", "PLAN", "TOP", "END", "FILE", "Default", "CHECK", "TEXT");
foreach $cmd (@$commands) {
foreach my $kw (@KeyWords) {
$cmd =~ s/\b$kw\b[^(]/_$kw/gi;
}
push @$converted, $cmd;
}
これはほとんどのステートメントで問題なく機能しますが、次のコマンドでは の代わりに に"DEFAULT"
置き換えられます。したがって、2 番目の引用符は失われます。"_DEFAULT
"_DEFAULT"
CREATE TABLE SYSADM.SUBTYPE ( ID_SUBTYPE INTEGER NOT NULL,
ID_TYPE INTEGER NOT NULL,
TYPE VARCHAR(1),
BEZEICH VARCHAR(60),
NUM_COLOR INTEGER,
NUM_TXTCOLOR INTEGER,
"DEFAULT" SMALLINT,
GENER_ARBA SMALLINT,
PROJEKTPLANUNG SMALLINT)
2 番目の引用符が削除されないように、正規表現/置換を変更する方法はありますか? それとも他の方法ですか?