[PGSQL] Strumienie np. dla ostrzeżeń w procedurach Pl Pg SQL
William - 13-03-2006 11:24
[PGSQL] Strumienie np. dla ostrzeżeń w procedurach Pl Pg SQL Jak elegancko rozwiązać taki oto problem:
Jest procedura napisana w Pl Pg SQL, która operuje kursorem na pewnym zbiorze.
Dla każdego z rekordów jest wykonywana pewna operacja, która może się albo powieść, albo zakończyć wyjatkiem albo powieść, ale generowane jest ostrzeżenie o np. niekompletności pewnych danych. Niepowodzenie wykonania operacji na jednym rekordzie jest nie ma wpływu na powodzenie i sens wykonania operacji na kolejnym rekordzie w kolejnej iteracji.
Problemem jest zaś jak gromadzić wewnątrz procedury informację o ostrzeżeniach i wyjątkach a na zakończenie przekazać je do aplikacji ? W innych językach użyłbym np. strumieni. Jak zgrabnie zrealizować to w Pl Pg SQL-u ?
Robert Grabowski - 13-03-2006 11:24
William wrote: > Jak elegancko rozwiązać taki oto problem: > > Jest procedura napisana w Pl Pg SQL, która operuje kursorem na pewnym > zbiorze. > > Dla każdego z rekordów jest wykonywana pewna operacja, która może się albo > powieść, albo zakończyć wyjatkiem albo powieść, ale generowane jest > ostrzeżenie o np. niekompletności pewnych danych. Niepowodzenie wykonania > operacji na jednym rekordzie jest nie ma wpływu na powodzenie i sens > wykonania operacji na kolejnym rekordzie w kolejnej iteracji. > > Problemem jest zaś jak gromadzić wewnątrz procedury informację o > ostrzeżeniach i wyjątkach a na zakończenie przekazać je do aplikacji ? W > innych językach użyłbym np. strumieni. Jak zgrabnie zrealizowaćto w Pl Pg > SQL-u ? > >
Zdefniuj funkcję z parametrami out i za ich pomocą zwracaj ostrzeżenia i wyjątki ... w aplikacji wywołają ją:
select * from funkcja();
pozdrawiam Robert Grabowskik
=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 13-03-2006 11:24
William wrote: > Jak elegancko rozwiązać taki oto problem: > > Jest procedura napisana w Pl Pg SQL, która operuje kursorem na pewnym > zbiorze. > > Dla każdego z rekordów jest wykonywana pewna operacja, która może się albo > powieść, albo zakończyć wyjatkiem albo powieść, ale generowane jest > ostrzeżenie o np. niekompletności pewnych danych. Niepowodzenie wykonania > operacji na jednym rekordzie jest nie ma wpływu na powodzenie i sens > wykonania operacji na kolejnym rekordzie w kolejnej iteracji. > > Problemem jest zaś jak gromadzić wewnątrz procedury informację o > ostrzeżeniach i wyjątkach a na zakończenie przekazać je do aplikacji ? W > innych językach użyłbym np. strumieni. Jak zgrabnie zrealizować to w Pl Pg > SQL-u ?
raise notice - tyle, że nie podlega transakcji co w zależności od potrzeb może być zaletą albo wadą. :) http://www.postgresql.org/docs/8.1/i...-messages.html
Pozostaje jeszcze kwestia strony klienckiej, ale tego tematu nie rozgryzałem.
-- P.M.
max - 13-03-2006 11:24
William napisał(a): > Jak elegancko rozwiązać taki oto problem: > > Jest procedura napisana w Pl Pg SQL, która operuje kursorem na pewnym > zbiorze. > > Dla każdego z rekordów jest wykonywana pewna operacja, która może się albo > powieść, albo zakończyć wyjatkiem albo powieść, ale generowane jest > ostrzeżenie o np. niekompletności pewnych danych. Niepowodzenie wykonania > operacji na jednym rekordzie jest nie ma wpływu na powodzenie i sens > wykonania operacji na kolejnym rekordzie w kolejnej iteracji. > > Problemem jest zaś jak gromadzić wewnątrz procedury informację o > ostrzeżeniach i wyjątkach a na zakończenie przekazać je do aplikacji ? W > innych językach użyłbym np. strumieni. Jak zgrabnie zrealizowaćto w Pl Pg > SQL-u ? > > Jezlie jest to baza danych to albo RAISE NOTICE i wysylasz komunikat do aplikacji z komunikatem albo INSERT do TABELI i zrobić jakis mechanizm logowania ;)
Ja stosowałem RAISE NOTICE i działało np. w petli która miała kilka tys. wysylalem stan licznika do klienta aby mial pasek postepu, u Ciebie bedzie tak samo tylko ze informacja bedzie o bledach.
William - 13-03-2006 11:24
> raise notice - tyle, że nie podlega transakcji co w zależności od potrzeb może > być zaletą albo wadą. :) > http://www.postgresql.org/docs/8.1/i...-messages.html >
Ładne, ale jak się dostać do tych notyfikacji przez aplikację kliencką ?
=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 13-03-2006 11:25
William wrote: >>raise notice - tyle, że nie podlega transakcji co w zależności od potrzeb > > może > >>być zaletą albo wadą. :) >> > > http://www.postgresql.org/docs/8.1/i...-messages.html > > > Ładne, ale jak się dostać do tych notyfikacji przez aplikację kliencką ?
Pytaj dostawcy Twojej biblioteki. Zakładam, że libpq ma, bo psql potrafi to obsłużyć, a jest zwykłym klientem. Ja nigdy nie używałem bezpośrednio libpq, a i nie cisnęło mnie, żeby się do tego dobrać.
-- P.M.
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
jak to =?ISO-8859-2?Q?zrobi=E6=2E=2E=2E=3F_TSQL_sql_server?==?ISO-8859-2?Q?_?=
Jak =?windows-1250?Q?pobra=E6_szacowan=B9_wielko=9C=E6_zbiory_wy nikowego_w_MS?==?windows-1250?Q?_SQL_2005=3F?=
=?iso-8859-2?Q?=5BMS_SQL=5D_Czy_mo=BFna_wywo=B3a=E6_funkcje_t ylko_raz_dla?==?iso-8859-2?Q?_ca=B3ego_zbioru_=BCr=F3d=B3owego=3F?=
[MSSQL] =?ISO-8859-2?Q?zgodno=B6ci_z_licencjami_Microsoft_?==?ISO-8859-2?Q?SQL_Server?=
=?ISO-8859-2?Q?k=B3opot_z_uruchomieniem_MY_SQL_dla_C?==?ISO-8859-2?Q?MS_i_CRM_na_Fedora_Core_3?=
[MSSQL] ACCESS - SQL =?ISO-8859-2?Q?B=B3ad_w_konwersji_lic?==?ISO-8859-2?Q?zb?=
=?iso-8859-2?Q?=5Bmssql=5D_Zapytania_rekurencyjne__-_czy_sk=B3adnia_sql?==?iso-8859-2?Q?_co=B6_takiego_przewiduje_=3F?=
=?iso-8859-2?Q?=5BMySQL=5D_Co_minimalnie_potrzebne_zeby_mie=E 6_klienta_My?==?iso-8859-2?Q?SQL_na_Linuxie=3F?=
[newbie] MS SQL - praca =?ISO-8859-2?Q?jednocze=B6nie_na_2_?==?ISO-8859-2?Q?bazach_=28linkowanie_=3F=29?=
ms sql server - =?ISO-8859-2?Q?domy=B6lny_format_kolumn_ty?==?ISO-8859-2?Q?pu_datetime?=
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 |
|