从具有变量名称的序列中选择nextval

时间:2013-10-08 16:32:52

标签: oracle sequence

我正在一个应用程序中工作,其中每个用户都有一个ID,它是序列中的连续数字,序列并不总是相同。

假设你有序列A,其中nextval设置为8,序列B的nextval设置为5.应用程序必须根据一组规则判断使用哪个序列,所以下一个条目可以有id 5或8(它不会有任何约束问题,因为主键在另一个字段中)。我想使用像

这样的单一查询
SELECT NEXTVAL FROM ALL_SEQUENCES WHERE SEQUENCE_NAME = "";

但我无法弄清楚这是否可能。

我不想在我的应用代码中连接序列名称,因为它打破了我用于其余查询的模式。

1 个答案:

答案 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;