[Oracle PL/SQL] problem z execute immediate
ms - 20-10-2007 00:01
[Oracle PL/SQL] problem z execute immediate
Witam
Podczas wykonywania tego bloku program wisi na poleceniu execute immendiate. Moglby mi ktos pomoc i powiedziec w czym jest problem, bo mnie juz szlak trafia :) Dodam, ze samo zapytanie wykoywane np: w SQL+ wykonuje sie natychmiast bez zadnych problemow.
as c_QuerySql varchar2(2000); n_Index binary_integer;
begin c_QuerySql:='select /*+ ordered index(o dot_ow_nhd) */ count(1) '|| 'from (select nip from dot_rdx_nip) n, dot_ow o '|| 'where substr(replace(o.nip,:1,:2),1,10)=n.nip '|| 'and rownum=1';
execute immediate c_QuerySql into n_Index using '-', '';
raise_application_error(-20000,'Poszlo'); end;
Z gory dzieki za pomoc lub slyszne sugestie. Mikolaj
ms - 20-10-2007 00:01
Po wielu eksperymentach doszedlem do wniosku, iz nie jest uwzgledniania podpowiedz, a zapytanie wykonywane jest jako full-scan. Czy to mozliwe ??
Pozdrawiam Mikolaj
szaman - 20-10-2007 00:02
ms pisze: > Po wielu eksperymentach doszedlem do wniosku, iz nie jest uwzgledniania > podpowiedz, a zapytanie wykonywane jest jako full-scan. > Czy to mozliwe ?? >
Jak najbardziej w końcu to tylko hint a nie instruction.
v$sql_plan jest to widok w którym znajdziesz faktyczny plan wykonania.
Obowiązkowa lektura to http://www.oracle-base.com/articles/misc/Outlines.php
dap997 - 21-10-2007 00:00
ms wrote: > Po wielu eksperymentach doszedlem do wniosku, iz nie jest uwzgledniania > podpowiedz, a zapytanie wykonywane jest jako full-scan. > Czy to mozliwe ??
Mozliwe, ale wlacz po prostu trace i zobacz co jest w plikach wynikowych tkprof.
dap
=?ISO-8859-2?Q?S=B3awomir_Szysz=B3o?= - 21-10-2007 00:00
Dnia Fri, 19 Oct 2007 13:58:40 +0200, "ms" <mikolaj@NO_SPAM_tenbit.pl> wklepał(-a):
>Witam > >Podczas wykonywania tego bloku program wisi na poleceniu execute immendiate. >Moglby mi ktos pomoc i powiedziec w czym jest problem, bo mnie juz szlak >trafia :) >Dodam, ze samo zapytanie wykoywane np: w SQL+ wykonuje sie natychmiast bez >zadnych problemow. > >as > c_QuerySql varchar2(2000); > n_Index binary_integer; > > >begin > c_QuerySql:='select /*+ ordered index(o dot_ow_nhd) */ count(1) '|| > 'from (select nip from dot_rdx_nip) n, dot_ow o '|| > 'where substr(replace(o.nip,:1,:2),1,10)=n.nip '|| > 'and rownum=1'; > > execute immediate c_QuerySql into n_Index using '-', ''; > > raise_application_error(-20000,'Poszlo'); >end;
Hint ordered potrafi różne cuda wyczyniać np. zamiast przeglądać 10 MB danych, z tym hintem wychodzi 1 GB.
Zrób najpierw indeks funkcyjny na dot_ow.nip:
create index dot_ow_nip_i on dot_ow(replace(nip,'-','')) compute statistics;
no i jeszcze na dot_rdx_nip.nip i potem zacznij działać. -- 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
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
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?=
=?ISO-8859-2?Q?=5BOT=5D_Zdany_egzamin_Oracle_1Z0-007_a?==?ISO-8859-2?Q?_brak_informacji_na_stronie_Prometric_-_czy?==?ISO-8859-2?Q?_co=B6_nie_tak=3F?=
jak to =?ISO-8859-2?Q?zrobi=E6=2E=2E=2E=3F_TSQL_sql_server?==?ISO-8859-2?Q?_?=
[oracle] czy da =?ISO-8859-2?Q?si=EA_z_poziomu_procedury_?==?ISO-8859-2?Q?zrobi=E6_kopi=EA_zapasow=B1=3F?=
[MSSQL2000] Problem z =?ISO-8859-2?Q?tabel=B1/indeksem/zapytanie?==?ISO-8859-2?Q?m_czy_b=B3=B1d_w_bazie_danych=2E=2E=2E?=
[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?=
zanotowane.pldoc.pisz.plpdf.pisz.plnawschodzie.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 |
|