-
-
Notifications
You must be signed in to change notification settings - Fork 262
Open
Description
Hi
as #8173 is closed as not planned, please add BIN_OR
and BIN_AND
as aggregate functions (can be under different name if you see some conflicts).
Currently we must do this in stored procedures or execute block in the loop.
This will simplify things a lot.
example what we must do currently instead of simple grouping function:
EXECUTE BLOCK RETURNS(
RODZ_REP_ID TYPE OF COLUMN RODZAJ_REPARTYCJI.RODZ_REP_ID
, RODZ_REP_NAZWA TYPE OF COLUMN RODZAJ_REPARTYCJI.RODZ_REP_NAZWA
, RODZ_REP_TEXT TYPE OF COLUMN RODZAJ_REPARTYCJI.RODZ_REP_TEXT
, MASKA_OBSZAR_ID TYPE OF COLUMN RODZAJ_UMOWY.MASKA_OBSZAR_ID
, MASKA_STR VARCHAR(16)
)
AS
DECLARE VARIABLE TMP_MASKA_OBSZAR_ID TYPE OF COLUMN RODZAJ_UMOWY.MASKA_OBSZAR_ID;
DECLARE VARIABLE NEXT_RODZ_REP_ID TYPE OF COLUMN RODZAJ_REPARTYCJI.RODZ_REP_ID;
BEGIN
NEXT_RODZ_REP_ID = '';
MASKA_OBSZAR_ID = 0;
FOR
SELECT
DISTINCT
RR.RODZ_REP_ID
, RR.RODZ_REP_NAZWA
, RR.RODZ_REP_TEXT
, RU.MASKA_OBSZAR_ID
/* , LICZ_BIT_TO_STR(RU.MASKA_OBSZAR_ID, 16) AS MASKA_STR */
, LEAD(RR.RODZ_REP_ID, 1) over (order by RR.RODZ_REP_TEXT, RR.RODZ_REP_ID, RD.RDB$DB_KEY) AS NEXT_RODZ_REP_ID
FROM
RODZAJ_REPARTYCJI RR
INNER JOIN RODZAJ_DZIAL RD ON RR.RODZ_REP_ID = RD.RODZ_REP_ID
INNER JOIN RODZAJ_UMOWY RU ON RU.RODZ_UMOWY_ID = RD.RODZ_UMOWY_ID AND RU.TYP_UMOWY_ID = RD.TYP_UMOWY_ID
WHERE
RR.RODZ_REP_ID <> ''
ORDER BY
RR.RODZ_REP_TEXT, RR.RODZ_REP_ID, RD.RDB$DB_KEY
INTO :RODZ_REP_ID, :RODZ_REP_NAZWA, :RODZ_REP_TEXT, :TMP_MASKA_OBSZAR_ID, :NEXT_RODZ_REP_ID
DO
BEGIN
MASKA_OBSZAR_ID = BIN_OR(:MASKA_OBSZAR_ID, :TMP_MASKA_OBSZAR_ID);
IF (:RODZ_REP_ID IS DISTINCT FROM :NEXT_RODZ_REP_ID) THEN
BEGIN
MASKA_STR = LICZ_BIT_TO_STR(MASKA_OBSZAR_ID, 16);
SUSPEND;
TMP_MASKA_OBSZAR_ID = 0;
MASKA_OBSZAR_ID = 0;
END
END
END
Metadata
Metadata
Assignees
Labels
No labels