wir arbeiten immer mehr mit Sachmerkmalen.
Da ich in selbst programmierten Masken manchmal auf die Sachmerkmale zurückgreife bin ich auf o.g. Procedure gestoßen.
Für mich ergeben die "IF THEN ELSE" Konstrukte irgendwie keinen Sinn:
Code: Alles auswählen
/******************************************************************************/
/**** Following SET SQL DIALECT is just for the Database Comparer ****/
/******************************************************************************/
SET SQL DIALECT 3;
SET TERM ^ ;
CREATE PROCEDURE P_SACHMERKMALE_LESEN (
BPROPT_ID INTEGER,
BSA_ID INTEGER)
RETURNS (
BPROP_ID INTEGER,
BPROP_MASKENKEY VARCHAR(20),
BPROP_FELDTYP SMALLINT,
BPROP_FELDFORMAT VARCHAR(40),
BPROP_AUSWAHL VARCHAR(32000),
BPROPTI_ZWANG_JN VARCHAR(1),
BPROPTI_SORTIERFOLGE SMALLINT,
BPROPTI_HILFETEXT VARCHAR(100),
PASCALSCRIPT_BP BLOB SUB_TYPE 0 SEGMENT SIZE 80,
PASCALSCRIPT_AP BLOB SUB_TYPE 0 SEGMENT SIZE 80,
INHALT VARCHAR(100))
AS
DECLARE VARIABLE TABELLE VARCHAR(40);
BEGIN
/* Letzter Stand 16.03.2010 16:50:31 LM */
/* Protokollieren, dass Aktion hier durchgelaufen ist */
IF (GEN_ID(GEN_ENTWICKLUNG,0) = 0) THEN
INSERT INTO A_WASMACHTIB (PROGRAMMTEIL) VALUES ('P_SACHMERKMALE_LESEN');
-- Inhalt von bestimmten Sachmerkmal lesen
TABELLE = NULL; -- bis fertig
IF (TABELLE IS NULL) THEN TABELLE = 'BPROPBSA';
TABELLE = F_UPPER(TABELLE);
PASCALSCRIPT_BP = NULL;
PASCALSCRIPT_AP = NULL;
FOR SELECT VB.ID, VB.MASKENKEY, VB.FELDTYP, VB.FELDFORMAT,
VB.AUSWAHL, VA.ZWANG_JN, VA.SORTIERFOLGE, VA.HILFETEXT,
VA.PASCALSCRIPT_BP, VA.PASCALSCRIPT_AP
FROM BPROPTI VA
LEFT OUTER JOIN BPROP VB ON VA.BPROP_ID = VB.ID
WHERE VA.BPROPT_ID_LINKKEY = :BPROPT_ID
ORDER BY VA.BPROPT_ID_LINKKEY, VA.SORTIERFOLGE
INTO :BPROP_ID, :BPROP_MASKENKEY, :BPROP_FELDTYP, :BPROP_FELDFORMAT,
:BPROP_AUSWAHL, :BPROPTI_ZWANG_JN, :BPROPTI_SORTIERFOLGE, :BPROPTI_HILFETEXT,
:PASCALSCRIPT_BP, :PASCALSCRIPT_AP
DO
BEGIN
INHALT = '';
IF (BSA_ID IS NOT NULL) THEN
BEGIN
IF (TABELLE = 'BPROPBSA') THEN
SELECT VC.INHALT
FROM BPROPBSA VC
WHERE VC.BSA_ID_LINKKEY = :BSA_ID AND VC.BPROP_ID = :BPROP_ID
INTO :INHALT;
ELSE IF (TABELLE = 'BAUFPOSM') THEN
SELECT VD.INHALT
FROM BAUFPOSM VD
WHERE VD.BAUFPO_ID_LINKKEY = :BSA_ID AND VD.BPROP_ID = :BPROP_ID
INTO :INHALT;
ELSE IF (TABELLE = 'BKUNDESM') THEN
SELECT VD.INHALT
FROM BKUNDESM VD
WHERE VD.BKUNDE_ID_LINKKEY = :BSA_ID AND VD.BPROP_ID = :BPROP_ID
INTO :INHALT;
ELSE IF (TABELLE = 'BPROJPLPLSM') THEN
SELECT VD.INHALT
FROM BPROJPLPLSM VD
WHERE VD.BPROJPLPL_ID_LINKKEY = :BSA_ID AND VD.BPROP_ID = :BPROP_ID
INTO :INHALT;
ELSE IF (TABELLE = 'BPROJPLSM') THEN
SELECT VD.INHALT
FROM BPROJPLSM VD
WHERE VD.BPROJPL_ID_LINKKEY = :BSA_ID AND VD.BPROP_ID = :BPROP_ID
INTO :INHALT;
ELSE IF (TABELLE = 'BBESPSM') THEN
SELECT VD.INHALT
FROM BBESPSM VD
WHERE VD.BBESP_ID_LINKKEY = :BSA_ID AND VD.BPROP_ID = :BPROP_ID
INTO :INHALT;
ELSE IF (TABELLE = 'BLIEFSM') THEN
SELECT VD.INHALT
FROM BLIEFSM VD
WHERE VD.BLIEF_ID_LINKKEY = :BSA_ID AND VD.BPROP_ID = :BPROP_ID
INTO :INHALT;
ELSE IF (TABELLE = 'BLLCQUSM') THEN
SELECT VD.INHALT
FROM BLLCQUSM VD
WHERE VD.BLLC_ID_LINKKEY = :BSA_ID AND VD.BPROP_ID = :BPROP_ID
INTO :INHALT;
IF (TABELLE = 'BFASM') THEN
SELECT VD.INHALT
FROM BFASM VD
WHERE VD.BFA_ID_LINKKEY = :BSA_ID AND VD.BPROP_ID = :BPROP_ID
INTO :INHALT;
ELSE IF (TABELLE = 'BANSPSM') THEN
SELECT VD.INHALT
FROM BANSPSM VD
WHERE VD.BANSP_ID_LINKKEY = :BSA_ID AND VD.BPROP_ID = :BPROP_ID
INTO :INHALT;
ELSE IF (TABELLE = 'BSAPSM') THEN
SELECT VD.INHALT
FROM BSAPSM VD
WHERE VD.BSAP_ID_LINKKEY = :BSA_ID AND VD.BPROP_ID = :BPROP_ID
INTO :INHALT;
ELSE IF (TABELLE = 'BPRUEFMSM') THEN
SELECT VD.INHALT
FROM BPRUEFMSM VD
WHERE VD.BPRUEFM_ID_LINKKEY = :BSA_ID AND VD.BPROP_ID = :BPROP_ID
INTO :INHALT;
ELSE IF (TABELLE = 'BLLCWFSM1') THEN
SELECT VD.INHALT
FROM BLLCWFSM1 VD
WHERE VD.BLLCWF_ID_LINKKEY = :BSA_ID AND VD.BPROP_ID = :BPROP_ID
INTO :INHALT;
ELSE IF (TABELLE = 'BLLCWFSM2') THEN
SELECT VD.INHALT
FROM BLLCWFSM2 VD
WHERE VD.BLLCWF_ID_LINKKEY = :BSA_ID AND VD.BPROP_ID = :BPROP_ID
INTO :INHALT;
ELSE IF (TABELLE = 'BLLCWFSM3') THEN
SELECT VD.INHALT
FROM BLLCWFSM3 VD
WHERE VD.BLLCWF_ID_LINKKEY = :BSA_ID AND VD.BPROP_ID = :BPROP_ID
INTO :INHALT;
END
SUSPEND;
END
END
^
SET TERM ; ^
COMMENT ON PROCEDURE P_SACHMERKMALE_LESEN IS
'Sachmerkmale fuer Artikel lesen';
/* Privileges of users */
GRANT EXECUTE ON PROCEDURE P_SACHMERKMALE_LESEN TO PUBLIC;
Ist das ein feature
Vielleicht könnten Sie sich das mal ansehen.
PS: Das ist der Stand der Datenbank 2012B15.