Comment puis-je modifier une séquence dans le SQL dynamique?

Je suis en train de créer un script pour migrer les données d'une DB à l'autre. Une chose que je ne suis pas actuellement en mesure de faire est de définir la nextval d'une séquence à l'nextval d'une séquence dans une autre base de données.

J'ai obtenu la différence dans les valeurs de user_sequences, et ont généré suivant les instructions SQL dynamiques:

execute immediate 'alter sequence myseq increment by 100';
execute immediate 'select myseq.nextval from dual';
execute immediate 'alter sequence myseq increment by 1';

commit;

Mais rien ne se passe. Ce qui me manque? Si j'exécute le même états en dehors de la procédure, qu'ils fonctionnent très bien:

alter sequence myseq increment by 100;
select myseq.nextval from dual;
alter sequence myseq increment by 1;

commit;

MODIFIER: toutes mes Excuses à tous pour ne pas être clair. Je suis en fait en changeant la séquence dans la même DB. Je suis le seul à l'obtention de la valeur à partir d'une distance DB. Peut-être qu'il était inutile de parler de la distance DB que ça n'affecte pas les choses. J'ai seulement mentionné pour expliquer ce que mes objectifs étaient.

L'étape 1. Je reçois le nextval de la séquence à partir d'une distance DB.

select (select last_number
        from dba_sequences@remoteDB
        where upper(sequence_name) = upper(v_sequence_name)) - (select last_number
                                                                from user_sequences
                                                                where upper(sequence_name) = upper(v_sequence_name)) increment_by
from dual;    

L'étape 2. - Je générer des instructions SQL dynamiques avec cette valeur:

execute immediate 'alter sequence myseq increment by 100';
execute immediate 'select myseq.nextval from dual';
execute immediate 'alter sequence myseq increment by 1';

commit;

Aucune erreur n'a été soulevée, mais rien ne s'est passé. Quand j'ai écrit les instructions SQL avec DBMS_OUTPUT.PUT_LINE et a couru dehors, ils ont travaillé.

La base de données utilisez-vous ce que c'est? La base de données qui possède la séquence d'essayer de changer? Quand tu dis "rien ne se passe" entendez-vous précisément? Vous ne recevez pas les messages d'erreur?
Oui, je n'ai pas de message d'erreur (les erreurs sont enregistrées). Désolé je n'étais pas clair avant - je suis en fait en changeant la séquence de la même DB à laquelle il appartient. Le PL/SQL procédure se termine avec succès. Je suis l'aide de 10g 10.2.0.5.0 - 64bi
Si vous êtes en cours d'exécution sur ce teh base de données locale pourquoi avez-vous besoin d'utiliser le SQL dynamique?
Hmm je l'ai juste essayé sans SQL dynamique - pour ne pas me mettre tout de modifier les instructions à l'intérieur du PL/SQL bloc, sauf si c'est du SQL dynamique. Il dit: "a Rencontré le symbole "ALTER" lorsque attend que l'un des suivants...". Mon intention est de disposer d'une procédure, je peux utiliser pour actualiser les données quand j'en ai besoin. Et j'ai besoin d'avoir un PL/SQL bloc pour obtenir la valeur de la distance DB - ça ne marchera pas avec une sous-requête pour obtenir la valeur de "modifier la séquence de myseq incrément par X":
Hmm je l'ai juste essayé sans SQL dynamique - pour ne pas me mettre tout de modifier les instructions à l'intérieur du PL/SQL bloc, sauf si c'est du SQL dynamique. Il dit: "a Rencontré le symbole "ALTER" lorsque attend que l'un des suivants...". Mon intention est de disposer d'une procédure, je peux utiliser pour actualiser les données quand j'en ai besoin. Et j'ai besoin d'avoir un PL/SQL bloc pour obtenir la valeur de la distance DB - ça ne marchera pas avec une sous-requête pour obtenir la valeur de "modifier la séquence de myseq incrément par X".

OriginalL'auteur Zesty | 2012-04-30