Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Klucze Obce..., czy da sie inaczej?
ins@ne
post
Post #1





Grupa: Zarejestrowani
Postów: 68
Pomógł: 0
Dołączył: 10.07.2003
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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


--------------------
"Jedyną pewną metodą unikania porażek jest nie mieć żadnych, nowych pomysłów."
Albert Einstein
Go to the top of the page
+Quote Post
Parti
post
Post #2





Grupa: Zarejestrowani
Postów: 116
Pomógł: 0
Dołączył: 22.07.2004

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 00:37