=?ISO-8859-2?Q?Zawarto=B6=E6_tabeli_na_podstawie_warto=B6?==? ISO-8859-2?Q?ci_w_innej?=
annakin - 21-06-2007 00:03
=?ISO-8859-2?Q?Zawarto=B6=E6_tabeli_na_podstawie_warto=B6?==? ISO-8859-2?Q?ci_w_innej?=
Witam
Proszę o wskazówkę jak osiągnąć to co niżej. Mam tabele A: ( id serial, primary key, przedmiot_id integer references przedmioty(id), rodzaj_zajec_id integer references rodzaje_zajec(id), rok_akademicki_id integer references rok_akademicki(id) )
Czyli jest to tabela przedmiotów w konkretnym roku akademickim. Przy czym w tej tabeli każdy przedmiot może wystąpić tyle razy ile jest rodzajów zajęć (ćwiczenia, fakultet, wykład itp.)
Teraz potrzebuje mieć tabele B gdzie będę posiadał dokładnie te same dane co w tabeli A, z tym że przedmioty maja występować pojedynczo plus zdefiniowane dla nich inne wartości jeszcze. Wartości tych nie mogę zdefiniować w tabeli A bo są to wartości ogólne dla przedmiotu a nie dla przedmiotu i rodzaju zajęć.
Szczerze mówiąc nie wiem jak sie za to zabrać. Będę wdzięczny za jakieś wskazówki.
-- annakin
Adam - 21-06-2007 00:03
annakin napisał(a): > Witam > > Proszę o wskazówkę jak osiągnąć to co niżej. > Mam tabele A: > ( > id serial, primary key, > przedmiot_id integer references przedmioty(id), > rodzaj_zajec_id integer references rodzaje_zajec(id), > rok_akademicki_id integer references rok_akademicki(id) > ) > > Czyli jest to tabela przedmiotów w konkretnym roku akademickim. Przy > czym w tej tabeli każdy przedmiot może wystąpić tyle razy ile jest > rodzajów zajęć (ćwiczenia, fakultet, wykład itp.) > > > Teraz potrzebuje mieć tabele B gdzie będę posiadał dokładnie te same > dane co w tabeli A, z tym że przedmioty maja występować pojedynczo plus > zdefiniowane dla nich inne wartości jeszcze. Wartości tych nie mogę > zdefiniować w tabeli A bo są to wartości ogólne dla przedmiotu a nie dla > przedmiotu i rodzaju zajęć. > > Szczerze mówiąc nie wiem jak sie za to zabrać. Będę wdzięczny za jakieś > wskazówki. > create table XXXXX as select ...............
Pozdr Adam
annakin - 21-06-2007 00:03
Adam pisze: > annakin napisał(a): >> Witam >> >> Proszę o wskazówkę jak osiągnąć to co niżej. >> Mam tabele A: >> ( >> id serial, primary key, >> przedmiot_id integer references przedmioty(id), >> rodzaj_zajec_id integer references rodzaje_zajec(id), >> rok_akademicki_id integer references rok_akademicki(id) >> ) >> >> Czyli jest to tabela przedmiotów w konkretnym roku akademickim. Przy >> czym w tej tabeli każdy przedmiot może wystąpić tyle razy ile jest >> rodzajów zajęć (ćwiczenia, fakultet, wykład itp.) >> >> >> Teraz potrzebuje mieć tabele B gdzie będę posiadał dokładnie te same >> dane co w tabeli A, z tym że przedmioty maja występować pojedynczo >> plus zdefiniowane dla nich inne wartości jeszcze. Wartości tych nie >> mogę zdefiniować w tabeli A bo są to wartości ogólne dla przedmiotu a >> nie dla przedmiotu i rodzaju zajęć. >> >> Szczerze mówiąc nie wiem jak sie za to zabrać. Będę wdzięczny za >> jakieś wskazówki. >> > create table XXXXX > as select ...............
Jasne, w ten sposób mogę sobie utworzyć tabele B. Tylko co gdy tabela A zostanie zmodyfikowana? Nie mogę dropowac tabeli B i tworzyć sobie jej na nowo bo mogę mieć już w niej powprowadzane dane do tych dodatkowych kolumn. Potrzebuje tutaj czegoś bardziej 'skomplikowanego' co po każdej operacji na tabeli A zsynchronizuje ja z tabela B bez utraty danych. Dopuszczam wykasowanie przedmiotu z tabeli B wtedy gdy nie występuje w żadnej postaci rodzaju zajęć w tabeli A.
-- annakin
=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 21-06-2007 00:03
annakin wrote: > Witam > > Proszę o wskazówkę jak osiągnąć to co niżej. > Mam tabele A: > ( > id serial, primary key, > przedmiot_id integer references przedmioty(id), > rodzaj_zajec_id integer references rodzaje_zajec(id), > rok_akademicki_id integer references rok_akademicki(id) > ) > > Czyli jest to tabela przedmiotów w konkretnym roku akademickim. Przy > czym w tej tabeli każdy przedmiot może wystąpić tyle razy ile jest > rodzajów zajęć (ćwiczenia, fakultet, wykład itp.) > > > Teraz potrzebuje mieć tabele B gdzie będę posiadał dokładnie te same > dane co w tabeli A, z tym że przedmioty maja występować pojedynczo plus > zdefiniowane dla nich inne wartości jeszcze. Wartości tych nie mogę > zdefiniować w tabeli A bo są to wartości ogólne dla przedmiotu a nie dla > przedmiotu i rodzaju zajęć.
Jak te same? Tabela A to jedynie tabela powiązań. Poza tym żadnych danych w niej nie ma!
> Szczerze mówiąc nie wiem jak sie za to zabrać. Będę wdzięczny za jakieś > wskazówki.
Szczerze mówiąc nie wiem, gdzie widzisz problem. Choć "ciężko" idzie Ci opis co chcesz zrobić, zasadniczo zmierzasz w dobrym kierunki.
-- P.M.
annakin - 21-06-2007 00:03
Paweł Matejski pisze: > annakin wrote: >> Witam >> >> Proszę o wskazówkę jak osiągnąć to co niżej. >> Mam tabele A: >> ( >> id serial, primary key, >> przedmiot_id integer references przedmioty(id), >> rodzaj_zajec_id integer references rodzaje_zajec(id), >> rok_akademicki_id integer references rok_akademicki(id) >> ) >> >> Czyli jest to tabela przedmiotów w konkretnym roku akademickim. Przy >> czym w tej tabeli każdy przedmiot może wystąpić tyle razy ile jest >> rodzajów zajęć (ćwiczenia, fakultet, wykład itp.) >> >> >> Teraz potrzebuje mieć tabele B gdzie będę posiadał dokładnie te same >> dane co w tabeli A, z tym że przedmioty maja występować pojedynczo plus >> zdefiniowane dla nich inne wartości jeszcze. Wartości tych nie mogę >> zdefiniować w tabeli A bo są to wartości ogólne dla przedmiotu a nie dla >> przedmiotu i rodzaju zajęć. > > Jak te same? Tabela A to jedynie tabela powiązań. Poza tym żadnych danych w niej > nie ma! > >> Szczerze mówiąc nie wiem jak sie za to zabrać. Będę wdzięczny za jakieś >> wskazówki. > > Szczerze mówiąc nie wiem, gdzie widzisz problem. Choć "ciężko" idzie Ci opis co > chcesz zrobić, zasadniczo zmierzasz w dobrym kierunki. >
ok. z pomocą przyszedł trigger. wydaje sie działać. zamieszczę dla potomnych na wszelki wypadek.
#v+
CREATE OR REPLACE FUNCTION xxx() RETURNS trigger AS $$
DECLARE id integer; BEGIN
IF tg_op = 'DELETE' THEN SELECT INTO id id_ptr FROM aaa WHERE tok = OLD.tok AND przedmiot = OLD.przedmiot; IF NOT FOUND THEN DELETE FROM bbb WHERE tok = OLD.tok AND przedmiot = OLD.przedmiot; END IF; END IF;
IF tg_op = 'UPDATE' THEN SELECT INTO id id_ptr FROM aaa WHERE tok = OLD.tok AND przedmiot = OLD.przedmiot; IF NOT FOUND THEN DELETE FROM bbb WHERE tok = OLD.tok AND przedmiot = OLD.przedmiot; END IF;
SELECT INTO id id_ptr FROM bbb WHERE tok = NEW.tok AND przedmiot = NEW.przedmiot; IF NOT FOUND THEN INSERT INTO bbb VALUES (DEFAULT, NEW.tok, NEW.przedmiot, 0); END IF; END IF;
IF tg_op = 'INSERT' THEN SELECT INTO id id_ssp FROM bbb WHERE tok = NEW.tok AND przedmiot = NEW.przedmiot; IF NOT FOUND THEN INSERT INTO bbb VALUES (DEFAULT, NEW.tok, NEW.przedmiot, 0); END IF; END IF;
RETURN NULL;
END $$ LANGUAGE plpgsql;
------------------------
CREATE TRIGGER ttt AFTER INSERT OR UPDATE OR DELETE on aaa FOR EACH ROW EXECUTE PROCEDURE xxx();
#v-
-- annakin
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[MS SQL 2005] =?windows-1250?Q?Ilo=9C=E6_wiersz=F3w_w_zbiorze_wynikowym?=
[MSSQL 2000] czas wykonywania instrukcji INSERT - czy zalezy od ilosci danych w tabeli?
[MSSQL] Jak uj?c w tabeli [ID usera] (zamiast tekstu) zuwierzytelniania NT?
[mysql 4.0.24] INSERT do tabeli z automatyczną inkrementacją wartości pola.
[MsSQL]Jaka blokada tabeli dla pobrania następnego nr faktury
[ms sql 2000] Replikacja - zmiana typu kolumny w tabeli ?
Nazwa tabeli jako parametr do procedury dla SQL2005 Server - jakprzekazac?
[MySQL] Kopiowanie jednej tabeli do drugiej z dodatkowymi zmiennymi
[sybase] Jak w sprawdzić strukturę obiektu (tabeli) w Interactive SQL ???
[mysql] Procedura z przekazywaną nazwą tabeli jako parametr
zanotowane.pldoc.pisz.plpdf.pisz.pladwokat.keep.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|