Close

CLOB in – CLOB out -> Grails + SQL

Zdarza mi się w pracy pisać troszkę więcej niż tylko CRUDy.  Pewnego dnia wynikła potrzeba przekazania CLOBa do procedury w SQLu i odebranie kolejnego CLOBa z wyjścia procedury. W Grailsach? Nic prostszego.

Pierwszy problem – stworzenie CLOBa w grailsach. Okazało się, że nie mogę go stworzyć za pomocą new CLOB(). To by było za proste. Do stworzenia CLOBa potrzebuję połączenia z bazą danych (wstrzyknięte – magia), a potem ustawiam mu wartość na pożądanej pozycji (najlepiej na początku). Trzeba wiedzieć, że pozycje w CLOBie numeruje się od 1…

clob in

Wywołanie procedury SQLowej jest dość standardowe:

Pod kolejne ‘?’ będą podstawiane pod kolejne argumenty z tablicy przekazanej jako drugi parametr w wywołaniu funkcji call.

Jako, że na wyjściu procedury też jest CLOB, trzeba jeszcze dorzucić jeden parametr do wywołania funkcji call. To groovy, więc jeśli ostatni parametr jest typu closure to można go wynieść poza nawias:

closure

Podłączam się pod strumień i pobieram text. Korzystam z characterStream żeby nie zgubić unicode’ów. Do tego zabezpieczam się przed nullami, bo bazie nigdy nie można ufać 😉 

Na koniec można zebrać wszystko w jedno, zadeklarować odpowiednie zmienne i otoczyć na wszelki wypadek try/catchem:

clob in – clob out

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: