Archive for the ‘Bazy Danych’ 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;

MySQL + PHP = problem z kodowaniem

Listopad 2nd, 2010

Mam plik zakodowany w UTF8 i baz臋 danych w MySQL kt贸ra ma ustawione kodowanie tabel na utf8_polish_ci. Z pomoc膮 php chc臋 j膮 wype艂ni膰. Niestety mimo wielu pr贸b otrzymywa艂em zamiast polskich liter krzaki…

Rozwi膮zaniem by po nawi膮zaniu po艂膮czenia zadeklarowanie u偶ywanego kodowania, w taki spos贸b:


$dbh->query('SET NAMES "utf8"');

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);