Oracle SQL grundsätzlich

Lybrial

Neuer Benutzer
Beiträge
1
Hallo,

es ist das erste mal, dass ich SQL in einer Oracle-Datenbank verwenden muss
und bin überrascht, dass nicht mal das (für mich) einfachste SQL funktioniert.

Das liegt natürlich nicht an Oracle oder SQL, sondern an mir ;)

Vielleicht kann mir einer helfen, ich möchte einige Tabellen erstellen und bekomme
bei jeder einzelnen Tabelle folgenden Fehler:

Code:
ORA-00922: missing or invalid option

Außerdem habe ich noch keine einfache Möglichkeit gefunden, eine ID automatisch
inkrementieren zu lassen.
(Das SQL das ich normalerweise verwende lässt so etwas problemlos zu: ID BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY)

Zum Schluss mal die Statments die ich durchjagen möchte. Vom Aufbau ähneln alle
Statements den ersten dreien:

Code:
--
-- Sequence for aout incrment
--
CREATE SEQUENCE IF NOT EXISTS AUTO_INC_SEQ
START WITH 1
INCREMENT BY 1;
 
--
-- Table Person
--
CREATE TABLE IF NOT EXISTS FITNESS_PERSON
(
ID NUMBER NOT NULL PRIMARY KEY,
FIRST_NAME VARCHAR NOT NULL,
LAST_NAME VARCHAR NOT NULL,
NICK_NAME VARCHAR NOT NULL,
DATE_BIRTH DATE NOT NULL,
PASSWORD VARCHAR NOT NULL,
CONSTRAINT UNIQUE(NICK_NAME)
);
 
--
-- Table BMR
--
CREATE TABLE IF NOT EXISTS FITNESS_BMR
(
ID NUMBER NOT NULL PRIMARY KEY,
VALUE FLOAT NOT NULL,
VALUE_DATE DATE NOT NULL
);
 
--
-- M:N for BMR and Person
--
CREATE TABLE IF NOT EXISTS FITNESS_BMR_PERSON
(
BMR_ID NUMBER NOT NULL,
PERSON_ID NUMBER NOT NULL,
FOREIGN KEY(BMR_ID) REFERENCES FITNESS_BMR(ID),
FOREIGN KEY(PERSON_ID) REFERENCES FITNESS_PERSON(ID),
CONSTRAINT BMR_PER PRIMARY KEY(BMR_ID, PERSON_ID)
);
 
--
-- Table BMI
--
CREATE TABLE IF NOT EXISTS FITNESS_BMI
(
ID NUMBER NOT NULL PRIMARY KEY,
VALUE FLOAT NOT NULL,
VALUE_DATE DATE NOT NULL
);
 
--
-- M:N for BMI and Person
--
CREATE TABLE IF NOT EXISTS FITNESS_BMI_PERSON
(
BMI_ID NUMBER NOT NULL,
PERSON_ID NUMBER NOT NULL,
FOREIGN KEY(BMI_ID) REFERENCES FITNESS_BMI(ID),
FOREIGN KEY(PERSON_ID) REFERENCES FITNESS_PERSON(ID),
CONSTRAINT BMI_PER PRIMARY KEY(BMI_ID, PERSON_ID)
);
 
--
-- Table AMR
--
CREATE TABLE IF NOT EXISTS FITNESS_AMR
(
ID NUMBER NOT NULL PRIMARY KEY,
VALUE FLOAT NOT NULL,
VALUE_DATE DATE NOT NULL
);
 
--
-- M:N for AMR and Person
--
CREATE TABLE IF NOT EXISTS FITNESS_AMR_PERSON
(
AMR_ID NUMBER NOT NULL,
PERSON_ID NUMBER NOT NULL,
FOREIGN KEY(AMR_ID) REFERENCES FITNESS_AMR(ID),
FOREIGN KEY(PERSON_ID) REFERENCES FITNESS_PERSON(ID),
CONSTRAINT AMR_PER PRIMARY KEY(AMR_ID, PERSON_ID)
);
 
--
-- Table Workoutplan
--
CREATE TABLE IF NOT EXISTS FITNESS_WORKOUT_PLAN
(
ID NUMBER NOT NULL PRIMARY KEY,
NAME VARCHAR NOT NULL,
DESCRIPTION VARCHAR NOT NULL
);
 
--
-- M:N for Workoutplan and Person
--
CREATE TABLE IF NOT EXISTS FITNESS_WORKOUT_PLAN_PERSON
(
WORKOUT_PLAN_ID NUMBER NOT NULL,
PERSON_ID NUMBER NOT NULL,
FOREIGN KEY(WORKOUT_PLAN_ID) REFERENCES FITNESS_WORKOUT_PLAN(ID),
FOREIGN KEY(PERSON_ID) REFERENCES FITNESS_PERSON(ID),
CONSTRAINT WP_PER PRIMARY KEY(WORKOUT_PLAN_ID, PERSON_ID)
);
 
--
-- Table Workout
--
CREATE TABLE IF NOT EXISTS FITNESS_WORKOUT
(
ID NUMBER NOT NULL PRIMARY KEY,
NAME VARCHAR NOT NULL,
DESCRIPTION VARCHAR NOT NULL,
W_DATE DATE
);
 
--
-- M:N for Workout and Workoutplan
--
CREATE TABLE IF NOT EXISTS FITNESS_WORKOUT_WORKOUT_PLAN
(
WORKOUT_ID NUMBER NOT NULL,
WORKOUT_PLAN_ID NUMBER NOT NULL,
FOREIGN KEY(WORKOUT_ID) REFERENCES FITNESS_WORKOUT(ID),
FOREIGN KEY(WORKOUT_PLAN_ID) REFERENCES FITNESS_WORKOUT_PLAN(ID),
CONSTRAINT W_WP PRIMARY KEY(WORKOUT_ID, WORKOUT_PLAN_ID)
);
 
--
-- Table Exercise
--
CREATE TABLE IF NOT EXISTS FITNESS_EXERCISE
(
ID NUMBER NOT NULL PRIMARY KEY,
NAME VARCHAR NOT NULL,
DESCRIPTION VARCHAR NOT NULL,
SETS VARCHAR,
REPS VARCHAR,
WEIGHT VARCHAR,
DURATION TIME
);
 
--
-- M:N for Exercise and Workout
--
CREATE TABLE IF NOT EXISTS FITNESS_EXERCISE_WORKOUT
(
EXERCISE_ID NUMBER NOT NULL,
WORKOUT_ID NUMBER NOT NULL,
FOREIGN KEY(EXERCISE_ID) REFERENCES FITNESS_EXERCISE(ID),
FOREIGN KEY(WORKOUT_ID) REFERENCES FITNESS_WORKOUT(ID),
CONSTRAINT E_W PRIMARY KEY(EXERCISE_ID, WORKOUT_ID)
);
 
--
-- Table Workoutdiary
--
CREATE TABLE IF NOT EXISTS FITNESS_WORKOUT_DIARY
(
ID NUMBER NOT NULL PRIMARY KEY,
NAME VARCHAR NOT NULL,
DESCRIPTION VARCHAR NOT NULL
);
 
--
-- M:N for Workoutdiary and Person
--
CREATE TABLE IF NOT EXISTS FITNESS_WORKOUT_DIARY_PERSON
(
WORKOUT_DIARY_ID NUMBER NOT NULL,
PERSON_ID NUMBER NOT NULL,
FOREIGN KEY(WORKOUT_DIARY_ID) REFERENCES FITNESS_WORKOUT_DIARY(ID),
FOREIGN KEY(PERSON_ID) REFERENCES FITNESS_PERSON(ID),
CONSTRAINT WD_PER PRIMARY KEY(WORKOUT_DIARY_ID, PERSON_ID)
);
 
--
-- Table Nutritionplan
--
CREATE TABLE IF NOT EXISTS FITNESS_NUTRITION_PLAN
(
ID NUMBER NOT NULL PRIMARY KEY,
NAME VARCHAR NOT NULL,
DESCRIPTION VARCHAR NOT NULL
);
 
--
-- M:N for Workoutplan and Person
--
CREATE TABLE IF NOT EXISTS FITNESS_NUTRITION_PLAN_PERSON
(
NUTRITION_PLAN_ID NUMBER NOT NULL,
PERSON_ID NUMBER NOT NULL,
FOREIGN KEY(NUTRITION_PLAN_ID) REFERENCES FITNESS_NUTRITION_PLAN(ID),
FOREIGN KEY(PERSON_ID) REFERENCES FITNESS_PERSON(ID),
CONSTRAINT NP_PER PRIMARY KEY(NUTRITION_PLAN_ID, PERSON_ID)
);
 
--
-- Table Nutrition
--
CREATE TABLE IF NOT EXISTS FITNESS_NUTRITION
(
ID NUMBER NOT NULL PRIMARY KEY,
NAME VARCHAR NOT NULL,
DESCRIPTION VARCHAR NOT NULL,
W_DATE DATE
);
 
--
-- M:N for Nutrition and Nutritionplan
--
CREATE TABLE IF NOT EXISTS FITNESS_NUTRITION_NUTRITION_PLAN
(
NUTRITION_ID NUMBER NOT NULL,
NUTRITION_PLAN_ID NUMBER NOT NULL,
FOREIGN KEY(NUTRITION_ID) REFERENCES FITNESS_NUTRITION(ID),
FOREIGN KEY(NUTRITION_PLAN_ID) REFERENCES FITNESS_NUTRITION_PLAN(ID),
CONSTRAINT N_NP PRIMARY KEY(NUTRITION_ID, NUTRITION_PLAN_ID)
);
 
--
-- Table Food
--
CREATE TABLE IF NOT EXISTS FITNESS_FOOD
(
ID NUMBER NOT NULL PRIMARY KEY,
NAME VARCHAR NOT NULL,
DESCRIPTION VARCHAR NOT NULL,
PROTEIN INT,
CARBOS INT,
FAT INT,
CALORIES INT
);
 
--
-- M:N for Food and Nutrition
--
CREATE TABLE IF NOT EXISTS FITNESS_FOOD_NUTRITION
(
FOOD_ID NUMBER NOT NULL,
NUTRITION_ID NUMBER NOT NULL,
FOREIGN KEY(FOOD_ID) REFERENCES FITNESS_FOOD(ID),
FOREIGN KEY(NUTRITION_ID) REFERENCES FITNESS_NUTRITION(ID),
CONSTRAINT F_N PRIMARY KEY(FOOD_ID, NUTRITION_ID)
);

Hoffe das ich das schnell in meinen Kopf bekomme, was es hier für
Oracle zu beachten gibt :)

Grüße
 
Werbung:

akretschmer

Datenbank-Guru
Beiträge
9.614
Vielleicht kann mir einer helfen, ich möchte einige Tabellen erstellen und bekomme
bei jeder einzelnen Tabelle folgenden Fehler:

Code:
ORA-00922: missing or invalid option

Außerdem habe ich noch keine einfache Möglichkeit gefunden, eine ID automatisch
inkrementieren zu lassen.
(Das SQL das ich normalerweise verwende lässt so etwas problemlos zu: ID BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY)


Grüße


Vorweg: ich nix Oraggle, aber PostgreSQL ist ja recht ähnlich.
  • an welcher Stelle kommt der Fehler? bei welchem SQL?
  • PG kennt keinen Typ NUMBER, vielleicht knallt es ja schon deswegen, aber vielleicht hat ORA den Typ, i don't know
  • Du definierst eine Sequence, die aber nirgends verwendet wird. Wenn das für die jeweiligen ID-Spalten sein soll, müßtest Du als default nextval() verwenden
  • besser: gleich die ID als SERIAL definieren, so zumindest geht es in PG. Es sei denn, Du willst eine über alle Tabellen eindeutige ID da haben, dann siehe 1 Punkt höher.
  • die Syntax für den Constraint, in PG wäre es a) unique (field) oder b) constraint <constraint_name> unique (field), also vermutlich bei Dir auch falsch
  • Du scheinst MySQL-geschädigt zu sein ;-)
  • wir sehen: ORA hat grottige Fehlermeldungen...

Andreas
 
Oben