Oracle i pole ktorego zawartoscia jest wynik funkcji
Darek - 21-04-2006 00:27
Oracle i pole ktorego zawartoscia jest wynik funkcji
Potrzebuje zrobic w Oracle cos na ksztalt indeksu na funkcji. W Oracle mozna zrobic cos takiego: create index my_idx on myTable(upper(some_column));
Zapewne Oracle gdzies w prywatnej strukturze robi w tym wypadku extra kolumne gdzie przechowuje wynik funkcji dla kazdego rekordu. A ja potrzebuje zrobic cos podobnego ale na jawnie zadeklarowanej kolumnie funkcyjnej. Tabela
create table testTable ( col1 varchar(120) not null )
Chcialbym teraz dolozyc kolumne 'col2', ktora bedzie przechowywala wynik jakiejs funkcji, zaleznej od 'col1'. Mozna to zrobic triggerem, ktory zrobi col2=funkcja(col1) A mozna jakos w samej definicji 'create table' lub 'alter table' ? Cos jak w Ms SQLServer alter table testTable add col2 as UPPER(col1)
Podobnie mozna to tez zrobic w DB2 (z inna skladnia). A co z Oracle?
=?ISO-8859-2?Q?Micha=B3?= Kuratczyk - 21-04-2006 00:27
Darek wrote: > Chcialbym teraz dolozyc kolumne 'col2', ktora bedzie przechowywala > wynik jakiejs funkcji, zaleznej od 'col1'. Mozna to zrobic triggerem, > ktory zrobi > col2=funkcja(col1) > A mozna jakos w samej definicji 'create table' lub 'alter table' ? AFAIK masz do dyspozycji trzy mechanizmy: - trigger (pełna elastyczność) - indeks funkcyjny (do wyszukiwania po wartościach pochodnych) - widok (jeśli zależy Ci, żeby zwykły SELECT t.* zwracał wartości pierwotne i pochodne)
Przy okazji ciekawy artykuł wokół tego tematu: http://dizwell.com/main/index.php?op...d=112&id=nofbi
-- Michał Kuratczyk
Darek - 21-04-2006 00:27
Czyli w moim przypadku pozostaje jednak chyba tylko trigger. Potrzebuje uzywac wyniku funkcji w zapytaniu, tyle ze ten sam kod 'select' powinien efektywnie dzialac w kilku bazach danych (db2, oracle, sql server, postgres). db2 i sql server pozwalaja latwo zdefiniowac derived column, ktora moge sobie sam poindeksowac. Oracle idzie niby dalej ale rozwiazanie wymaga db specific zmian. A zatem trigger i we wszystkich bazach indeksy na derived column.
Dzieki
=?ISO-8859-2?Q?Micha=B3?= Kuratczyk - 21-04-2006 00:27
Darek wrote: > ten sam kod 'select' powinien efektywnie dzialac w kilku bazach danych > (db2, oracle, sql server, postgres). To se ne da. :-> Jak chcesz, to próbuj - powodzenia, ale IMO to nie ma sensu. Chyba, że wydajność ma być tylko akceptowalna, a nie bardzo dobra. Do otrzymania maksymalnej wydajności konieczne jest dokładne zrozumienie zasad działania danej bazy i wykorzystywanie jej mechanizmów. A różne bazy różnie działają i siłą rzeczy optymalne rozwiązanie na jednej będzie nieoptymalne na innej.
Jak ktoś kupuje np. Oracle, to oczekuje (słusznie), że software będzie wykorzystywał to co baza oferuje. Jeśli nie, to jest to dla niego strata pieniędzy.
-- Michał Kuratczyk
William - 22-04-2006 00:12
A czy nie jest tak, ze jesli masz kolumne X i stworzysz indeks funkcyjny UPPER(X) w Oracle to zapytanie SELECT UPPER( X ) samo automatycznie z niego skorzysta ?
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?=
=?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?=
[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"..?=
zanotowane.pldoc.pisz.plpdf.pisz.plchinska-zupka.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 |
|