Blog > Komentarze do wpisu
Oracle pusty string - coś, czego nie wiedziałem

Może niektórym wyda się to trywialne, ale sam o tym nie wiedziałem. Oracle traktuje pusty string, jako wartość NULL, co jeśli się o tym nie wie/nie pamięta, może prowadzić to dziwnego zachowania kodu :)



Pracowałem nad funkcją, która musiała na podstawie przekazanego typu i ciągu wejściowego stworzyć na wyjściu string będący polaczeniem ich obu. Zadanie trywialne. Moje pierwsze podejście pokazuje poniższy kod (zakomentowana cześć), poniżej niezakomentowane jej już poprawne rozwiązanie wykorzystujące IS NULL.




FUNCTION f_typespecificlinenote (
   ps_type           VARCHAR2,
   ps_linenote       VARCHAR2
IS
   vs_linenote         VARCHAR2(50) := '';
BEGIN

   /*
      ...
Super skomplikowany, tajny kod generujący line note na postawie przekazanego typu :)
...
   */
   
   /* to nie dziala, NVL moznaby tu uzyc z innym – nie pustym stringiem --
   IF NVL(ps_linenote, '') != '' AND NVL(vs_linenote, '') != '' THEN
      vs_linenote := vs_linenote || ',';
   END IF;
   */

   -- ok dziala
   IF ps_linenote IS NOT NULL AND vs_linenote IS NOT NULL THEN
      vs_linenote := vs_linenote || ',';
   END IF;
  
   RETURN SUBSTR(vs_linenote || ps_linenote, 1, 50);   --max 50 znakow.

END;




Okazuje się, że początkowa inicjalizacja nie jest w tym wypadku konieczna:

 

linie:

 

vs_linenote         VARCHAR2(50) := '';



można zastąpić przez:

 

vs_linenote         VARCHAR2(50);




wtorek, 03 kwietnia 2012, m0rt1m3r

Related Posts Plugin for WordPress, Blogger...

Polecane wpisy

Komentarze
Gość: killserv, 217.6.199.*
2012/04/03 13:56:21
no tez siek kiedys zdziwilem ze:
ls_var varchar2(100) := '';
daje w efekcie "ls_var is null"
-
2012/04/04 00:04:15
Na pewno ma gdzieś jeszcze w kodzie podobnego babola, ale dopóki działa nie ruszam :)




PowerBuilder Tetris
D - Tetris



Programowanie iOS

C# ToolBox

SQL / TSQL / PLSQL ToolBox

Linux / Unix ToolBox





Zaprzyjaznione Strony

Sprite Bandits

Cake Time