[FIREBIRD] - DB - v.1.5 - zmienne i petla
jarudzik@wp.pl - 27-01-2007 00:03
[FIREBIRD] - DB - v.1.5 - zmienne i petla
Witam serdecznie
to jest czesc procedury (na potrzeby posta uprosciłem ja) .... BEGIN ACTION_TABLE = 'TEST'; FOR SELECT RF.RDB$FIELD_NAME FIELD_NAME FROM RDB$RELATION_FIELDS RF LEFT JOIN RDB$FIELDS DOMAINS ON (RF.RDB$FIELD_SOURCE = DOMAINS.RDB$FIELD_NAME) WHERE RF.RDB$RELATION_NAME=:ACTION_TABLE ORDER BY RF.RDB$FIELD_POSITION INTO :Field_N DO BEGIN ACTION_V = 'NEW.'||:Field_N; if (:ACTION_V IS NULL) then ACTION_V = '#!'; // mniejsza o ten ACTION_VALUE = ';'||:ACTION_V; END .....
Chodz o to aby W efecie ACTION_VALUE = NEW.KOLUMNA_A';'NEW.KOLUMNA_B';' ITD .... Na razie ACTION_VALUE przyjmuje wartosc ';NEW.KOLUMNA_B' (czyli ostatnia z petli w dodatku nie wartosc zmiennej tylko jej nazwa)
Da sie to jakos w firebirdzie jakos zrobi zrobic ?
Pozdrawiam Rafał
sg - 27-01-2007 00:03
Dnia 26-01-2007 o 16:07:02 <jarudzik@wp.pl> napisał(a):
> Witam serdecznie > > to jest czesc procedury (na potrzeby posta uprosciłem ja) > ... > BEGIN > ACTION_TABLE = 'TEST'; > FOR > SELECT > RF.RDB$FIELD_NAME FIELD_NAME > FROM RDB$RELATION_FIELDS RF > LEFT JOIN RDB$FIELDS DOMAINS ON > (RF.RDB$FIELD_SOURCE = DOMAINS.RDB$FIELD_NAME) > WHERE RF.RDB$RELATION_NAME=:ACTION_TABLE > ORDER BY RF.RDB$FIELD_POSITION INTO :Field_N > DO > BEGIN > ACTION_V = 'NEW.'||:Field_N; > if (:ACTION_V IS NULL) then ACTION_V = '#!'; // mniejsza o ten > ACTION_VALUE = ';'||:ACTION_V; > END > .... > > Chodz o to aby > W efecie ACTION_VALUE = NEW.KOLUMNA_A';'NEW.KOLUMNA_B';' ITD .... > Na razie ACTION_VALUE przyjmuje wartosc ';NEW.KOLUMNA_B' (czyli > ostatnia z petli w dodatku nie wartosc zmiennej tylko jej nazwa) > > Da sie to jakos w firebirdzie jakos zrobi zrobic ? > > Pozdrawiam > Rafał >
napisz to jaśniej, bo wogóle nie wiem o co Ci chodzi
sg - 27-01-2007 00:03
Dnia 26-01-2007 o 19:31:15 sg <alpha@skynet.org.pl_without> napisał(a):
>> Da sie to jakos w firebirdzie jakos zrobi zrobic ? >> >> Pozdrawiam >> Rafał >> > > napisz to jaśniej, bo wogóle nie wiem o co Ci chodzi
a czy to jest Twój dalszy bój z tym logowaniem o które pytałeś się ostatnio?
jarudzik@wp.pl - 27-01-2007 00:03
ok postaram sie ...
1.Mamy tabele TEST z kolumnami powiedzmy
A int B varchar 255 C varchar 255
2. Wykonuje na tej tabeli INSERT 3. W/W pętla FOR .. DO jest częscia triggera ktory przechwytuje nowe dane i wstawia je do tabeli HISTORY w kolumnie HISTORY_VALUE blob
4.Na piechote mozna zrobic to tak
/*.. poczatek triggera , deklaracje zmiennych itp...*/ ACTION_VALUE = NEW.A||';'||NEW.B||';'||NEW.C INSERT INTO HISTORY(HISTORY_VALUE) VALUES (:ACTION_VALUE); /* .. koniec triggera ..*/
5. Poniewaz takich tabel jak TEST mam kilkanascie i na kazda musze załozyc ten trigger. Zmienic musze więc wartość zmiennej ACTION_VALUE ponieważ na innych tabelach sa inne kolumny (inne ich nazwy). Probuje całosc zautomatyzowac i podawac tylko nazwe Tabeli jako parametr. W w/w przykładzie jest to:
.... BEGIN ACTION_TABLE = 'TEST'; ....
6. Nastepnie zapytaniem SELECT pobieram z tabel systemowych nazwy kolumn z tabeli 'TEST' i zrzucam nazwy tych kolumn do zmiennej Field_N
.... FOR SELECT RF.RDB$FIELD_NAME FIELD_NAME FROM RDB$RELATION_FIELDS RF LEFT JOIN RDB$FIELDS DOMAINS ON (RF.RDB$FIELD_SOURCE = DOMAINS.RDB$FIELD_NAME) WHERE RF.RDB$RELATION_NAME=:ACTION_TABLE < ------- tu jest nazwa tabeli ORDER BY RF.RDB$FIELD_POSITION INTO :Field_N <----- tu jest nazwa kolumny ....
7. Nastepnie gubie sie z kolei ja i robie cos takiego .... DO BEGIN ACTION_V = 'NEW.'||:Field_N; ACTION_VALUE = ';'||:ACTION_V;
W efekcie tych operacjach w kolumnie HISTORY_VALUE mam dane
;NEW.C czyli tylko nazwe ostatniej kolumny tabeli test z wyrazem ;NEW.
Zamiast wartosci NEW.A;NEW.B.NEW.C dla przykładu 1;test;costamblabla
Ufff ... :) Mam nadzieje ze jasniej to opisałem Pozdrawiam SG
Rafał
sg - 27-01-2007 00:03
Dnia 26-01-2007 o 20:25:39 <jarudzik@wp.pl> napisał(a):
> 7. Nastepnie gubie sie z kolei ja i robie cos takiego > ... > DO > BEGIN > ACTION_V = 'NEW.'||:Field_N; > ACTION_VALUE = ';'||:ACTION_V; >
może tak:
ACTION_V = 'NEW.'||:Field_N; ACTION_VALUE = ACTION_VALUE || ';'||:ACTION_V;
jarudzik@wp.pl - 27-01-2007 00:03
Tak wojuje z tym juz od poniedziałku Dodam ze IB dla mnie to zupełna nowosc ;/
BTW Dzieki za poprzednie podpowiedzi
PZDR Rafal
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
Firebird - zmiana NULL na NOT NULL
[firebird] Czym =?ISO-8859-2?Q?zast=B1pi=E6_postgresowy_inte?==?ISO-8859-2?Q?rval_=3F?=
Insert do tabeli danymi z innej tabeli Firebird
Insert do tabeli z danych innej tabeli plus dodatkowa wartośćpola (Firebird)
firebird - dostep do roznych baz na podstawie nazwy usera,hasla i adresu IP
=?iso-8859-2?q?Konfiguracja_Firebirda_pod_k=B1tem_wykorzystan ia_pami=EAci?=
=?ISO-8859-2?Q?[firebird]_gdzie_si=EA_podzia=B3y_polskie_literki?=
Re: [Firebird] BDE problem z zapisem konfiguracji pod Windows Vista
=?iso-8859-2?q?firebird_i_triggery_-_logowanie_historii_zmian_zawarto=B6ci?=
=?iso-8859-2?q?[firebird]_-_jak_zastapi=E6_pole_longtext_=3F?=
zanotowane.pldoc.pisz.plpdf.pisz.platanvarne633.opx.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 |
|