Najpierw ogólna wskazówka:wypisz swoją zmienną l_sql
do konsoli za pomocą dbms_output.put_line
lub użyj jakiejś tabeli debugowania, do której możesz ją wstawić. Uważaj także na typ danych tej zmiennej. Jeśli potrzebujesz rozszerzyć SQL, możesz osiągnąć punkt, w którym musisz użyć CLOB
zmienna zamiast varchar2
.
Będziesz musiał podać struktury tabel i dane testowe, jeśli chcesz, aby Twój problem został całkowicie przeanalizowany, dlatego najpierw podam kilka ogólnych wyjaśnień:
Use Generic Column Names
jest ok, jeśli masz stałą, niezmienną ilość kolumn. Ale jeśli kolejność kolumn lub nawet ich ilość może się zmienić, jest to zły pomysł, ponieważ strona wyświetli błąd, jeśli zapytanie da więcej kolumn niż Generic Column Count
Opcja 1:użyj aliasów kolumn w zapytaniu
Ulepsz swoją PL/SQL Function Body returning SQL Query
w taki sposób, że wyświetla pełne nazwy, takie jak:
return 'select 1 as "Your verbose column name", 2 as "Column #2", 3 as "Column #3" from dual';
Wygląda to tak:
Ma to tę wadę, że nazwy kolumn również pojawiają się w ten sposób w projektancie, a APEX zaktualizuje te nazwy kolumn tylko wtedy, gdy ponownie zweryfikujesz funkcję. Będziesz miał trudności z odwołaniem się do kolumny o wewnętrznej nazwie Your verbose column name
w kodzie procesu lub akcji dynamicznej.
Jednak nadal działa, nawet jeśli zmienisz nazwy kolumn bez informowania APEX, na przykład przez zewnętrzne przekazanie PL/SQL Function Body
w rzeczywistą funkcję.
Opcja 2:Użyj niestandardowych nagłówków kolumn
Trochę ukryty, ale jest też opcja całkowicie niestandardowych nagłówków kolumn. Jest prawie na końcu atrybutów stronę regionu raportu.
Tutaj możesz również podać funkcję, która zwraca nazwy Twoich kolumn. Uważaj, aby ta funkcja nie zwracała zapytania SQL, które samo zwraca nazwy kolumn, ale zamiast tego zwraca nazwy kolumn oddzielone dwukropkiem .
Dzięki tej metodzie łatwiej jest zidentyfikować i odnieść się do kolumn w projektancie:
Opcja 3:obie
Wyłącz Ogólne nazwy kolumn, aby zapytanie zwracało nazwy kolumn, które można łatwo zidentyfikować i do których można się odwoływać, oraz użyj custom column headings
funkcja zwraca szczegółowe nazwy dla użytkowników.
Moja osobista opinia
Używam trzeciej opcji w aplikacji produkcyjnej, w której ludzie mogą samodzielnie zmieniać ilość i kolejność kolumn za pomocą elementów wahadłowych na stronie raportu. Zajęło to trochę czasu, ale teraz działa jak urok, jak jakiś dynamiczny PIVOT
bez PIVOT
.