我正在一个应用程序中工作,其中每个用户都有一个ID,它是序列中的连续数字,序列并不总是相同。
假设你有序列A,其中nextval设置为8,序列B的nextval设置为5.应用程序必须根据一组规则判断使用哪个序列,所以下一个条目可以有id 5或8(它不会有任何约束问题,因为主键在另一个字段中)。我想使用像
这样的单一查询SELECT NEXTVAL FROM ALL_SEQUENCES WHERE SEQUENCE_NAME = "";
但我无法弄清楚这是否可能。
我不想在我的应用代码中连接序列名称,因为它打破了我用于其余查询的模式。
答案 0 :(得分:3)
如a_horse_with_no_name建议您可以创建一个函数来获取下一个值,如
CREATE OR REPLACE
FUNCTION next_val(
sequence_name IN VARCHAR2
)RETURN VARCHAR2
IS
v_nextval INTEGER;
v_select VARCHAR2(100);
BEGIN
v_select := 'select '||sequence_name||'.nextval from dual';
EXECUTE IMMEDIATE v_select INTO v_nextval;
RETURN v_nextval;
END;