По-долу е даден пример за съхранена процедура на Oracle, в която колекцията от тип таблица се използва за обработка на данните.
Обработвайте данни с помощта на тип таблица в примера за съхранявана процедура на Oracle
Създайте следните таблици и вмъкнете данните за тестване във вашата схема.
CREATE TABLE EMP ( EMPNO NUMBER(4), ENAME VARCHAR2(10 BYTE), JOB VARCHAR2(9 BYTE), MGR NUMBER(4), HIREDATE DATE, SAL NUMBER(7,2), COMM NUMBER(7,2), DEPTNO NUMBER(2) ) /
CREATE TABLE EMP_BONUS ( EMPNO NUMBER(4), BONUS_AMOUNT NUMBER ) /
SET DEFINE OFF; Insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, DEPTNO) Values (7369, 'SMITH', 'CLERK', 7902, TO_DATE('12/17/1980 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 800, 20); Insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) Values (7499, 'ALLEN', 'SALESMAN', 7698, TO_DATE('02/20/1981 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 1600, 300, 30); Insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) Values (7521, 'WARD', 'SALESMAN', 7698, TO_DATE('02/22/1981 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 1250, 500, 30); COMMIT;
Създаване на съхранена процедура
CREATE OR REPLACE PROCEDURE process_bonus IS CURSOR c_emp IS SELECT EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO FROM emp; /* declare table type in the procedure declare section as below */ TYPE t_emp_table IS TABLE OF emp%ROWTYPE INDEX BY BINARY_INTEGER; t_emp t_emp_table; BEGIN OPEN c_emp; /* fetch cursor data into table type using bulk collect */ FETCH c_emp BULK COLLECT INTO t_emp; CLOSE c_emp; FOR i IN t_emp.FIRST .. t_emp.LAST LOOP /* insert 5% bonus of employee's salary into emp_bonus table */ INSERT INTO emp_bonus (empno, bonus_amount) VALUES (t_emp (i).empno, t_emp (i).sal * 5 / 100); END LOOP; COMMIT; END;
Тест с помощта на PL/SQL блок
BEGIN process_bonus; END;
Проверете таблицата с бонуси за обработени данни
SELECT * FROM EMP_BONUS;
Изход:
EMPNO | BONUS_AMOUNT |
7369 | 40 |
7499 | 80 |
7521 | 62,5 |
Вижте също:
- Импортирайте CSV файл в Oracle с помощта на съхранена процедура
- Върнете ResultSet от Съхранена процедура в Oracle
-
Защо Oracle SQL не ни позволява да използваме псевдоними на колони в клаузи GROUP BY?
-
Създаване на таблица и вмъкване в рамките на същата процедура в pl/sql
-
Промяна на разделителя на функцията WM_CONCAT на Oracle 11gR2
-
Как да форматирате числата като римски цифри в Oracle
-
ORA-00054:ресурсът е зает и придобива с указано NOWAIT