【发布时间】:2021-12-18 00:21:01
【问题描述】:
我的包 pr_1、pr_2、pr_3 中有三个程序。无论执行顺序,我都想在所有程序中使用相同编号的序列。
我怎样才能做到这一点? 当我尝试将其设置为头部规范中的全局变量时:
next_seq_val CONSTANT NUMBER := SEQ.NEXTVAL
我得到了所需的结果:
next_seq_val in pr_1: 22
next_seq_val in pr_2: 22
next_seq_val is pr_3: 22
但我再次用同样的程序执行包后,还是得到了同样的结果:
next_seq_val in pr_1: 22
next_seq_val in pr_2: 22
next_seq_val is pr_3: 22
应该是 23 岁。
我也试过用easy函数:
FUNCTION GetSeqValue
RETURN NUMBER
IS
BEGIN
RETURN your_sequence.NEXTVAL;
END;
并将其放入程序中,但结果当然是:
next_seq_val in pr_1: 22
next_seq_val in pr_2: 23
next_seq_val is pr_3: 24
我只需要所有程序的相同编号,但我不能将其作为参数,因为我不知道程序将按什么顺序执行,而且似乎可以为此放置全局变量。感谢您的建议。
【问题讨论】:
-
不要让它成为常数
-
您是想让它在所有会话中“全局化”,还是仅在一个会话中?如果您想再次调用这组程序怎么办(在同一个会话或另一个会话中 - 取决于先前的问题);你怎么知道它是一个新集合,还是前一个集合中的乱序调用?
-
我想在一个会话中使其全局化,我知道在 pkg 的头部声明它可能不是一个好主意,因为它将用一个数字编译,而不是在执行时保持静态。我只是假设这是一个应该存在的地方,以便所有程序都可以处理相同的变量。