Faisons un petit test:
Le résultat est le suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 begin if '' is null then dbms_output.put_line(''''''||'NULL'); else dbms_output.put_line(''''''||'NOT NULL'); end if; if ' ' is null then dbms_output.put_line(''' '''||' NULL'); else dbms_output.put_line(''' '''||'NOT NULL'); end if; end;
--> Voila la différence
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 ''NULL ' 'NOT NULL
après c'est la condition WHILE v_itmref_lst <> v_itmref_lst_new qui ne marche plus car on ne fait pas de <> sur des chaines null sinon le résultat est toujours faux.
Après juste une remarque, j'ai fait mon exemple rapidement et j'ai donc utilisé la fonction la plus simple que j'avais sous la main: WM_CONCAT qui pour moi marche très bien mais il faut savoir qu'elle n'est pas supportée par Oracle:
Si tu était en 11g je t'aurais dis d'utiliser LISTAGG.Note that WM_CONCAT is undocumented and unsupported by Oracle, meaning it should not be used in production systems. The LISTAGG function, which can produce the same output as WM_CONCAT is both documented and supported by Oracle
Je t'invite à regarder ce lien pour en savoir plus :
http://www.oracle-base.com/articles/...techniques.php
C'est sûr! Mais existe-t-il vraiment une façon de bien écrire une fonction?Oui il y en a plusieurs manières pour mal écrire une fonction.
Partager