Monday, June 15th, 2009

" insert mode, nospiežot Ctrl+d uzrakstām dbms_output.put_line('');
:imap <C-D> dbms_output.put_line('');


upd. html tagi...
(Leave a comment)

Monday, May 25th, 2009

ORA

CREATE MATERIALIZED VIEW ... WITH PRIMARY KEY... SELECT ... FROM my_table@my_link

Fakts 1 - Dev vidē strādā, pie klienta izgāžas ar "tabulai nav primārās atlsēgas".
Fakts 2 - primārās atslēgas nav ne Dev vidē, ne pie klienta.
Jautājums - kāpēc gļuku nenoķēra Dev vidē?
Atbilde/Fakts 3 - ir atšķirības starp 10.2.0.3 un 10.2.0.4
(Leave a comment)

Friday, March 20th, 2009

1Z0-147

63/66
(Leave a comment)

Monday, March 2nd, 2009

ORA-WTF

Agrāk mums bija katrai atskaitei sava procedūra.
Tad tas tika pārrakstīts/uzlabots, un tagad mums ir viena procedūra visām atskaitēm. Ja vajag izveidot atskaiti izsaucam "create_report(id, 'REPORT_X')". Superīgi, vai ne?
Diemžēl rezultāts izskatās šādi:

IF pirmā_atskaite THEN
-- 1k ridas pirmajai atskaitei
ELSIF otrā atskaite THEN
-- 1k rindas otrai atskaitei
...
END IF;

-- 20 rindas kopīgas visām atskaitēm

IF pirmā_atskaite THEN
-- 1k rindas pirmajai atskaitei
ELSIF ...
(3 comments | Leave a comment)

Friday, February 6th, 2009

ignorēt mazās izmaiņas

Ir reizes, kad lielos VARCHAR2 laukos tiek veiktas minimālas izmaiņas. Tādas izmaiņas varētu nelogot.
Uzrakstīju Lēvenšteina attāluma noteikšanu iekš PL/SQL.
Varbūt kāds var pārrakstīt, lai atmiņas izmantošana būtu O(n), nevis O(n^2)? Wikipedia raksta, ka tas esot izdarāms.

... tālāk ... )
(Leave a comment)

Tuesday, February 3rd, 2009

piečakarēt oracle reports 6

Prasība - "ja pēdējā lapā ieiet tikai papildinošais teksts, tad tajā tomēr jārāda arī tabulas virsraksts + tabulas pēdējā rinda.

Risinājums:
Tā kā reporti šādu "pretdabisku" prasību neatbalsta, nākas izmantot kvazi-hakeru paņēmienus.
1) Sadalām tabulas avota SELECT divās daļās:
1.1) pirmā daļa atlasa visus datus izņemot pēdējo rindu
1.2) otrā daļa atlasa pēdējo rindu
2) Esošajam repeating frame apakšā pieliekam vēl vienu repeating frame (varbūt pietiktu arī ar parasto frame, nepamēģināju), kuram par avotu norādām pēdējās rindiņas select.
3) Jauno repeating frame norādām kā atdalītu no anchor objekta.
4) Papildinošo tekstu enkuro ar jauno rāmi un norāda kā neatdalāmu.
(1 comment | Leave a comment)

Friday, January 30th, 2009

don't do drugs

declare
v_file_number my_view.file_number%type;
begin
/* some code */

if v_file_number is not null then
v_file_number := ', '||v_file_number;
end if;

/* some other code */
end;
/
(Leave a comment)

Thursday, December 4th, 2008

ora

Kad kādu laiku biju nesekmīgi mēģinājis izpildīt vienībtestus un regulāri dabūjis atpakaļ kļūdu "Buffer overflow", atklāju, ka ir iespējams aizliegt dbms_output.put_line arī no pl/sql.

DBMS_OUTPUT.DISABLE;

Un nekāds trešās puses rīks ar savām dīvainībām vairs netraucēs.
(Leave a comment)

Thursday, November 20th, 2008

dialogs

- Ja pakotnes procedūrai vajag pielikt jaunu parametru, to var pielikt:
a) jebkur
b) beigās
c) jaunus parametrus pielikt nedrīkst
- Nu, beigās
- Un kā ir pakotnē X?
- Dirsā...


kopsavilkums - labi, ka tas bija OUT parametrs un citi tur padeva konstantes.
(Leave a comment)

Friday, October 10th, 2008

INSERT veiktspēja

Pēc neliela iekšēja brainstorm sanāca sekojoši varianti:

1) Atmest liekos indeksus, ja tādi ir.
2) Normalizācija (unikālos laukus kā parent, pārējo kā child iekš dažādām tabulām ar dažādiem indeksiem pēc vajadzības).
3) Particionēšana un indeksu pārveidošana tā, ka konkrētās partīcijās tie ir tukši.
4) Hash partīcijas, jo tās paralelizējot insertu, bet tikai tad, ja tas ir AS SELECT.
(2 comments | Leave a comment)

Tuesday, October 7th, 2008

interesants fakts

Ja child tabula ir lokota ekskluzīvi, tad cita sesija
1) parent tabulā nevar dzēst nevienu rakstu (arī tādu, uz kuru nav atsauces)
2) parent tabulā nevar ievietot nevienu rakstu.
(Leave a comment)

Friday, October 3rd, 2008

a mums resursu daudz (wtf)

select nvl( (select name from B where id = a.b_id)
,nvl((select name from A where id = a_from.id)
,(select reg_name from A where id = a_from.id))
)
from a a_from
(4 comments | Leave a comment)

Wednesday, September 24th, 2008

kaut kas jauns un jauks

Ilustrējam atšķirību starp RANK un DENSE_RANK.

SELECT dense_rank(3) within group (order by v2 )
FROM (
select 1 as v2 from dual
union all
select 2 as v2 from dual
union all
select 2 as v2 from dual
union all
select 4 as v2 from dual
union all
select 5 as v2 from dual);

SELECT rank(3) within group (order by v2 )
FROM (
select 1 as v2 from dual
union all
select 2 as v2 from dual
union all
select 2 as v2 from dual
union all
select 4 as v2 from dual
union all
select 5 as v2 from dual);
(2 comments | Leave a comment)

Thursday, September 18th, 2008

vēl viens piemērs (ora wtf)

Uzdevums:
Create a report listing different product categories from table Products.

Pareizā atbilde:
SELECT DISTINCT product_no, prod_category
FROM products;
(Leave a comment)

par sertifcēšanos :(

Gatavojoties sertifikācijas eksāmenam, paņēmu iesildīšanās jautājumus. Neapgāžams fakts - testa kvalitāte rada iespaidu par tā noderīgumu.

Piemērs (pareizā atbilde ir tikai viena).

Q: Which of the following statements will you use to create a view name my_view?

A. CREATE my_view VIEW... (acīmredzami nepareizi)
B. CREATE VIEW my_view... (darbojas, esmu izmantojis)
C. CREATE OR REPLACE VIEW my_view... (darbojas, esmu izmantojis)
D. VIEW my_view... (acīmredzami nepareizi)


Izstrādes vidē (9i) man nostrādā abi varianti.
Apmācību vidē (8i) arī nostrādā abi varianti.

Analīzē ir apraksts: "Option C is incorrect. The OR REPLACE clause is used to modify a view. It creates a new (modified) view, which replaces the old view."
(Leave a comment)

Monday, August 4th, 2008

orawtf

Ir nepatīkami dabūt šādu uz DWH, ja (x) ir MV primārās atslēgas kolona.

ORA-12008: error in materialized view refresh path ORA-00001: unique constraint (x) violated

Versija:

... tālāk ... )
(Leave a comment)

Wednesday, July 30th, 2008

orawtf

Pusi dienas cīnījos pret ORA-01722: invalid number

Rezultāti zemāk.

... tālāk ... )
(Leave a comment)

Thursday, January 31st, 2008

dienas bēda

WHERE nosacījumos nevar lietot sequence.currval.
(2 comments | Leave a comment)

Wednesday, November 7th, 2007

Pasakiet, kāds, lūdzu - KĀDA VELNA PĒC TAS STRĀDĀ???!!!

SELECT
change_date AS change_date
,date_from AS date_from
,date_to AS date_to
,cgp_id
FROM (select 1 as ctr_id
,to_date('20070101','yyyymmdd') as change_date
,to_date('20071106','yyyymmdd') as date_from
,1 as cgp_id
,null as date_to
from dual
) cgp_new
JOIN (select 1 as id, 'C' as code from dual) cgp
ON (cgp_new.cgp_id = cgp.id)
JOIN (select 1 as ctr_id
,to_date('20070201','yyyymmdd') as change_date
,to_date('20071106','yyyymmdd') as date_from
,2 as cgp_id
,to_date('20071105235959','yyyymmddhh24miss') as date_to
from dual
) cgp_old
ON ( cgp_old.ctr_id = cgp_new.ctr_id
AND cgp_old.date_to = cgp_new.date_from - 1/(24*60*60) -- intervāli nepārklājas
)
JOIN (select 2 as id, 'D' as code from dual) cgp2
ON (cgp2.id = cgp_old.cgp_id)
/
(7 comments | Leave a comment)

Tuesday, October 30th, 2007

ORA turpinājums

Kā pie mums saka - AR EXEPCIJU PA SEJU! PAMĒĢINI IGNORĒT TO, MAZAISRAKAR!!!
(Leave a comment)