1
votes

Erreur de commande SQL non correctement terminée: Erreur: ORA-00933

Voici la requête que j'essaie d'exécuter.

CREATE SEQUENCE "GARY"."TABL_PROD_DWH_SEQ" 
MINVALUE 1 MAXVALUE 99999999999999999999999999999999
INCREMENT BY 1 START WITH 21 CACHE 20 NOORDER NOCYCLE NOPARTITION;

Erreur de démarrage à la ligne: 1 dans la commande -

CRÉER LA SÉQUENCE "GARY". "TABL_PROD_DWH_SEQ" MINVALUE 1 MAXVALUE 99999999999999999999999999999999 AUGMENTATION DE 1 COMMENCE PAR 21 NOPARTITION NOCYCLE CACHE 20 NOORDER;

Rapport d'erreur - Erreur SQL: ORA-00933: la commande SQL ne s'est pas correctement terminée 00933. 00000 - "La commande SQL ne s'est pas correctement terminée" 'Cause: 'Action:


2 commentaires

Les documents Oracle indiquent que la valeur maximale peut avoir 28 chiffres ou moins pour les valeurs positives, mais que vous avez défini 32 chiffres.


@GARY Salut, je pense que vous avez oublié de sélectionner une réponse.


3 Réponses :


1
votes

Quelle version d'Oracle utilisez-vous? NOPARTITION ne sonne pas une cloche. Il se peut qu'il ne soit disponible que sur les versions plus récentes.

Vous pouvez également utiliser NOMAXVALUE . Cela semble plus intuitif que votre valeur arbitraire.


0 commentaires

1
votes

Explication

Veuillez consulter la question / réponse suivante: Oracle 12.2 - Remplacement de la fonctionnalité NOPARTITION

Votre problème est NOPARTITION.

Il s'agit d'une fonctionnalité non prise en charge non documentée après une version d'Oracle (je pense 12).

Voir également: https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:9523071800346490539

Test h2>

http://sqlfiddle.com/#!4/1afa88 (Oracle 11g R2)

Ce qui suit fonctionne:

CREATE SEQUENCE "TABL_PROD_DWH_SEQ" 
MINVALUE 1 MAXVALUE 99999999999999999999999999999999
INCREMENT BY 1 START WITH 21 CACHE 20
NOORDER NOCYCLE
;

0 commentaires

0
votes

On vous a déjà dit la plupart des choses. Permettez-moi d'ajouter quelques mots.

Votre problème ressemble à celui qui se produit lorsque les gens utilisent des paramètres qu'ils ne comprennent pas tout à fait. Je m'excuse si j'ai l'air impoli , mais - c'est mon impression. Pourquoi? À cause de l'apparence de cette déclaration CREATE SEQUENCE .

Aucune personne vivante que je connais ne l'a jamais écrite manuellement

  • en utilisant des guillemets doubles autour du propriétaire en majuscules et du nom de la séquence,
  • et ils n'ont pas non plus utilisé un tel MAXVALUE (diable, c'est indéfini de toute façon),
  • ni ils ne veulent explicitement rappeler à Oracle que l'incrément par défaut est 1 ,
  • ainsi que le cache (qui est 20 par défaut)
  • sans parler des autres options qui sont de toute façon par défaut

À part commencer par , tout le reste est de toute façon par défaut donc vous auriez pu utiliser

SQL> create sequence tabl_prod_dwh_seq start with 21;

Sequence created.

SQL> select tabl_prod_dwh_seq.nextval from dual;

   NEXTVAL
----------
        21

SQL> select tabl_prod_dwh_seq.nextval from dual;

   NEXTVAL
----------
        22

SQL>

et obtenez le même résultat. Alors ... jetez un œil à la documentation relative à la version de votre base de données , essayez de la suivre, ne faites pas ce qui n'est pas autorisé (ou non documenté), restez aussi simple que possible et vous serez bien.


0 commentaires