2016-12-15 66 views
1
ALTER SEQUENCE my_sequence 
    INCREMENT BY '1000000000' - TO_NUMBER(SELECT last_number FROM all_sequences WHERE sequence_name='my_sequence'); 

可以給我這樣的人解釋爲何拋出「數目不正確」?我試着把TO_NUMBER都放在裏面,我沒有試過,我在沒有''的情況下嘗試了大數字,我可以想到的每個組合都是錯誤的,對我來說根本沒有任何意義。子查詢的工作,我檢查。甲骨文改變increment_by上的序列

+0

看看[這個問題](http://stackoverflow.com/questions/10383091/how-can-i-alter-a-sequence- in-dynamic-sql) – Aleksej

+0

不能使用程序。 – Shadov

+2

你不能有一個表達式來「增加」。你也應該在那裏指定數字''1000000000''是一個字符串,而不是一個數字。您也不能將完整的SQL查詢傳遞給'to_number()'。即使你可以使用'increment by'查詢來調用to_number()將是完全無用的,因爲'last_number'已經是一個數字,所以不需要將其轉換爲數字 –

回答

3

使用PL/SQL塊代替:

DECLARE 
    INC NUMBER; 
BEGIN 
    SELECT 1000000000 - LAST_NUMBER 
    INTO INC 
    FROM USER_SEQUENCES 
    WHERE SEQUENCE_NAME='my_sequence'; 

    EXECUTE IMMEDIATE 'ALTER SEQUENCE my_sequence INCREMENT BY '||INC; 
END;