UPDATE tabname SET * = ? - Oracle vs Informix
jakejake@gazeta.pl - 27-07-2006 01:59
UPDATE tabname SET * = ? - Oracle vs Informix
Witam
W Informixie mam zdanie UPDATE tabname SET * = $zmienna i to dziala (zmienna jest struktura zawierajaca pola tablicy). Jak zapisac to w Oraclu bez wymieniania kolumn - chce uzywac tego dynamicznie dla roznych tablic? Czy w ogole sie da? Gwiazdka nie dziala - oczekuje nazwy kolumny.
Sławomir Szyszło - 27-07-2006 02:00
Dnia 26 Jul 2006 05:39:15 -0700, jakejake@gazeta.pl wklepał(-a):
>Witam > >W Informixie mam zdanie UPDATE tabname SET * = $zmienna i to dziala >(zmienna jest struktura zawierajaca pola tablicy). >Jak zapisac to w Oraclu bez wymieniania kolumn - chce uzywac tego >dynamicznie dla roznych tablic? Czy w ogole sie da? Gwiazdka nie dziala >- oczekuje nazwy kolumny.
Można to zrobić, ale w PL/SQL:
1. create table test1 (id number not null primary key, desc1 varchar2(200) not null, desc2 varchar2(200) );
2. Wstawiamy rekordy o wartościach: (1, 'A') (2, 'B') (3, 'C')
3. Aktualizujemy rekordy 1-3 DECLARE TYPE id_tab IS TABLE OF test1.id%TYPE; TYPE test1_tab IS TABLE OF test1%ROWTYPE; t_id id_tab := id_tab(); t_tab test1_tab := test1_tab(); BEGIN -- przygotowanie danych w tabeli pl/sql FOR i IN 1 .. 3 LOOP t_id.extend; t_tab.extend; t_id(t_id.last) := i; -- tabela "licznikowa" t_tab(t_tab.last).id := i; -- tabela właściwa t_tab(t_tab.last).desc1 := 'update na = ' || To_Char(i); t_tab(t_tab.last).desc2 := 'update na = ' || To_Char(i); END LOOP;
FORALL i IN t_tab.first .. t_tab.last UPDATE test1 SET ROW = t_tab(i) WHERE id = t_id(i); END;
4. SELECT * FROM TEST1; -- Sławomir Szyszło mailto:slaszysz@poczta.onet.pl Primus inter FAQires & Grand Inquisitor no.0 of pl.comp.bazy-danych FAQ pl.comp.bazy-danych http://www.dbf.pl/faq/ Archiwum http://groups.google.com/groups?grou...mp.bazy-danych
jakejake@gazeta.pl - 29-07-2006 01:07
Sławomir Szyszło napisał(a):
> Można to zrobić, ale w PL/SQL: > > 1. > create table test1 (id number not null primary key, > desc1 varchar2(200) not null, > desc2 varchar2(200) > ); > > 2. Wstawiamy rekordy o wartościach: > (1, 'A') > (2, 'B') > (3, 'C') > > 3. Aktualizujemy rekordy 1-3 > DECLARE > TYPE id_tab IS TABLE OF test1.id%TYPE; > TYPE test1_tab IS TABLE OF test1%ROWTYPE; > t_id id_tab := id_tab(); > t_tab test1_tab := test1_tab(); > BEGIN > -- przygotowanie danych w tabeli pl/sql > FOR i IN 1 .. 3 LOOP > t_id.extend; > t_tab.extend; > t_id(t_id.last) := i; -- tabela "licznikowa" > t_tab(t_tab.last).id := i; -- tabela właściwa > t_tab(t_tab.last).desc1 := 'update na = ' || To_Char(i); > t_tab(t_tab.last).desc2 := 'update na = ' || To_Char(i); > END LOOP; > > FORALL i IN t_tab.first .. t_tab.last > UPDATE test1 > SET ROW = t_tab(i) > WHERE id = t_id(i); > END; > > 4. SELECT * FROM TEST1;
Nie, odpada. To jest program w sqlc, ktory dziala zarowno pod informixem i oraclem. Krotko mowiac musze przetlumaczyc te instrukcje na oraclowa. Chyba nie pozostaje nic innego jak spreparowac zdanie z wymienieniem wszystkich kolumn.
dap - 30-07-2006 00:45
> Nie, odpada. To jest program w sqlc, ktory dziala zarowno pod > informixem i oraclem. > Krotko mowiac musze przetlumaczyc te instrukcje na oraclowa. > Chyba nie pozostaje nic innego jak spreparowac zdanie z wymienieniem > wszystkich kolumn.
Moim zdaniem lepiej wersje dla Informixa i Oracla, czas na to poświecony zwróci się czasie wykonywania tych poleceń. Najgorsze są instrukcje działające tak samo wolno w każdej bazie :)
dap
-- ,= ,-_-. =. gnu.org ((_/)o o(\_)) polanski.biz `-'(. .)`-' xoops.pl \_/
jakejake@gazeta.pl - 30-07-2006 00:45
dap napisał(a): > > Nie, odpada. To jest program w sqlc, ktory dziala zarowno pod > > informixem i oraclem. > > Krotko mowiac musze przetlumaczyc te instrukcje na oraclowa. > > Chyba nie pozostaje nic innego jak spreparowac zdanie z wymienieniem > > wszystkich kolumn. > > Moim zdaniem lepiej wersje dla Informixa i Oracla, czas na to poświecony > zwróci się czasie wykonywania tych poleceń. Najgorsze są instrukcje > działające tak samo wolno w każdej bazie :) >
Tak by bylo najlepiej, ale aplikacja ma kilka milionow linii kodu i ponad tysiac plikow zrodlowych, wiec poprawianie specjalnie dla oracla i osobno dla informixa raczej odpada. Musi byc tlumacznie w locie.
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
Oracle, SQL, PL/SQL. Jak =?ISO-8859-2?Q?napisa=E6_zapytanie=2C?==?ISO-8859-2?Q?_kt=F3re_zwr=F3ci_nazw=EA_atrybutu=2C_kt=F3reg o?==?ISO-8859-2?Q?_warto=B6ci_spe=B3niaj=B1_zadany_warunek?=
Oracle 19g +Insert +Insert +Insert...
[oracle] zapytanie dynamiczne z =?ISO-8859-2?Q?=22dynamiczn=B1_?==?ISO-8859-2?Q?nazw=B1_tabeli=22?=
[Oracle] jak =?ISO-8859-2?Q?ograniczy=E6_pami=EA=E6_dla_se?==?ISO-8859-2?Q?rwera=3F?=
[oracle] czy da =?ISO-8859-2?Q?si=EA_z_poziomu_procedury_?==?ISO-8859-2?Q?zrobi=E6_kopi=EA_zapasow=B1=3F?=
[oracle 10g] czy =?ISO-8859-2?Q?mo=BFna_wy=B3=B1czy=E6_wszys?==?ISO-8859-2?Q?tkie_wi=EAzy_w_schemacie=3F?=
MSSQL Express czy Oracle Express
=?iso-8859-2?q?[oracle]_Jak_sprawdzi=E6_wielko=B6=E6_tabeli_=3F=3F?=
=?ISO-8859-2?Q?Poszukjue_ksi=B1=BFki_"Oracle_?= =?ISO-8859-2?Q?optymalizacja_wydajno=B6ci"..?=
[Oracle] =?ISO-8859-2?Q?=A3=B1czenie_wierszy_z_zapytania_?==?ISO-8859-2?Q?w_jeden_string?=
zanotowane.pldoc.pisz.plpdf.pisz.pllisinski.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 |
|