APEX - PL-Funktion für Standardbelegung von select-Lists

Hintergrund:
APEX-Select-Listen sollen mit einem bestimmten Wert initialisiert werden. Da die zugrundeliegenden DIM-Tabellen
manuell gepflegt werden, muss die entsprechende ID dynamisch bestimmt werden. -> Dies übernimmt diese Funktion.

Es können grundsätzlich a) EINE Zeile oder b) keine Zeile (oder Fehler) gefunden werden.
Für a) wird die ID des Eintrags zurückgegeben, wodurch APEX den entsprechenden Eintrag anzeigt.
Bei b) wird -1 geliefert. Die select-List muss -1 als Null-Werte erkennen und dann z.B. '- auswählen -' anzeigen

APEX-Einbindung für die select-List
- unter Default Value den Aufruf eintragen
Bsp.:
<Paketname.>get_lov_id(
'Wiedervorlage',
'dim_status',
'status',
'status_key',
'and AKTIONSTYP = 'S' and sysdate between GUELTIG_VON and GUELTIG_BIS'
);
- als Default Value Type: PL/SQL Expression wählen


-- Author : SCHMIFA
-- Created : 23.11.2010 09:25:06
-- Purpose : ID zu einem Wert für eine LOV suchen
function get_LOV_ID -- Purpose : ID zu einem Wert für eine LOV suchen
(
p_Inhalt in varchar2, -- Text, nach dem gesucht werden soll
p_Tabelle in varchar2, -- Tabelle in der gesucht werden soll
p_Suchspalte in varchar2, -- Spalte in der gesucht werden soll
p_ID_Spalte in varchar2, -- Spalte aus der die ID ausgelesen werden soll
p_where_Teil in varchar2 -- optionaler WHERE-Part (muss mit ' and ' beginnen)
)
return number
/* Hintergrund:
APEX-Select-Listen sollen mit einem bestimmten Wert initialisiert werden. Da die zugrundeliegenden DIM-Tabellen
manuell gepflegt werden, muss die entsprechende ID dynamisch bestimmt werden. -> Dies übernimmt diese Funktion.

Es können grundsätzlich a) EINE Zeile oder b) keine Zeile (oder Fehler) gefunden werden.
Für a) wird die ID des Eintrags zurückgegeben, wodurch APEX den entsprechenden Eintrag anzeigt.
Bei b) wird -1 geliefert. Die select-List muss -1 als Null-Werte erkennen und dann z.B. '- auswählen -' anzeigen

APEX-Einbindung für die select-List
- unter Default Value den Aufruf eintragen
Bsp.:
i3_basisfunktionen.get_lov_id(
'Wiedervorlage',
'dim_status',
'status',
'status_key',
'and AKTIONSTYP = 'S' and sysdate between GUELTIG_VON and GUELTIG_BIS'
);
- als Default Value Type: PL/SQL Expression wählen
*/
is
v_result number;

v_ErrCode varchar2(100); -- Fehlercode
v_ErrTxt varchar2(1500); -- Fehlermeldung

c_Modul varchar2(100) := 'get_LOV_ID';

/* SQL-Zielstring:
SELECT min(status_key)
FROM dim_status
WHERE status = 'Wiedervorlage'
AND aktionstyp = 'S'
*/
v_sql varchar2(32767); -- SQL-String

begin

-- log(c_Modul, 'BEGIN get_LOV_ID');

v_sql := 'select min('||p_ID_Spalte||') from '||p_Tabelle||' where '||p_Suchspalte||' = :B1 ';

if p_where_Teil is not null then
v_sql := v_sql||p_where_Teil;
end if;

execute immediate v_sql into v_result using p_Inhalt;

-- log(c_Modul, 'ENDE get_LOV_ID');

return(v_result);

exception
when No_Data_Found then
log(c_Modul, 'get_LOV_ID: keine Daten gefunden');
log(c_Modul, ' SQL: '||v_sql );
log(c_Modul, ' Para: Tbl: '||p_Tabelle||'| where: '||p_where_Teil);
log(c_Modul, ' Para: Suchspalte: '||p_Suchspalte||'| Inhalt: '||p_Inhalt||'| ID: '||p_ID_Spalte);
return -1;
when Too_Many_Rows then
log(c_Modul, 'get_LOV_ID: zuviele Zeilen');
log(c_Modul, ' SQL: '||v_sql );
log(c_Modul, ' Para: Tbl: '||p_Tabelle||'| where: '||p_where_Teil);
log(c_Modul, ' Para: Suchspalte: '||p_Suchspalte||'| Inhalt: '||p_Inhalt||'| ID: '||p_ID_Spalte);
return -1;
when others then
v_ErrCode := sqlcode;
v_ErrTxt := substr(sqlerrm,1,300);
log(c_Modul, 'FEHLER get_LOV_ID '||v_ErrCode||' / '||v_ErrTxt);
log(c_Modul, ' SQL: '||v_sql );
log(c_Modul, ' Para: Tbl: '||p_Tabelle||'| where: '||p_where_Teil);
log(c_Modul, ' Para: Suchspalte: '||p_Suchspalte||'| Inhalt: '||p_Inhalt||'| ID: '||p_ID_Spalte);
return -1;
end get_LOV_ID;

Kommentare

Beliebte Posts aus diesem Blog

PGA unter Oracle 11g

trunc(sysdate) - nette Spiele mit dem Datum

Datapump - Verzeichnis erstellen