2013-10-08 25 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

相關問題