[postgresql] uaktualnienie tabeli ?ród?owej
maciek - 17-06-2007 00:16
[postgresql] uaktualnienie tabeli ?ród?owej
Witam - mam tak:
CREATE TABLE jednostki1 ( id_jm serial NOT NULL, nazwa_jednostki1 character(10) ) WITHOUT OIDS; --bo tak jest i tego zmieni? nie mog?
CREATE TABLE jednostki2 ( id_jm serial NOT NULL, nazwa_jednostki2 character(10), id_jednostki1 integer ) WITHOUT OIDS; -- j.w.
Przyk?adowe dane: insert into jednostki1(id_jm, nazwa_jednostki1) values (nextval('jednostki1_id_jm_seq'), 'szt'); insert into jednostki1(id_jm, nazwa_jednostki1) values (nextval('jednostki1_id_jm_seq'), 'kpl'); insert into jednostki1(id_jm, nazwa_jednostki1) values (nextval('jednostki1_id_jm_seq'), 'para'); insert into jednostki1(id_jm, nazwa_jednostki1) values (nextval('jednostki1_id_jm_seq'), 'kg');
insert into jednostki2(id_jm, nazwa_jednostki2,id_jednostki1) values (nextval('jednostki2_id_jm_seq'), 'szt', 1); insert into jednostki2(id_jm, nazwa_jednostki2,id_jednostki1) values (nextval('jednostki2_id_jm_seq'), 'kpl',2); insert into jednostki2(id_jm, nazwa_jednostki2,id_jednostki1) values (nextval('jednostki2_id_jm_seq'), 'para',3); insert into jednostki2(id_jm, nazwa_jednostki2,id_jednostki1) values (nextval('jednostki2_id_jm_seq'), 'kg',4); insert into jednostki2(id_jm, nazwa_jednostki2,id_jednostki1) values (nextval('jednostki2_id_jm_seq'), 'nowa1',NULL); insert into jednostki2(id_jm, nazwa_jednostki2,id_jednostki1) values (nextval('jednostki2_id_jm_seq'), 'nowa1',NULL);
W za?o?eniu jednostki1.id_jm = jednostki2.id_jednostki1
i teraz robie tak: CREATE FUNCTION jednostki() RETURNS void AS $BODY$ BEGIN for wpis in select * from jednostki2 where id_jednostki1 is null loop
BEGIN ; insert into jednostki1(id_jm, nazwa_jednostki1) select nextval('jednostki1_id_jm_seq'), nazwa_jednostki2 from jednostki2 where id_jednostki1 is null ;
-- tu chce wstawi? cos co mi uaktualni tabel? jednostki2 warto?ci? -- currval('jednostki1_id_jm_seq') dla odpowieeniego wpisu do tabeli jednostki1 -- -pytanie: jak i co ??
END ; end loop;
RETURN ; END; $BODY$ LANGUAGE plpgsql ;
Mile widziana wszelka pomoc Mak
-- Wys?ano z serwisu OnetNiusy: http://niusy.onet.pl
=?UTF-8?B?RmlsaXAgUmVtYmlhxYJrb3dza2k=?= - 17-06-2007 00:16
maciek wrote at 2007-05-30 16:53: > Witam - mam tak: > > CREATE TABLE jednostki1 > ( > id_jm serial NOT NULL, > nazwa_jednostki1 character(10) > ) > WITHOUT OIDS; --bo tak jest i tego zmieniÄ? nie mogÄ? no i co w tym z??ego? > > CREATE TABLE jednostki2 > ( > id_jm serial NOT NULL, > nazwa_jednostki2 character(10), > id_jednostki1 integer > ) > WITHOUT OIDS; -- j.w.
wsp????czujÄ? :)
czy m??g??by?? zaspokoiÄ? mojÄ? ciekawo??Ä? i powiedzieÄ? po jakÄ? cholerÄ? taka struktura?
[cut]
> W za??o??eniu jednostki1.id_jm = jednostki2.id_jednostki1 > > i teraz robie tak: > CREATE FUNCTION jednostki() RETURNS void AS $BODY$ > BEGIN > for wpis in select * from jednostki2 where id_jednostki1 is null loop > > BEGIN ; > insert into jednostki1(id_jm, nazwa_jednostki1) > select nextval('jednostki1_id_jm_seq'), > nazwa_jednostki2 > from jednostki2 > where id_jednostki1 is null ; wstawiasz n rekord??w dla ka??dego przej??cia tej pÄ?tli - a chyba chodzi??o o jeden? > > -- tu chce wstawiÄ? cos co mi uaktualni tabelÄ? jednostki2 warto??ciÄ? > -- currval('jednostki1_id_jm_seq') dla odpowieeniego wpisu do tabeli jednostki1 > -- -pytanie: jak i co ?? > > END ; > end loop; > > RETURN ; > END; > $BODY$ LANGUAGE plpgsql ; > > > Mile widziana wszelka pomoc > Mak
for wpis in select * from jednostki2 where id_jednostki1 is null for update loop new_jednostki1_id := nextval('jednostki1_id_jm_seq'); insert into jednostki1( id_jm, nazwa_jednostki1 ) select new_jednostki1_id, wpis.nazwa_jednostki2; update jednostki2 set id_jednostki1 = new_jednostki1_id where id_jm = wpis.id_jm; end loop;
=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 17-06-2007 00:16
maciek wrote: > Witam - mam tak: > > CREATE TABLE jednostki1 > ( > id_jm serial NOT NULL, > nazwa_jednostki1 character(10) > ) > WITHOUT OIDS; --bo tak jest i tego zmieni? nie mog? > > CREATE TABLE jednostki2 > ( > id_jm serial NOT NULL, > nazwa_jednostki2 character(10), > id_jednostki1 integer > ) > WITHOUT OIDS; -- j.w. > > Przyk?adowe dane: > insert into jednostki1(id_jm, nazwa_jednostki1) values > (nextval('jednostki1_id_jm_seq'), 'szt');
Po co nextval. Masz kolumn? serial i zostaw to postgresowi.
> i teraz robie tak: > CREATE FUNCTION jednostki() RETURNS void AS $BODY$ > BEGIN > for wpis in select * from jednostki2 where id_jednostki1 is null loop > > BEGIN ; > insert into jednostki1(id_jm, nazwa_jednostki1) > select nextval('jednostki1_id_jm_seq'), > nazwa_jednostki2 > from jednostki2 > where id_jednostki1 is null ;
Po pierwszym przej?ciu p?tli chcesz za?atwi? wszystkie?
> -- tu chce wstawi? cos co mi uaktualni tabel? jednostki2 warto?ci? > -- currval('jednostki1_id_jm_seq') dla odpowieeniego wpisu do tabeli jednostki1 > -- -pytanie: jak i co ??
UPDATE, tylko rób jeden insert na p?tle, albo u?yj z??czenia po nazwie_jednostki, o ile jest unikalna.
> END ; > end loop; > > RETURN ; > END; > $BODY$ LANGUAGE plpgsql ;
-- P.M.
mak_23@poczta.onet.pl - 17-06-2007 00:16
> maciek wrote at 2007-05-30 16:53: > > Witam - mam tak: > > > > CREATE TABLE jednostki1 > > ( > > id_jm serial NOT NULL, > > nazwa_jednostki1 character(10) > > ) > > WITHOUT OIDS; --bo tak jest i tego zmieni� nie mog� > no i co w tym z?�ego? > > > > CREATE TABLE jednostki2 > > ( > > id_jm serial NOT NULL, > > nazwa_jednostki2 character(10), > > id_jednostki1 integer > > ) > > WITHOUT OIDS; -- j.w. > > wsp???�czuj� :) > > czy m??g?�by?� zaspokoi� moj� ciekawo?�� i powiedzie� po jak� choler� taka struktura?
??czenie dwóch systemów - jeden wysya?a dane do drugiego,drugi musi zna? ( do innych celów) id_jednostki1 - takie powi?zanie
> > > [cut] > > > W za?�o??eniu jednostki1.id_jm = jednostki2.id_jednostki1 > > > > i teraz robie tak: > > CREATE FUNCTION jednostki() RETURNS void AS $BODY$ > > BEGIN > > for wpis in select * from jednostki2 where id_jednostki1 is null loop > > > > BEGIN ; > > insert into jednostki1(id_jm, nazwa_jednostki1) > > select nextval('jednostki1_id_jm_seq'), > > nazwa_jednostki2 > > from jednostki2 > > where id_jednostki1 is null ; > wstawiasz n rekord??w dla ka??dego przej?�cia tej p�tli - a chyba chodzi?�o o jeden? > > > > -- tu chce wstawi� cos co mi uaktualni tabel� jednostki2 warto?�ci� > > -- currval('jednostki1_id_jm_seq') dla odpowieeniego wpisu do tabeli jednostki1 > > -- -pytanie: jak i co ?? > > > > END ; > > end loop; > > > > RETURN ; > > END; > > $BODY$ LANGUAGE plpgsql ; > > > > > > Mile widziana wszelka pomoc > > Mak > > > for wpis in select * from jednostki2 where id_jednostki1 is null for update > loop > new_jednostki1_id := nextval('jednostki1_id_jm_seq'); > insert into jednostki1( id_jm, nazwa_jednostki1 ) select new_jednostki1_id, wpis.nazwa_jednostki2; > update jednostki2 set id_jednostki1 = new_jednostki1_id where id_jm = wpis.id_jm; > end loop; > > > proste, skuteczne :) dzi?ki Mak
-- Wys?ano z serwisu OnetNiusy: http://niusy.onet.pl
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[PostgreSQL] - jak =?ISO-8859-2?Q?zabezpieczy=E6_interesy_tw?==?ISO-8859-2?Q?=F3rcy_systemu_=3F=3F=3F?=
postgresql - int/int
postgresql Select count(*) czy raczej Select count(ID)
[PostgreSQL] jak =?ISO-8859-2?Q?pobra=E6_warto=B6=E6_zwracan?==?ISO-8859-2?Q?=B1_przez_funkcj=EA=3F?=
[postgresql] INSERT OR UPDATE - jak =?ISO-8859-2?Q?b=EAdzie_na?==?ISO-8859-2?Q?jlepiej=3F?=
[postgresql] kilka =?ISO-8859-2?Q?rekord=F3w_subquery_jako_?==?ISO-8859-2?Q?string?=
[PostgreSQL] Jak =?ISO-8859-2?Q?po=B3=B1czy=E6_funkcje_z_w?==?ISO-8859-2?Q?idokiem?=
Postgres - replikcja master-master
Dopasowanie do "najlepszego" dopasowania :) [ PostgreSQL]
Problemy z =?ISO-8859-2?Q?instalacj=B1_PostgreSQL_na_syste?==?ISO-8859-2?Q?mach_Windows?=
zanotowane.pldoc.pisz.plpdf.pisz.pllunadance.htw.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 |
|