0

良い一日をお過ごしください。SQL-LOADER で関数を使用する方法を学習していますが、それについて質問があります。このテーブルがあるとしましょう

table a
--------------
code
name
dept
birthdate
secret

data.csv ファイルにはこのデータが含まれています

name
dept
birthdate

そして、私はこのコードを使用して、SQLLOADERでデータをロードしています

LOAD DATA
INFILE "data.csv"
APPEND INTO TABLE a;
FIELDS TERMINATED BY ',' optionally enclosed by '"'
TRAILING NULLCOLS
(code "getCode(:name,:dept)",name,dept,birthdate,secret "getSecret(getCode(:name,:dept),birthdate)")

したがって、これは getCode および getSecret 関数から値を取得する魅力のように機能しますが、以前に計算された値を (getCode によって) 参照したいので、次のように getSecret で関数をネストする必要はありません。

getSecret(**getCode(:name,:dept)**,birthdate)

私はこのようにそれをやろうとしました:

getSecret(**:code**,birthdate)

しかし、それはファイルから元の値を取得し(nullを意味します)、関数によって計算されたものではありません(オンザフライで実行するためだと思います)。したがって、私の質問は、以前に計算された値に対するこれらのネスト呼び出しを回避する方法があるかどうかですそのため、同じ値を何度も再計算してパフォーマンスを低下させる必要はありません (使用している実際のテーブルは 10 倍大きく、以前に計算された値に対して多くの関数をネストしているため、パフォーマンスが低下していると思います)

助けていただければ幸いです、ありがとう!!


補体

申し訳ありませんが、以前に外部テーブルを使用したことがありません (ここではちょっと新しい)。このテーブルを使用してこれを実装するにはどうすればよいですか? (私が開発した関数から取得する必要があるすべての計算値を考慮して、トリガー(SQLローダー、トリガー飽和?)、データベースを強制終了しました...)

4

1 に答える 1

1

私はこれを行う方法を知りません。

外部テーブルを使用するように切り替えた場合、この種のこと、つまり共通のテーブル式、サブクエリ キャッシングの活用、その種のものに対して、より多くの自由が得られるでしょう。

于 2013-07-05T15:40:44.830 に答える