ďťż
 
NEW z parametrem ďťż
 
NEW z parametrem
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

NEW z parametrem



Tomsiak - 01-06-2006 00:03
NEW z parametrem
  Proboje wykonac w trigerze NEW. z parametrem ktory chcialbym pobrac z
zmiennej tablicowej problem w tym że postgres nie chce wykonac
odwolania do podstawionej wartosci np. dla wykonania pierwszej iteracji
czyli NEW.imie zamiast tego wykonuje NEW.param. Moze istnieje jakas
funkcja w postgre?
przyklad:

tab=ARRAY ['imie', 'drugie_imie', 'nazwisko'];

FOR i IN 1..3
LOOP
param=tab[i];
zmienna='NEW.'||param;
EXECUTE ('INSERT INTO historia(id, nowa_wartosc) VALUES
(1,'''||zmienna||''');');
END LOOP;

Tomsiak





=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 02-06-2006 00:44

  Tomsiak wrote:
> Proboje wykonac w trigerze NEW. z parametrem ktory chcialbym pobrac z
> zmiennej tablicowej problem w tym że postgres nie chce wykonac
> odwolania do podstawionej wartosci np. dla wykonania pierwszej iteracji
> czyli NEW.imie zamiast tego wykonuje NEW.param. Moze istnieje jakas
> funkcja w postgre?
> przyklad:
>
> tab=ARRAY ['imie', 'drugie_imie', 'nazwisko'];
>
> FOR i IN 1..3
> LOOP
> param=tab[i];
> zmienna='NEW.'||param;
> EXECUTE ('INSERT INTO historia(id, nowa_wartosc) VALUES
> (1,'''||zmienna||''');');
> END LOOP;

Nie da się plpgsql. Ale można to zrobic w plperl.

--
P.M.




tomsiak - 02-06-2006 00:44

 
Paweł Matejski napisał(a):
> Tomsiak wrote:
> > Proboje wykonac w trigerze NEW. z parametrem ktory chcialbym pobrac z
> > zmiennej tablicowej problem w tym że postgres nie chce wykonac
> > odwolania do podstawionej wartosci np. dla wykonania pierwszej iteracji
> > czyli NEW.imie zamiast tego wykonuje NEW.param. Moze istnieje jakas
> > funkcja w postgre?
> > przyklad:
> >
> > tab=ARRAY ['imie', 'drugie_imie', 'nazwisko'];
> >
> > FOR i IN 1..3
> > LOOP
> > param=tab[i];
> > zmienna='NEW.'||param;
> > EXECUTE ('INSERT INTO historia(id, nowa_wartosc) VALUES
> > (1,'''||zmienna||''');');
> > END LOOP;
>
> Nie da się plpgsql. Ale można to zrobic w plperl.
>
> --
> P.M.

Trudno a czy jest jakis inny sposob na monitorowanie zmian w bazie? W
jaki sposob mozna to jeszcze robic?

Pozdrawiam




=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 02-06-2006 00:44

  Pisz w temacie o jaką baze chodzi!

tomsiak wrote:
> Paweł Matejski napisał(a):
>
>>
>>Nie da się plpgsql. Ale można to zrobic w plperl.
^^^^^^^^^
> Trudno a czy jest jakis inny sposob na monitorowanie zmian w bazie? W
> jaki sposob mozna to jeszcze robic?

--
P.M.





tomsiak - 02-06-2006 00:44

 
Paweł Matejski napisał(a):
> Pisz w temacie o jaką baze chodzi!
>
> tomsiak wrote:
> > Paweł Matejski napisał(a):
> >
> >>
> >>Nie da się plpgsql. Ale można to zrobic w plperl.
> ^^^^^^^^^
> > Trudno a czy jest jakis inny sposob na monitorowanie zmian w bazie? W
> > jaki sposob mozna to jeszcze robic?
>
> --
> P.M.

chce przechowywac historie zmian niektorych kolumn w bazie postgresql
ver. 8.0.3, tak jak pisalem chcialem to zrobic za pomoca trigera
ktoremu jako paramtr podawalbym nazwy kolumn. Jesli dobrze doczytalem
to uzywanie jezyka zewnetrznego np pljava nie jest za bardzo wydajne i
lepiej pisac w plpgsql czy to prawda?




Robert Osowiecki - 02-06-2006 00:44

  tomsiak napisał(a):
> chce przechowywac historie zmian niektorych kolumn w bazie postgresql
> ver. 8.0.3, tak jak pisalem chcialem to zrobic za pomoca trigera
> ktoremu jako paramtr podawalbym nazwy kolumn. Jesli dobrze doczytalem
> to uzywanie jezyka zewnetrznego np pljava nie jest za bardzo wydajne i
> lepiej pisac w plpgsql czy to prawda?

W plpgsql tak się nie da. Na twoim miejscu pobawiłbym się w
"metaprogramowanie": napisał procedurę, która pobiera nazwę tabeli i
listę pól i tworzy dla niej odpowiednie triggery. Nie sprawdzałem pod
tym kątem możliwości plperla, ale jeśli w perlu się nie obracasz na
codzień, to nie ma co zaczynać od pisania w nim triggerów w psql-u.

R.




Marcin Mańk - 02-06-2006 00:44

 
"Robert Osowiecki" <robson@rassun.art.pl> wrote in message
news:e5mili$lmm$1@opal.futuro.pl...
> tomsiak napisał(a):
> > chce przechowywac historie zmian niektorych kolumn w bazie postgresql
> > ver. 8.0.3, tak jak pisalem chcialem to zrobic za pomoca trigera
> > ktoremu jako paramtr podawalbym nazwy kolumn. Jesli dobrze doczytalem
> > to uzywanie jezyka zewnetrznego np pljava nie jest za bardzo wydajne i
> > lepiej pisac w plpgsql czy to prawda?
>
> W plpgsql tak się nie da. Na twoim miejscu pobawiłbym się w
> "metaprogramowanie": napisał procedurę, która pobiera nazwę tabeli i
> listę pól i tworzy dla niej odpowiednie triggery. Nie sprawdzałem pod
> tym kątem możliwości plperla, ale jeśli w perlu się nie obracasz na
> codzień, to nie ma co zaczynać od pisania w nim triggerów w psql-u.
>

W plpgsql da się.
http://www.postgresql.org/docs/8.1/s...-EXECUTING-DYN

W połączeniu z tym, że procedurę triggera da się parametryzować:

CREATE TRIGGER _ctele_logtrigger_30
AFTER INSERT OR UPDATE OR DELETE
ON machines
FOR EACH ROW
EXECUTE PROCEDURE _ctele.logtrigger('_ctele', 30, 'kv');

(takie triggery robi slony).

Pozdrawiam
Marcin Mańk




Robert Osowiecki - 02-06-2006 00:44

  Marcin Mańk napisał(a):
> W plpgsql da się.
> http://www.postgresql.org/docs/8.1/s...-EXECUTING-DYN
>
> W połączeniu z tym, że procedurę triggera da się parametryzować:
>
> CREATE TRIGGER _ctele_logtrigger_30
> AFTER INSERT OR UPDATE OR DELETE
> ON machines
> FOR EACH ROW
> EXECUTE PROCEDURE _ctele.logtrigger('_ctele', 30, 'kv');
>
> (takie triggery robi slony).

Fajne, tylko że trigger "dedykowany" będzie działał sprawniej (EXECUTE-y
są wolnijesze bo za zapytania muszą być za każdym razem parsowane) - no
ale dla rzadko zmieniających się danych, to rzeczywiście jest lepsze
rozwiązanie.

R.




=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 02-06-2006 00:44

  Marcin Mańk wrote:
> "Robert Osowiecki" <robson@rassun.art.pl> wrote in message
> news:e5mili$lmm$1@opal.futuro.pl...
>
>>tomsiak napisał(a):
>>
>>>chce przechowywac historie zmian niektorych kolumn w bazie postgresql
>>>ver. 8.0.3, tak jak pisalem chcialem to zrobic za pomoca trigera
>>>ktoremu jako paramtr podawalbym nazwy kolumn. Jesli dobrze doczytalem
>>>to uzywanie jezyka zewnetrznego np pljava nie jest za bardzo wydajne i
>>>lepiej pisac w plpgsql czy to prawda?
>>
>>W plpgsql tak się nie da. Na twoim miejscu pobawiłbym się w
>>"metaprogramowanie": napisał procedurę, która pobiera nazwę tabeli i
>>listę pól i tworzy dla niej odpowiednie triggery. Nie sprawdzałem pod
>>tym kątem możliwości plperla, ale jeśli w perlu się nie obracasz na
>>codzień, to nie ma co zaczynać od pisania w nim triggerów w psql-u.
>>
>
>
> W plpgsql da się.
> http://www.postgresql.org/docs/8.1/s...-EXECUTING-DYN

A udało Ci sie dynamicznie dobrać do pola NEW? :)

--
P.M.




=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 02-06-2006 00:44

  tomsiak wrote:
>
> chce przechowywac historie zmian niektorych kolumn w bazie postgresql
> ver. 8.0.3, tak jak pisalem chcialem to zrobic za pomoca trigera
> ktoremu jako paramtr podawalbym nazwy kolumn. Jesli dobrze doczytalem
> to uzywanie jezyka zewnetrznego np pljava nie jest za bardzo wydajne i
> lepiej pisac w plpgsql czy to prawda?

Nie robiłem testów, ale nie sądzę, żebyś miał się czym przejmować.
Za to faktycznie możesz mieć pewien problem, jeśli jeszcze nie znasz
perla, choć sam kod takiego triggera nie powinien być skomplikowany.

--
P.M.




herakles - 02-06-2006 00:44

  Tomsiak wrote:

> Proboje wykonac w trigerze NEW. z parametrem ktory chcialbym pobrac z
> zmiennej tablicowej problem w tym że postgres nie chce wykonac
> odwolania do podstawionej wartosci np. dla wykonania pierwszej iteracji
> czyli NEW.imie zamiast tego wykonuje NEW.param. Moze istnieje jakas
> funkcja w postgre?
> przyklad:
>
> tab=ARRAY ['imie', 'drugie_imie', 'nazwisko'];
>
> FOR i IN 1..3
> LOOP
> param=tab[i];
> zmienna='NEW.'||param;
> EXECUTE ('INSERT INTO historia(id, nowa_wartosc) VALUES
> (1,'''||zmienna||''');');
> END LOOP;
>
> Tomsiak

po co taka kombinacja

if PG_RELNAME='t' then

if PG_OP='UPDATE' then
if new....!=old.... OR ... then
insert into zz_hist_t(who,when,op, .....) values(2,now(),PG_OP,NEW...);
end if;
elsif PG_OP='INSERT' then
insert into zz_hist_t(who,when,op, .....) values(2,now(),PG_OP,NEW...);
elsif PG_OP='DELETE'
insert into zz_hist_t(who,when,op, .....) values(2,now(),PG_OP,OLD...);
end if;
elsif TG_RELNAME='.....

do tego robisz malutki sofcik który dla każdej z tabeli zbuduje ci jedną
funkcje do całego tego syfu, i zalteruje tabelki historyczne o brakujące
pola, przy jakimś alterze na bazie, pozatym nie wszystko przecież trzymasz
w historii, zazwyczaj jest to ok 10 tabel.




tomsiak - 02-06-2006 00:44

 
Paweł Matejski napisał(a):
> tomsiak wrote:
> >
> > chce przechowywac historie zmian niektorych kolumn w bazie postgresql
> > ver. 8.0.3, tak jak pisalem chcialem to zrobic za pomoca trigera
> > ktoremu jako paramtr podawalbym nazwy kolumn. Jesli dobrze doczytalem
> > to uzywanie jezyka zewnetrznego np pljava nie jest za bardzo wydajne i
> > lepiej pisac w plpgsql czy to prawda?
>
> Nie robiłem testów, ale nie sądzę, żebyś miał się czym przejmować.
> Za to faktycznie możesz mieć pewien problem, jeśli jeszcze nie znasz
> perla, choć sam kod takiego triggera nie powinien być skomplikowany.
>
> --
> P.M.

ostatecznie stworze tablice z zmiennymi do ktorej pozniej bede sie
odwolywac, dla kazdej tabelki trzeba bedzie zrobic osobna funkcje
trigger ale to nie problem.
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    [MySQL] =?ISO-8859-2?Q?Odwr=F3cenie_domy=B6lnego_order_by=2C?==?ISO-8859-2?Q?_ale_bez_parametru=2E?= =?iso-8859-2?q?[Mysql_5=2E0]_Wywo=B3ywanie_procedury_jako_parametr_funkcji?= =?iso-8859-2?q?Nazwa_Tabeli_jako_parametr_w_procedurze_sk=B3a dowanej?= Nazwa tabeli jako parametr do procedury dla SQL2005 Server - jakprzekazac? Wacom UD 1212-R Digitizer II Ultra Pad jakie ma parametry Jak stworzyś odnośnik do strony www z wyliczonym wcześniej parametrem. Funkcja z =?ISO-8859-2?Q?tabel=B1_jako_parametrem_?= Sql Serv 2000 - String z lista parametrem funkcji ? ORA-02095: Podany parametr inicjalizacyjny nie moze byc modyfikowany [mysql] Procedura z przekazywaną nazwą tabeli jako parametr
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • marcelq.xlx.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

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com