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):
CREATE TABLE apps ( ap_oid number(10) PRIMARY KEY, ap_name varchar2(100) NOT NULL); CREATE TABLE pr_st_jobs ( jb_oid number(10) PRIMARY KEY, jb_submitter varchar2(100) NOT NULL, jb_status number(2) NOT NULL, jb_created_on date NOT NULL, jb_submitted_on date NULL, jb_finished_on date NULL, jb_notification_on char(1) NOT NULL); CREATE TABLE pr_st_tasks ( ts_oid number(10) PRIMARY KEY, ts_type varchar2(20) NOT NULL, ts_process_count number(3) NULL, ts_parent_oid number(10) FOREIGN KEY REFERENCES pr_st_jobs(jb_oid), 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:
CREATE TABLE pr_st_tasks ( ts_oid number(10) PRIMARY KEY, ts_type varchar2(20) NOT NULL, ts_process_count number(3) NULL, ts_parent_oid number(10) NOT NULL, ts_app_oid number(10) NOT NULL, constraint st_ts_fk1 FOREIGN KEY(ts_parent_oid) REFERENCES pr_st_jobs(jb_oid), 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...