Oracle 9: ORA-00984: Spalte hier nicht zulässig

javas

Mitglied
Hallo zusammen

Ich habe folgendes Problem:
Ich will mit folgendem Query eine neue Tabelle erstellen:
SQL:
Create Table testtable(
id int default testtable_id_seq.nextval PRIMARY KEY,
name VARCHAR(100) NOT NULL
);

Nun erhalte ich folgenden Fehler:
16:03:22 [CREATE - 0 row(s), 0.000 secs] [Error Code: 984, SQL State: 42000] ORA-00984: Spalte hier nicht zulässig

Die Sequenz existiert!

Kann mir jemand helfen?
Der Fehler ist auf der der 2. Zeile!

Besten Dank
 
Zuletzt bearbeitet von einem Moderator:
Dass man eine Sequenz als Default-Value setz hab ich so noch nie gemacht. Wir lösten das jeweils über einen Trigger.

Hab da im Internet auch was gefunden dass genau dein Fehler ausgibt
http://thinkoracle.blogspot.com/2006/02/oracle-sequences.html

-- Won't work:
SQL:
CREATE TABLE MyTable (seq_id NUMBER(1) DEFAULT rollover_seq.NEXTVAL);
ORA-00984: column not allowed here

-- Will work:
SQL:
CREATE TABLE MyTable (seq_id NUMBER(1));

CREATE OR REPLACE TRIGGER trig_seq BEFORE INSERT ON MyTable
FOR EACH ROW
BEGIN
SELECT rollover_seq.NEXTVAL into :new.seq_id FROM dual;
END;

Achja, bitte in Zukunft deine SQLs in [code=sql]dein Code[/code] setzen....
 
Zuletzt bearbeitet von einem Moderator:
Hallo zusammen
Nun erhalte ich folgenden Fehler:
16:03:22 [CREATE - 0 row(s), 0.000 secs] [Error Code: 984, SQL State: 42000] ORA-00984: Spalte hier nicht zulässig

Die Sequenz existiert!

Kann mir jemand helfen?
Der Fehler ist auf der der 2. Zeile!

Besten Dank

Hallo,

Wie Yaslaw ja schon geschrieben hat : Dies geht nicht so. Du musst das Atrtribut als Number erstellen und anschliessend z.b per Trigger füllen lassen.

Also etw aso :

SQL:
CREATE TABLE testtable
    (id                             NUMBER NOT NULL,
    name                           VARCHAR2(100 BYTE) NOT NULL
  ,
  CONSTRAINT TESTTABLE_PK
  PRIMARY KEY (id)
  USING INDEX
  TABLESPACE  ruma_index)
  TABLESPACE  ruma_data
  NOPARALLEL
  LOGGING
  MONITORING
/


CREATE OR REPLACE TRIGGER trig_Testtable_get_pk
 BEFORE
  INSERT
 ON TESTTABLE
REFERENCING NEW AS NEW OLD AS OLD
 FOR EACH ROW
BEGIN
    SELECT testtable_id_seqT.NEXTVAL
        INTO :NEW.ID
        FROM DUAL;
END trig_Testtable_get_pk;
/

Gruss
 
Zuletzt bearbeitet von einem Moderator:
Hallo zusammen
Danke für eure Antworten!
Ich werde morgen mal probieren, ob dies für meinen Anwendungszweck geeignet ist!
Freundliche Grüsse
javas
 
Leider funktioniert das so nicht! Beim Erstellen des Triggers erhalte ich folgenden Fehler:
Fehlender IN- oder OUT-Parameter auf Index:: 1
Wisst ihr was das Problem sein könnte?
 
Zurück