一部の従来のSQLローダー・スクリプトを外部表に変換しています。外部表が稼動しているので、次のステップでは外部表のデータを表に取り込みます。内のすべての行の定数として使用されているシーケンスの次の値であり、このようなセッションIDとしてSQLローダー、、、を使用してデータをロードするときに、追加のロジックは、ありOracle 11g - シーケンスから一定の値を持つ表の行を移入
Load Data
Append
Into Table my_table
Fields Terminated by "|" Trailing Nullcols
(
MY_COL "Trim(:SOME_COL)",
SESS_ID CONSTANT #$SESSION$#,
FILEREC RECNUM,
REC_ID SEQUENCE(MAX)
)
:SQL Loaderスクリプトは次のようになりますバッチ。私は、以下の方法で行うことを計画していたが、私は(私もINSERT文を使用しようとしましたが、その場合には、すべてのレコードは、シーケンスから次の値を取得します)サブクエリでシーケンスを使用することはできません。
CREATE table my_table(
my_col,
session
)
AS SELECT
e.my_col,
my_seq.nextval
FROM my_external_table e;
質問 - すべての行にsequence.nextval
の定数値を設定する方法はありますか?私は、テーブルを作成し、セッションIDの列を更新するなどの複数のステップでそれを行うことができます知っていますが、(PL/SQLを回避しようとしている)単一のSQLステートメントでそれを行う方法があるのだろうか?計画結果は以下の通りです:
my_col seq.nextval
aaaaaa 99
bbbbbb 99
cccccc 99
しかし、(insert文を使用した場合)私は次の取得しています:
my_col seq.nextval
aaaaaa 99
bbbbbb 100
cccccc 101
解決策「my_seq.nextval」を持つテーブルに現在のセッションIDを挿入してから、そのテーブルの最大セッションIDをターゲットテーブルに選択します –
これはうまく動作します。 – AnoE