luni, 5 septembrie 2011

Oracle Validare Rapida pe Insert

O varianta prescurtata pentru validarea existentei unei inregistrari in momentul in care se doreste a se face un insert intr-o tabela:


INSERT INTO tabela
(id, label, status)
SELECT 1, 'label value', 'done'
FROM dual
WHERE not exists (select * from tabela
where tabela.id = 1 and tabela.label =
'label value' and tabela.status = 'done');


In exemplul de mai sus, in cazul in care exista o inregistrare cu valorile pe acre dorm sa le scriem nu se va insera o noua inregistrare, in caz contrar se va insera o inregistrare noua in tabela.

marți, 14 iunie 2011

iar oracle...

Pentru ca sunt nevoita sa lucrez pe masini virtuale si pentru ca am prea putin spatiu pentru "manevre" (a se citi instalari si drepturi) m-am lovit de o problema destul de stupida. Un listener de oracle imi tine ocupat portul 8080 si cand vreau sa pornesc tomcat-ul se plange ca nu poate porni pentru ca cineva ii tine ocupat portul.

Varianta care mi s-a parut mie mai la indemana(poate nu e pentru toata lumea) a fost schimbarea portului la listener, nu de alta, dar nu prea vad ce cauta el pe 8080. Asa ca am gugalit un pic si am gasit urmatoarele:


-- se schimba portul din 8080 in 8081
call dbms_xdb.cfg_update(updateXML(dbms_xdb.cfg_get(), '/xdbconfig/sysconfig/protocolconfig/httpconfig/http-port/text()', 8081));

commit;

EXEC dbms_xdb.cfg_refresh;


Toate astea binenteles dupa ce te-ai logat ca dba. Daca exista in dotare un TCPView sau ceva asemanator, la o examinare "before/after" se observa ca listener-ul s-a mutat cuminte pe portul 8081. Alegerea portului ramane la latitudinea fiecaruia ca aici e chestie de gust/administrare/nevoi etc.