HTML

Fejlesztési ötletek

Ebben a blogban fejlesztési ötleteket gyűjtöttem össze a gyorsabb és hatékonyabb fejlesztés érdekében

Friss topikok

Linkblog

Aggregációs függvények létrehozása Oracle-ben

2009.08.11. 10:54 Green Eagle

Sokszor előfordulhat, hogy különböző lekérdezések során aggregált adatokra van szükségünk. Erre számos beépített függvény áll rendelkezésünkre, de készíthetünk saját aggregációs függvényeket is. Az alábbiakban azt az aggregációs függvényt valósítjuk meg, amely a csoport elemeinek szorzatát számolja ki.

Maga a függvény igen egyszerű:

 

CREATE OR REPLACE FUNCTION MUL(input NUMBER) RETURN NUMBER paralell_enable
aggregate using MulNumber;
/
A fentiekből is látszik, hogy a megvalósítás lényegi része a MulNumber típusban található. Nézzük ennek specifikációját.

CREATE OR REPLACE TYPE MulNumber AS OBJECT (

     multipliedValue NUMBER

STATIC FUNCTION ODCIAggregateInitialize (mctx IN OUT MulNumber) RETURN NUMBER,

MEMBER FUNCTION ODCIAggregateIterate (self IN OUT MulNumber, value IN NUMBER) RETURN NUMBER,

MEMBER FUNCTION ODCIAggregateTerminate (self IN MulNumber, returnValue OUT NUMBER, flags IN NUMBER) RETURN NUMBER,

MEMBER FUNCTION ODCIAggregateMerge (self IN OUT MulNumber, ctx IN MulNumber) RETURN NUMBER

);
/

A fentiekben használt függvénynevek kötöttek. Mivel úgy definiáltuk a MUL függvényt, hogy párhuzamos végrehajtás esetén is alkalmazható, így itt meg valósítjuk az ODCIAggregateMerge függvényt is.

Nézzük a típus törzsét:

CREATE OR REPLACE TYPE BODY MulNumber IS

STATIC FUNCTION ODCIAggregateInitialize (mctx IN OUT MulNumber) RETURN NUMBER IS
     BEGIN
          mctx := MulNumber(1);
          return ODCIConst.Success;
     END;

MEMBER FUNCTION ODCIAggregateIterate (self IN OUT MulNumber, value IN NUMBER) RETURN NUMBER IS
     BEGIN
          self.multipliedValue := self.multipliedValue * value;
          return ODCIConst.Success;
     END;

MEMBER FUNCTION ODCIAggregateTerminate (self IN MulNumber, returnValue OUT NUMBER, flags IN NUMBER) RETURN NUMBER IS
     BEGIN
          returnValue := self.multipliedValue;
          return ODCIConst.Success;
     END;

MEMBER FUNCTIONS ODCIAggregateMerge (self IN OUT MulNumber, ctx2 IN MulNumber) RETURN NUMBER IS
     BEGIN
          self.multipliedValue := self.multipliedValue *
                                  ctx2.multipliedValue;
          return ODCIConst.Success;
     END;
END;
/
A fentieken jól végigkövethető az aggregáció folyamata. Az inicializálástól az iteráción keresztül a befejezésig, illetve a párhuzamos eredmények összefésüléséig.

Ez egy egyszerű példa arra, hogy hogyan lehet saját készítésű aggregációs függvényeket definiálni Oracle-ben.
 

Szólj hozzá!

Címkék: sql oracle típus függvény pl/sql aggregáció szorzat

A bejegyzés trackback címe:

https://development-green-eagle.blog.hu/api/trackback/id/tr641302340

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása