我在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语句一次性带来整个数据,我得到相同的序列号。在每一行中都有唯一的序列号。
如何在这里操作查询,以便逐个获取数据以及在目标表中插入的序列,这样序列号就是唯一的。
感谢您的帮助。
答案 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。