0

Ruby on Rails と MySQL を使用して、レガシー システムを Web アプリケーションに変換しようとしています。

データ層を MySQL プロシージャに変換する際に行き詰まった場所はほとんどありません。

以下にシナリオを示します。

FUNCTION first_function
SELE Table1
REPL Table1.SmaCode WITH SMA(code,HcPc,FromDate)
ENDFUNC

FUNCTION SMA
... Lot of conditions ...
Lookup(param1,param2) * Parameters are based on the conditions above
.. Lot more conditions ....
ENDFUNC

FUNCTION Lookup
temp = Output of select on Check table 
return temp
ENDFUNC

ここで、SMA は非常に多くの条件を持つ別の関数であり、別の関数 Lookup も呼び出します。Lookup 関数では、Checks という名前のテーブルを照会します。Lookup へのパラメーターは SMA に基づいています。

さらに詳しい情報が必要な場合は、ディスカッションのソース コードのペーストビンを参照してください。http://pastebin.com/raw/Hvx3b8zN

この種の関数を MySQL プロシージャに変換するにはどうすればよいですか?

編集: プロシージャ指向言語からセットベースのストアドプロシージャまで、これらのタイプの変換をすでに行っている人から、これに関する洞察を探しています。

4

1 に答える 1

1

コメンテーターは大丈夫で、私はそれらすべてをアップしました。実際にコードを書く必要がありますが、慣れてしまえばそれほど難しくありません。

私が最初に行うことは、コードを調べて、DELETE FOR .... のような簡単なことをすべて DELETE WHERE... に書き直すことです。

次に、ループを見て、そのデータをセットとして扱う方法を考えます。多くの場合、適切な JOIN 条件と WHERE 条件を使用すると、SCAN を通常のクエリとして記述できます。CASE やサブクエリなど、ごくわずかなコードで多くのことを実行できるクエリ ツールが多数あります。MySQL では一時テーブルが許可されており、これは非常に便利です。多くの場合、ルックアップはサブクエリで実行できます。

場合によっては、FETCH ループと WHILE ループを使用する必要がありますが、それは遅く、SQL はセット ベースであるため、できる限り避けています。

簡単なことから始めるだけで、コツがつかめます :)

于 2016-08-16T15:48:37.307 に答える