Oracle Array als Variable
Tabelle erzeugen:

-- DROP TABLE WEB_BESUCHER CASCADE CONSTRAINTS;
-- Create table

create table WEB_BESUCHER
(
  SERVERS            VARCHAR2(5),
  JAN                NUMBER,
  FEB                NUMBER,
  MRZ                NUMBER,
  APR                NUMBER,
  MAI                NUMBER,
  JUN                NUMBER,
  JUL                NUMBER,
  AUG                NUMBER,
  SEP                NUMBER,
  OKT                NUMBER,
  NOV                NUMBER,
  DEZ                NUMBER
)
tablespace USERS
  pctfree 10
  initrans 1
  maxtrans 255
  storage
  (
    initial 5M
    minextents 1
    maxextents unlimited
  );

INSERT INTO WEB_BESUCHER VALUES('srv1',1200,1300,1500,1100,2000,3000,2100,4200,3000,2001,1589,2456);
INSERT INTO WEB_BESUCHER VALUES('srv2',120,130,150,110,200,300,210,420,300,201,159,245);
COMMIT;
    

Kopieren

Prozedur erzeugen:

-- Create procedure

CREATE OR REPLACE PROCEDURE VARI_ARR IS
/**************************************
 -- Stand ..... --
**************************************/
BEGIN
DECLARE
t_BG              NUMBER := 1;
t_ED              NUMBER := 12;
t_SERVER          WEB_BESUCHER.SERVERS%TYPE;

TYPE MON_ARR IS TABLE OF VARCHAR2(3) INDEX BY BINARY_INTEGER;
MON MON_ARR;

TYPE WERT_ARR IS TABLE OF WEB_BESUCHER.JAN%TYPE INDEX BY BINARY_INTEGER;
WERT WERT_ARR;

CURSOR WERT_CUR IS
 SELECT t.SERVERS,t.JAN,t.FEB,t.MRZ,t.APR,t.MAI,t.JUN,t.JUL,t.AUG,t.SEP,t.OKT,t.NOV,t.DEZ
  FROM WEB_BESUCHER t
  WHERE t.SERVERS IN ('srv1','srv2');

BEGIN
 SELECT 'JAN','FEB','MRZ','APR','MAI','JUN','JUL','AUG','SEP','OKT','NOV','DEZ'
  INTO MON(1),MON(2),MON(3),MON(4),MON(5),MON(6),MON(7),MON(8),MON(9),MON(10),MON(11),MON(12)
   FROM DUAL;
 OPEN WERT_CUR;
  LOOP
   FETCH WERT_CUR INTO t_SERVER,WERT(1),WERT(2),WERT(3),WERT(4),WERT(5),WERT(6),WERT(7),WERT(8),WERT(9),WERT(10),WERT(11),WERT(12);
    EXIT WHEN WERT_CUR%NOTFOUND;
   dbms_output.put_line(t_SERVER||':');
   WHILE t_BG <= t_ED LOOP
    dbms_output.put_line(MON(t_BG)||' - '||WERT(t_BG));
    t_BG := t_BG + 1;
   END LOOP;
   t_BG := 1;
  END LOOP;
 CLOSE WERT_CUR;
END;
END VARI_ARR;
    

Kopieren

Prozedur aufrufen:

-- Call the procedure

begin
  vari_arr;
end;
    

Kopieren