Обобщена функция за конкатенация на низове в Oracle
Програмиране
Не е толкова често, но редовно трябва да използвам SQL, за да обединя всички редове в селекция някъде по следния начин:
Проблемът е, че нито стандартният SQL, нито Oracle (доскоро) нямаха функция като CONCAT. Какво може да се направи?
Потребителска функция
Можете да напишете своя собствена PL/SQL обобщена функция. Не че изобщо не беше забавно, но кодът трябва да бъде надлежно надраскан.
Основният проблем при този подход е SQL обвързването с вашата база данни. Ако дадете своя SQL на някого, трябва да му дадете и функцията.
Оказва се, че Oracle има функция, наречена WM_CONCAT, която прави точно това, което трябва да направи:
Той дори поддържа DISTINCT. Това е добре, но тази функция не се поддържа официално от Oracle и СТРАШНИ ГРЪБОВЕ. Той може безшумно да върне NULL. Може би изведнъж (точно какво изведнъж, всичко е работило вчера, но днес планът се е променил) започне да дава грешки, например ORA-22922. Така че не използвайте тази функция!