Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Oracle SQL grundsätzlich

Dieses Thema im Forum "Oracle" wurde erstellt von Lybrial, 11 April 2013.

  1. Lybrial

    Lybrial Neuer Benutzer

    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
     
  2. akretschmer

    akretschmer Datenbank-Guru


    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
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden