如何添加唯一序列号以及另一个表的数据

时间:2013-12-24 16:42:53

标签: oracle stored-procedures plsql dynamicquery

我在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语句一次性带来整个数据,我得到相同的序列号。在每一行中都有唯一的序列号。

如何在这里操作查询,以便逐个获取数据以及在目标表中插入的序列,这样序列号就是唯一的。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

为什么你有seq_val_func()?

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

答案 1 :(得分:-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。