Oracle 11g - 使用序列中的常量值填充 table 行
Oracle 11g - populate table rows with constant value from sequence
我正在将一些遗留 SQL 加载程序脚本转换为外部 table。外部 table 已启动且 运行,因此下一步是使用来自外部 table 的数据填充 table。 SQL 加载程序脚本如下所示:
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 加载程序加载数据时,还有其他逻辑,例如会话 ID,它是序列中的下一个值,用作批处理中所有行的常量。我打算按以下方式做,但我不能在子查询中使用序列(我也尝试使用插入语句,但在那种情况下,每条记录都从序列中获取下一个值):
CREATE table my_table(
my_col,
session
)
AS SELECT
e.my_col,
my_seq.nextval
FROM my_external_table e;
问题 - 有没有办法用 sequence.nextval
中的常量值填充所有行?我知道我可以分多个步骤完成,比如创建 table,然后更新会话 ID 列,但我想知道有没有办法在单个 SQL 语句中完成(试图避免 PL/SQL)?计划结果如下:
my_col seq.nextval
aaaaaa 99
bbbbbb 99
cccccc 99
但我得到以下信息(使用插入语句时):
my_col seq.nextval
aaaaaa 99
bbbbbb 100
cccccc 101
seq.nextval
总是 return 下一个值。您正在寻找 seq.currval
.
遗憾的是,seq.currval
要求您之前在同一会话中使用 seq.nextval
;然后 currval
将 return 您通过 nextval
获得的值。所以,在 sql*loader 操作中,你运气不好,因为你无法说服它事先执行 seq.nextval
。
因此,您需要多个步骤。
我正在将一些遗留 SQL 加载程序脚本转换为外部 table。外部 table 已启动且 运行,因此下一步是使用来自外部 table 的数据填充 table。 SQL 加载程序脚本如下所示:
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 加载程序加载数据时,还有其他逻辑,例如会话 ID,它是序列中的下一个值,用作批处理中所有行的常量。我打算按以下方式做,但我不能在子查询中使用序列(我也尝试使用插入语句,但在那种情况下,每条记录都从序列中获取下一个值):
CREATE table my_table(
my_col,
session
)
AS SELECT
e.my_col,
my_seq.nextval
FROM my_external_table e;
问题 - 有没有办法用 sequence.nextval
中的常量值填充所有行?我知道我可以分多个步骤完成,比如创建 table,然后更新会话 ID 列,但我想知道有没有办法在单个 SQL 语句中完成(试图避免 PL/SQL)?计划结果如下:
my_col seq.nextval
aaaaaa 99
bbbbbb 99
cccccc 99
但我得到以下信息(使用插入语句时):
my_col seq.nextval
aaaaaa 99
bbbbbb 100
cccccc 101
seq.nextval
总是 return 下一个值。您正在寻找 seq.currval
.
遗憾的是,seq.currval
要求您之前在同一会话中使用 seq.nextval
;然后 currval
将 return 您通过 nextval
获得的值。所以,在 sql*loader 操作中,你运气不好,因为你无法说服它事先执行 seq.nextval
。
因此,您需要多个步骤。