複数のレガシー システムがあるため、私が取り組んでいるプロジェクトには 10 列で構成されるテーブルがあります。
これらの 10 列のうち、最後の 5 列のうちの 2 列には常に、識別文字列が前に付いた 2 つのデータが表示されます。
最後のpair0
5列pair1
はpair2
、、、、、pair3
pair4
これら 5 つの列のうち 2 つの列で探しているデータの形式はtx-speed=3D...
とrx-speed=3D...
です。これらの各文字列の後には、任意の長さの一連の数字が続きます。
このテーブルにデータを挿入するプログラムを変更することはできません。後で変更することしかできません。
tx-speed=3D
既存および将来のすべての行で、次の一連の数字がpair1
列にあり、次の一連の数字rx-speed=3D
が列にあることを確認したいと思いpair2
ます。tx-speed
とのrx-speed
値が互いに上書きしない限り、これら 2 つの列の内容を保持することは重要ではありません。
プロジェクトの残念な制約として、これはデータベース トリガーでは実行できず、cron ジョブなどの一部として実行する必要があります。
ここでの私の大きな問題は、私が SQL 管理者ではないことです。利用可能な多くの言語のいずれかでスクリプトを作成できますが、効率が重要であり、SQL からデータを取り出して検査し、別のプラットフォームから再挿入することは非常に非効率的です。
私はこれを行うために SQL スクリプトを書き始めましたが、SQL がどのように機能するかについて十分に理解していません。
(できれば) 少し明確にするために、誰かがこれから私の目的に使用できる SQL クエリを作成できることを期待して、次の擬似コードをまとめました。
for each row:
@tx = ""
@rx = ""
txstr = "tx-speed=3D"
rxstr = "rx-speed=3D"
if (pair0 LIKE txstr+"%")
@tx = SUBSTRING(pair0, FROM txstr.count-1)
elsif (pair1 LIKE txstr+"%")
@tx = SUBSTRING(pair0, FROM txstr.count-1)
elsif (pair2 LIKE txstr+"%")
...
endif
if (pair0 LIKE rxstr+"%")
@rx = SUBSTRING(pair0, FROM rxstr.count-1)
elsif (pair1 LIKE rxstr+"%")
...
endif
pair1 = @tx
pair2 = @rx