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

「不正な番号」がスローされる理由を説明できますか?私はTO_NUMBERをどこにでも置こうとしましたが、私は全くそれを試していませんでした。私は''を試していませんでした。私は考えているすべての組み合わせ、それでもエラーは全く意味がありません。サブクエリが動作し、確認しました。代わりにOracleは、シーケンスのincrement_byを変更します。

+0

は、[この質問](http://stackoverflow.com/questions/10383091/how-can-i-alter-a-sequence-を見てダイナミックSQL) – Aleksej

+0

プロシージャを使用できません。 – Shadov

+2

「増分」の式は使用できません。 '1000000000 'は数字ではなく文字列です。 'to_number()'に完全なSQLクエリを渡すこともできません。もし、あなたが 'increment by 'の問い合わせを使うことができたとしても、' last_number'は既に数値であるので、to_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; 
関連する問題