2013-10-08 31 views
0

我正在一个应用程序中,每个用户都有一个Id,它是序列中的连续数字,序列并不总是相同的。从具有变量名称的序列中选择nextval

比方说,你有NEXTVAL阐述的序列的8个,并与NEXTVAL集合列B到5应用必须确定要使用基于一组规则,顺序,所以下一个条目可以有ID 5或8(因为主键在另一个字段中,所以不会有任何限制问题)。我想用一个单一的查询像

SELECT NEXTVAL FROM ALL_SEQUENCES WHERE SEQUENCE_NAME = ""; 

但如果多数民众赞成甚至有可能我想不通。

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

+1

你需要写,你通过序列名称的函数。该函数然后可以使用动态SQL来查询序列并返回值。 –

回答

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; 
+0

但是有什么方法可以使用作为变量,因此它可以在同一个查询中是A.nextval或B.nextval ?. case声明不是一个选项,因为我无法保证sequence_name将保持不变(由用户定义)。 – StuMx

+0

在这种情况下,你可以创建一个功能来做到这一点,请看看我更新的答案。 – Dba

相关问题