Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Klucze Obce...
Forum PHP.pl > Forum > Bazy danych > Oracle
ins@ne
Witam,
Standardowo korzystam z MSSQL i MySQL, ale tym razem musialem napisac w pracy kilka zapytania dla Oracle'a. Mowie sobie - sql to sql, nie bedzie problemu. Wiec ile razy mnie krew zalala w przeciagu ostatnich dwoch dni to szkoda gadac...
Mam w zwiazku z tym pytanie odnosnie tworzenia tabel i ustawiania kluczy obcych. Normalnie wygladaloby to tak (dziala pod MSSQL i MySQL bo zawsze tak pisze):
  1. CREATE TABLE apps (
  2. ap_oid number(10) PRIMARY KEY,
  3. ap_name varchar2(100) NOT NULL);
  4.  
  5. CREATE TABLE pr_st_jobs (
  6. jb_oid number(10) PRIMARY KEY,
  7. jb_submitter varchar2(100) NOT NULL,
  8. jb_status number(2) NOT NULL,
  9. jb_created_on date NOT NULL,
  10. jb_submitted_on date NULL,
  11. jb_finished_on date NULL,
  12. jb_notification_on char(1) NOT NULL);
  13.  
  14. CREATE TABLE pr_st_tasks (
  15. ts_oid number(10) PRIMARY KEY,
  16. ts_type varchar2(20) NOT NULL,
  17. ts_process_count number(3) NULL,
  18. ts_parent_oid number(10) FOREIGN KEY REFERENCES pr_st_jobs(jb_oid),
  19. ts_app_oid number(10) FOREIGN KEY REFERENCES pr_st_apps(ap_oid));

Tak przynajmniej mnie uczono, ze powinno sie klucze obce deklarowac :|. Teraz w Oraclu (pod SQuirreLem) dostaje blad, ze 'brakuje prawego nawiasu'. Jako, ze nawiasu nie brakuje to zaczalem kombinowac gdzie mu skladnia nie lezy, ze sie chlopak burzy. No i doszedlem, ze jesli skladnia bedzie wygladac tak:
  1. CREATE TABLE pr_st_tasks (
  2. ts_oid number(10) PRIMARY KEY,
  3. ts_type varchar2(20) NOT NULL,
  4. ts_process_count number(3) NULL,
  5. ts_parent_oid number(10) NOT NULL,
  6. ts_app_oid number(10) NOT NULL,
  7. constraint st_ts_fk1 FOREIGN KEY(ts_parent_oid) REFERENCES pr_st_jobs(jb_oid),
  8. constraint st_ts_fk2 FOREIGN KEY(ts_app_oid) REFERENCES pr_st_apps(ap_oid));

to wszystko jest dobrze...
Zastanawiaja mnie tutaj dwie rzeczy: po pierwsze dlaczego musze dodawac constrainta na koncu i tworzyc dla niego nowa nazwe (bo tak naprawde to nie bardzo wiem co ta nazwa reprezentuje) skoro primary key moge dodac normalnie (czyli jako domyslny constraint) podczas deklarowania kolumny. A po drugie dlaczego gdy te constrainty nazwalem tak jak constrainty w zupelnie innej tabeli to mi Oracle wywalil blad, ze nazwa jest juz wykorzystana przez istniejace wiezy?
Takze mam prosbe do tych osob, ktore sa z Oraclem za pan brat o dokladne i doglebne wyjasnienie o co chodzi bo wiem, ze Oracle jest potezna baza danych, ale teraz nie wiem czy ta potega mnie przerasta czy jak... Bo moj pierwszy z nia kontakt o malo co a zakonczylby sie destrukcja monitora albo przynajmniej klawiatury...
Parti
MySQL też obsługuje taką składnie. Zobacz tutaj.

  1. constraint st_ts_fk1 FOREIGN KEY(ts_parent_oid) REFERENCES pr_st_jobs(jb_oid),


Najwyraźniej taka jest składnia PLSQL i nic na to nie poradzisz. Nazwa więzu jest potrzebna do takich operacji jak alter table i drop.

Cytat
Mowie sobie - sql to sql


Nie w przypadku MySQL'a, który zawiera mnóstwo niestandardowych udogodnień cool.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.