1

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

假设您有序列 A 的 nextval 设置为 8,序列 B 的 nextval 设置为 5。应用程序必须根据一组规则告诉使用哪个序列,因此下一个条目的 id 可以是 5 或 8(它不会有任何约束问题,因为主键在另一个字段中)。我想使用一个查询,例如

SELECT NEXTVAL FROM ALL_SEQUENCES WHERE SEQUENCE_NAME = "";

但我不知道那是否可能。

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

4

1 回答 1

4

正如 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;
于 2013-10-08T16:39:39.773 回答