Oracle数据库Merge Into 如何使用Sequence 而不“浪费”
答案:2 悬赏:10 手机版
解决时间 2021-03-09 13:54
- 提问者网友:爱了却不能说
- 2021-03-09 05:26
Oracle数据库Merge Into 如何使用Sequence 而不“浪费”
最佳答案
- 五星知识达人网友:渡鹤影
- 2021-03-09 05:53
2、测试前提:创建脚本。
从上面的结果,我们可以非常清晰的看到6和7那里去了?--浪费掉了。
4、解决。创建一个函数来获取相应的值。
create or replace function get_sequence_nextval(f_schema in varchar2, f_sequence_name in varchar2) return numberisv_nextval number;beginexecute immediate 'select ' || f_schema || '.'||f_sequence_name||'.nextval from dual' into v_nextval;
return v_nextval;exceptionwhen others then
raise_application_error(sqlcode,sqlerrm);end;
将3测试中的代码调整为:
test.seq_test.nextval ==
test.get_sequence_nextval('test','seq_test')
再次调用,我们可以看到三条记录11、12、13已经紧跟着10了。--不浪费了。IDNAMESEQ_VALUET_STAMP11one 2012-11-18 下午 03:28:352 22012-11-18 下午 03:11:4633 32012-11-15 下午 03:11:464 four42012-11-19 下午 03:11:4652two 2012-11-18 下午 03:28:356 82012-11-18 下午 03:11:4673 92012-11-15 下午 03:11:468 four102012-11-19 下午 03:11:469 112012-11-18 下午 03:11:46103 122012-11-15 下午 03:11:4611 four132012-11-19 下午 03:11:46
5、结论及分析:
使用Merge Into调用Sequence 类似于预编译,会直接将值赋组合相应的调用,而不管该matched 或 not matched是否成功执行。而使用一个function进行封闭以后,因为预编译时无法知道该值,所以不会进行预处理,因此也不会浪费sequence的值。但是,使用function来讲,会带来另外一个问题,性能因为无端的增加了一下调用。
所以,根据自己的实际情况,选择适合自己的才是最好的。
从上面的结果,我们可以非常清晰的看到6和7那里去了?--浪费掉了。
4、解决。创建一个函数来获取相应的值。
create or replace function get_sequence_nextval(f_schema in varchar2, f_sequence_name in varchar2) return numberisv_nextval number;beginexecute immediate 'select ' || f_schema || '.'||f_sequence_name||'.nextval from dual' into v_nextval;
return v_nextval;exceptionwhen others then
raise_application_error(sqlcode,sqlerrm);end;
将3测试中的代码调整为:
test.seq_test.nextval ==
test.get_sequence_nextval('test','seq_test')
再次调用,我们可以看到三条记录11、12、13已经紧跟着10了。--不浪费了。IDNAMESEQ_VALUET_STAMP11one 2012-11-18 下午 03:28:352 22012-11-18 下午 03:11:4633 32012-11-15 下午 03:11:464 four42012-11-19 下午 03:11:4652two 2012-11-18 下午 03:28:356 82012-11-18 下午 03:11:4673 92012-11-15 下午 03:11:468 four102012-11-19 下午 03:11:469 112012-11-18 下午 03:11:46103 122012-11-15 下午 03:11:4611 four132012-11-19 下午 03:11:46
5、结论及分析:
使用Merge Into调用Sequence 类似于预编译,会直接将值赋组合相应的调用,而不管该matched 或 not matched是否成功执行。而使用一个function进行封闭以后,因为预编译时无法知道该值,所以不会进行预处理,因此也不会浪费sequence的值。但是,使用function来讲,会带来另外一个问题,性能因为无端的增加了一下调用。
所以,根据自己的实际情况,选择适合自己的才是最好的。
全部回答
- 1楼网友:低音帝王
- 2021-03-09 06:21
期待看到有用的回答!
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯