Archive for the ‘Oracle’ Category

Hash table w Oraclu

Marzec 23rd, 2011

Problem prosty, rozwi膮zanie r贸wnie przejrzyste. A wszystko dzi臋ki PL/SQL-owi.

Tak wygl膮da przyk艂adowa deklaracja tabeli:


subtype tvalue is varchar2(1000);
 type thash is table of tvalue index by varchar2;
 hashtab thash;

U偶ycie tabeli hashowej:

hashtab(klucz) :=wartosc;

„ORA-12838: cannot read/modify an object after modifying it in parallel”

Luty 15th, 2011

Niby prosty insert na podstawie selekta:


INSERT /*+ APPEND */ SELECT * FROM test;

A w efekcie mo偶na uzyska膰 brzydki b艂膮d. Jego rozwi膮zanie jest do艣膰 banalne.

Wystarczy zapytanie zakomitowa膰:


COMMIT;

create table as select where rownum, czyli o tworzeniu kopi tabeli z ograniczeniami

Pa藕dziernik 21st, 2010

Czasem w czasie procesu testowania stworzonych procedur lub wi臋kszych zapyta艅 sql pojawia si臋 potrzeba cz臋stego ich testowania. Jednak cz臋sto oryginalne dane, kt贸re mamy przetwarza膰 s膮 zbyt du偶e by testy przeprowadza膰 w trakcie powstawania kodu. Dobrym rozwi膮zaniem tego problemu jest stworzenie kopi tabel z ma艂膮 pr贸bk膮 testow膮 orginalnych danych.

Kod stworzenia kopi tabeli, gdzie n jest zadan膮 ilo艣ci膮 wierszy kopiowanych:


create table tablica_kopia as
 select * from tablica_orginalna
 where rownum <=n;

Select random, czyli jak wyciagna膰 z tabeli losowe rekordy

Pa藕dziernik 16th, 2010

Mia艂em problem jak wyci膮gn膮膰 kilka tysi臋cy losowych rekord贸w z do艣膰 sporej tablicy i zapragn膮艂em znale藕膰 rozwi膮zanie w jednym zapytaniu do bazy danych. Oczywi艣cie dzi臋ki bibliotekom udost臋pnianym przez Oracle takie rozwi膮zanie jest mo偶liwe. Skorzysta艂em z pomocy pakietu dbms_random.

A oto kod gotowego zapytania wyci膮gaj膮cego n losowych rekord贸w z zadanej tabeli:


select * from table_name where row_id in (
select row_id from(
select row_id, dbms_random.value聽 from table_name order by 2)
where rownum<=n);

Odinstalowywanie Oracle 11g z Windowsa

Pa藕dziernik 2nd, 2010

Wbrew pozorom nie jest takie banalne zadanie. Pierwszym krokiem w takim momencie jest wy艂膮czenie bazy. Wystarczy zalogowa膰 si臋 do bazy za pomoc膮 sqlplus jako sysdba i wyda膰 polecenie natychmiastowego zamkni臋cia bazy:

shutdown immediate

Nast臋pnie wielu skieruje swoje kroki do narz臋dzia firmy Oracle zwanego Universal Installer. Jednak jego uruchomienie i pr贸ba odinstalowania ca艂ej bazy za jego pomoc膮 sko艅czy si臋 komunikatem z pro艣b膮 o zastosowanie innego narz臋dzia wywo艂ywanego z linik komend. Narz臋dzie to uruchomimy poleceniem:

C:\ORACLE11g\product\11.2.0\dbhome_1\deinstall>deinstall.bat

Proces deinstalacji bazy Oracle rozpoczyna si臋 od odpowiedzenia na kilka pyta艅 o dok艂adne szczeg贸艂y np. jak膮 instancje usun膮膰. Na ko艅cu powinni艣my zobaczy膰 podobny ekran do poni偶szego, zawieraj膮cego informacje podsumowuj膮ce wykonanego zadania, oraz ewentualne napotkane b艂臋dy.