2016-12-15 9 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- in-dynamic-sql) – Aleksej

+0

Невозможно использовать процедуры. – Shadov

+2

У вас не может быть выражения для 'increment by'. Вы также должны указывать числа там «1000000000» - это строка, а не число. Вы также не можете передать полный запрос SQL в 'to_number()'. Даже если вы _could_ используете запрос для '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; 

 Смежные вопросы

  • Нет связанных вопросов^_^