动态设置Oracle序列的“Start With”值

动态设置Oracle序列的“Start With”值,第1张

概述我正在尝试创建一个可以部署在多个数据库上的发布脚本,但是可以在以后将数据合并在一起.处理此问题的显而易见的方法是在后续部署中将生产数据的序列设置得足够高以防止冲突. 问题在于提出一个发布脚本,该脚本将接受环境编号并适当地设置序列的“Start With”值.理想情况下,我想使用这样的东西: ACCEPT EnvironNum PROMPT 'Enter the Environment Numbe 我正在尝试创建一个可以部署在多个数据库上的发布脚本,但是可以在以后将数据合并在一起.处理此问题的显而易见的方法是在后续部署中将生产数据的序列号设置得足够高以防止冲突.

问题在于提出一个发布脚本,该脚本将接受环境编号并适当地设置序列的“Start With”值.理想情况下,我想使用这样的东西:

ACCEPT EnvironNum PROMPT 'Enter the Environment Number:  '--[more scripting]CREATE SEQUENCE seq1 START WITH &EnvironNum*100000;--[more scripting]

这不起作用,因为您无法在DDL中计算数值表达式.

另一种选择是通过PL / sql使用动态sql创建序列.

ACCEPT EnvironNum PROMPT 'Enter the Environment Number:  '--[more scripting]EXEC execute immediate 'CREATE SEQUENCE seq1 START WITH ' || &EnvironNum*100000;--[more scripting]

但是,我宁愿避免这种解决方案,因为我通常会尽量避免在PL / sql中发出DDL.

最后,我提出的第三个选项是简单地接受Start With值作为替换变量,而不是环境号.

有没有人更好地考虑如何解决这个问题?

解决方法 您可以使用ColUMN XX NEW_VALUE YY语法在sql * Plus中执行计算并将结果存储在变量中:

sql> col sequence_num new_value seqsql> select &EnvironNum * 1000000 sequence_num from dual;Enter value for environnum: 2old   1: select &EnvironNum * 1000000 sequence_num from dualnew   1: select 2 * 1000000 sequence_num from dualSEQUENCE_NUM------------     2000000sql> create sequence scott.seq1 start with &seq;old   1: create sequence scott.seq1 start with &seqnew   1: create sequence scott.seq1 start with    2000000Sequence created.
总结

以上是内存溢出为你收集整理的动态设置Oracle序列的“Start With”值全部内容,希望文章能够帮你解决动态设置Oracle序列的“Start With”值所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/1167175.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存