加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

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

发布时间:2021-04-01 10:22:54 所属栏目:站长百科 来源:网络整理
导读:我正在尝试创建一个可以部署在多个数据库上的发布脚本,但是可以在以后将数据合并在一起.处理此问题的显而易见的方法是在后续部署中将生产数据的序列号设置得足够高以防止冲突. 问题在于提出一个发布脚本,该脚本将接受环境编号并适当地设置序列的“Start With

我正在尝试创建一个可以部署在多个数据库上的发布脚本,但是可以在以后将数据合并在一起.处理此问题的显而易见的方法是在后续部署中将生产数据的序列号设置得足够高以防止冲突.

问题在于提出一个发布脚本,该脚本将接受环境编号并适当地设置序列的“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 seq
SQL> select &EnvironNum * 1000000 sequence_num from dual;
Enter value for environnum: 2
old   1: select &EnvironNum * 1000000 sequence_num from dual
new   1: select 2 * 1000000 sequence_num from dual

SEQUENCE_NUM
------------
     2000000

SQL> create sequence scott.seq1 start with &seq;
old   1: create sequence scott.seq1 start with &seq
new   1: create sequence scott.seq1 start with    2000000

Sequence created.

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读