Oracle 12c / Dotazování z asociativního pole
Pro použití pole v SQL dotazech bylo dříve zapotřebí vytvořit „uložený“ typ na straně SQL serveru a uživateli přiřadit patřičná práva. Oracle 12c práci s poli výrazně zjednodušuje, dotazovat se lze z asociativního pole deklarovaného v packagi.
CREATE OR REPLACE PACKAGE MujBalik AS -- asociativní pole řetězců TYPE Varchar_TT IS TABLE OF VARCHAR2(4000) INDEX BY PLS_INTEGER; END; /
DECLARE
lt_Pole MujBalik.Varchar_TT;
l_Pocet PLS_INTEGER;
BEGIN
lt_Pole(1):='jedna';
lt_Pole(2):='dva';
SELECT COUNT(1)
INTO l_Pocet
FROM TABLE(lt_Pole)
;
dbms_output.put_line(l_Pocet); -- 2
END;
Je ale potřeba brát v potaz, že podobnou konstrukci bohužel stále nelze využít u DML operací.
CREATE TABLE tabulka(
text VARCHAR2(4000)
);
DECLARE
lt_Pole MujBalik.Varchar_TT;
BEGIN
lt_Pole(1):='jedna';
lt_Pole(2):='dva';
INSERT INTO tabulka
SELECT *
FROM TABLE(lt_Pole) -- ORA-00902: invalid datatype
;
END;