Last active
August 29, 2015 14:01
-
-
Save AARomanov1985/138ebe21535f7c131976 to your computer and use it in GitHub Desktop.
PL-SQL курсоры, индексные таблицы, массивы
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
CREATE OR REPLACE TYPE NameList AS | |
VARRAY(20) OF VARCHAR2(30); | |
/ |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
DECLARE | |
TYPE Table_1 IS TABLE OF NUMBER | |
INDEX BY BINARY_INTEGER; | |
--Привязка: | |
v_Var Table_1; | |
BEGIN | |
DBMS_OUTPUT.ENABLE(20000); | |
FOR v_tmp in 1..10 LOOP | |
v_Var(v_tmp):=v_tmp*17; | |
DBMS_OUTPUT.PUT_LINE('v_Var('|| v_tmp || ') ' || v_Var(v_tmp)); | |
END LOOP; | |
END; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--Переменные с типами, указанными выше | |
v_var Table_1; | |
v_id sch_name; | |
v_idname sch_name; | |
--Создание таблиц с помощью конструкторов на основе объявленных выше типов: | |
--Создадим таблицу на основе Table_1 с одним элементом: | |
v_tab1 Table_1:=Table_1(-12); | |
--Создадим таблицу на основе sch_name с пятью элементами: | |
v_tab2 Table_1:=Table_1(1,2,3,4,5); | |
--Таблица без элементов: | |
v_tab3 table_1:=Table_1(); | |
BEGIN | |
--Значения в таблицах можно изменять: | |
v_tab1(1):=0; | |
v_tab2(1):=-2; | |
v_tab2(2):=0; | |
END; | |
/************************************** | |
Пустые таблицы | |
**************************************/ | |
DECLARE | |
TYPE tmp_tab IS TABLE OF number; | |
--Создадим NULL-таблицу: | |
v_tab1 tmp_tab; | |
--Создадим таблицу с одним NULL-элементом: | |
v_tab2 tmp_tab:=tmp_tab(); | |
BEGIN | |
DBMS_OUTPUT.ENABLE(20000); | |
IF v_tab1 IS NULL THEN | |
DBMS_OUTPUT.PUT_LINE('v_tab1 is null'); | |
ELSE | |
DBMS_OUTPUT.PUT_LINE('v_tab1 is not null'); | |
END IF; | |
IF v_tab2 IS NULL THEN | |
DBMS_OUTPUT.PUT_LINE('v_tab2 is null'); | |
ELSE | |
DBMS_OUTPUT.PUT_LINE('v_tab2 is not null'); | |
END IF; | |
END; | |
/* Вывод: | |
------------------------ | |
v_tab1 is null | |
v_tab2 is not null | |
*/ |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
DECLARE | |
--Список id, с опцией NOT NULL | |
TYPE idList IS VARRAY(10) OF NUMBER(3) NOT NULL; | |
--Список названий | |
TYPE NameList IS VARRAY(10) OF enforce_dba.schet_fr.idname%TYPE; | |
--Объявление массива: | |
v_idList idList:=idList(1,2,3,4,5); | |
v_NameList NameList:=NameList('Т-1 6кВ','Т-2 6кВ','Т1 35кВ','Т2 35кВ','ТСН 0.4кВ'); | |
BEGIN | |
DBMS_OUTPUT.ENABLE(20000); | |
--Расширим массивы, внеся новые элементы: | |
v_idList.EXTEND; | |
v_NameList.EXTEND; | |
v_idList(6):=6; | |
v_NameList(6):='ККУ-6кВ'; | |
/* Расширять массив свыше указанного при инициализации массива нельзя! | |
В самом начале был указан размер 10 значений (IS VARRAY(10))*/ | |
END; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
DECLARE | |
CURSOR tmp_1 IS | |
SELECT id, idname | |
FROM enforce_dba.schet_fr | |
WHERE idname LIKE '%Водоканал%'; | |
-- Запись для хранения считанной информации: | |
v_tmp_Data tmp_1%ROWTYPE; | |
BEGIN | |
DBMS_output.ENABLE(20000); | |
OPEN tmp_1; | |
FETCH tmp_1 INTO v_tmp_Data; | |
WHILE tmp_1%FOUND LOOP | |
DBMS_OUTPUT.PUT_LINE(v_tmp_Data.id || ' ' || v_tmp_Data.idname); | |
FETCH tmp_1 INTO v_tmp_Data; | |
END LOOP; | |
CLOSE tmp_1; | |
END; | |
/*************************************************** | |
*****************************************************/ | |
DECLARE | |
v_Big number; | |
CURSOR tmp_2 IS | |
SELECT id, iddate, znak | |
FROM enforce_dba.f_sch_ee | |
WHERE id=122 AND iddate between '1.04.2014' and '1.05.2014'; | |
v_Data tmp_2%ROWTYPE; | |
BEGIN | |
DBMS_OUTPUT.ENABLE(1000000); | |
OPEN tmp_2; | |
FETCH tmp_2 INTO v_Data; | |
WHILE tmp_2%FOUND LOOP | |
v_Big:=v_Data.znak*50; | |
DBMS_OUTPUT.PUT_LINE(v_Data.id || ' ' || v_Data.iddate || ' ' || v_Data.znak || ' ' || v_Big); | |
FETCH tmp_2 INTO v_Data; | |
END LOOP; | |
CLOSE tmp_2; | |
END; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
BEGIN | |
FOR v_Data IN (SELECT id, idname | |
FROM enforce_dba.schet_fr) LOOP | |
DBMS_OUTPUT.PUT_LINE(v_Data.id || ' ' || v_Data.idname); | |
END LOOP; | |
END; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
create or replace procedure enf_idname_out | |
(c_id IN NUMBER) AS | |
--Тип курсорной переменной: | |
TYPE t_enf IS REF CURSOR; | |
--Тип переменной: | |
v_enf t_enf; | |
--Переменные для хранения результатов: | |
v_id enforce_dba.schet_fr.id%TYPE; | |
v_idname enforce_dba.schet_fr.idname%TYPE; | |
BEGIN | |
DBMS_OUTPUT.ENABLE(NULL); | |
OPEN v_enf FOR | |
SELECT id, idname | |
FROM enforce_dba.schet_fr | |
WHERE id=c_id; | |
LOOP | |
FETCH v_enf INTO | |
v_id, v_idname; | |
EXIT WHEN v_enf%NOTFOUND; | |
DBMS_OUTPUT.PUT_LINE(v_id || ' ' || v_idname); | |
END LOOP; | |
CLOSE v_enf; | |
END; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment