1

我在 oracle 上运行 PL/SQL 代码,它应该将表“A”中的数据插入到表“B”中,同时从函数返回一个唯一序列。我的sql查询是这样的

SEQUENCE_COLUMN:=SEQ_COL_FUNC('WTPARTMASTER', 'ELEM10',SEQUENCE_COLUMN);
sequence_value:=seq_val_func('WTPARTMASTER', 'ELEM10',sequence_value);
dest_Columns:=dest_Columns || ',' || sequence_column;

QUERY_TEST :=  'insert into wbm.' || DESTINATION_TABLE || '(' || DEST_COLUMNS || ') select ' || SRC_COLUMNS || ', :value from ' || SOURCE_TABLE;

execute immediate query_test USING sequence_value;

现在的问题是这样的,select语句一次性带入整个数据,我得到相同的序列号。在每一行中,而不是唯一的序列号。

如何在此处操作查询,以便我将数据和序列一一插入到我的目标表中,以使序列号是唯一的。

谢谢你的帮助。

4

2 回答 2

0

为什么你有 seq_val_func()?

只需使用 sequence_name.nextval 和 sequence_name.currval 来访问序列中的值。看起来您正在尝试动态确定正确的 sequence_name,然后在一段动态 SQL 中使用它。没关系(对我来说似乎过于复杂,但我不知道您的业务需求),但是,您应该在动态生成的 SQL 语句中直接引用 nextval 或 currval。

于 2013-12-24T17:46:05.897 回答
-1

我想这可能是你想要的:

SEQUENCE_COLUMN:=SEQ_COL_FUNC('WTPARTMASTER', 'ELEM10',SEQUENCE_COLUMN);
dest_Columns:=dest_Columns || ',' || sequence_column;

QUERY_TEST :=  'insert into wbm.' || DESTINATION_TABLE || '(' || DEST_COLUMNS || ') select ' || SRC_COLUMNS || ', seq_val_func('WTPARTMASTER', 'ELEM10',sequence_value) from ' || SOURCE_TABLE;

execute immediate query_test;

这将为插入的每条记录调用 seq_val_func。

于 2013-12-24T17:58:40.930 回答