Oracle
 sql >> база данни >  >> RDS >> Oracle

Тип таблица в Пример за съхранявана процедура на Oracle

По-долу е даден пример за съхранена процедура на 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
  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Защо Oracle SQL не ни позволява да използваме псевдоними на колони в клаузи GROUP BY?

  2. Създаване на таблица и вмъкване в рамките на същата процедура в pl/sql

  3. Промяна на разделителя на функцията WM_CONCAT на Oracle 11gR2

  4. Как да форматирате числата като римски цифри в Oracle

  5. ORA-00054:ресурсът е зает и придобива с указано NOWAIT