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…
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Wywołanie procedury SQLowej jest dość standardowe:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters