1. Create Tuple Type UDT in Oracle SQL...

8
1 1. Create Tuple Type UDT in Oracle SQL Server CREATE OR REPLACE TYPE result_tf_row AS OBJECT ( Dept_No int, Dept_Name char(30), COUNT_Emp int, SUM_Salary int, AVG_Salary int); ------------------------

Transcript of 1. Create Tuple Type UDT in Oracle SQL...

Page 1: 1. Create Tuple Type UDT in Oracle SQL Servercis.csuohio.edu/~sschung/cis612/ThuatSPUDTTupletypeOracle.pdf · Create Table Function with Tuple Type UDT in Oracle SQL Server CREATE

1

1. Create Tuple Type UDT in Oracle SQL Server CREATE OR REPLACE TYPE result_tf_row AS OBJECT (

Dept_No int, Dept_Name char(30), COUNT_Emp int, SUM_Salary int, AVG_Salary int);

------------------------

Page 2: 1. Create Tuple Type UDT in Oracle SQL Servercis.csuohio.edu/~sschung/cis612/ThuatSPUDTTupletypeOracle.pdf · Create Table Function with Tuple Type UDT in Oracle SQL Server CREATE

2

2. Create Table Function with Tuple Type UDT in Oracle SQL Server CREATE OR REPLACE TYPE Total_Salary_By_Dept_Table AS TABLE OF result_tf_row;

----------------------- CREATE OR REPLACE FUNCTION Total_Salary_By_Dept(dept_id int) RETURN Total_Salary_By_Dept_Table IS CURSOR total_cursor IS SELECT D.dnumber Dept_No, D.dname Dept_Name, COUNT(*) COUNT_Emp, SUM(E.salary) SUM_Salary, AVG(E.salary) AVG_Salary FROM DEPARTMENT D JOIN EMPLOYEE E ON D.dnumber = E.dno WHERE D.Dnumber = dept_id GROUP BY D.dnumber, D.dname; cursor_rec total_cursor%ROWTYPE; result_table Total_Salary_By_Dept_Table := Total_Salary_By_Dept_Table(); BEGIN OPEN total_cursor; FETCH total_cursor INTO cursor_rec;

Page 3: 1. Create Tuple Type UDT in Oracle SQL Servercis.csuohio.edu/~sschung/cis612/ThuatSPUDTTupletypeOracle.pdf · Create Table Function with Tuple Type UDT in Oracle SQL Server CREATE

3

IF total_cursor%FOUND THEN result_table.extend(); result_table(result_table.last) := result_tf_row

(cursor_rec.Dept_No, cursor_rec.Dept_Name, cursor_rec.COUNT_Emp, cursor_rec.SUM_Salary, cursor_rec.AVG_Salary); END IF; CLOSE total_cursor; RETURN result_table; END;

-----------------------------

Page 4: 1. Create Tuple Type UDT in Oracle SQL Servercis.csuohio.edu/~sschung/cis612/ThuatSPUDTTupletypeOracle.pdf · Create Table Function with Tuple Type UDT in Oracle SQL Server CREATE

4

SELECT * FROM TABLE(Total_Salary_By_Dept(5));

Page 5: 1. Create Tuple Type UDT in Oracle SQL Servercis.csuohio.edu/~sschung/cis612/ThuatSPUDTTupletypeOracle.pdf · Create Table Function with Tuple Type UDT in Oracle SQL Server CREATE

5

2.

CREATE TABLE NEW_Total_Salary_By_Dept_Table (

Dept_No int, Dept_Name char(30), COUNT_Emp int, SUM_Salary int, AVG_Salary int, NEW_SUM_Salary int, NEW_AVG_Salary int );

------------------------

Page 6: 1. Create Tuple Type UDT in Oracle SQL Servercis.csuohio.edu/~sschung/cis612/ThuatSPUDTTupletypeOracle.pdf · Create Table Function with Tuple Type UDT in Oracle SQL Server CREATE

6

CREATE OR REPLACE PROCEDURE Report_NEW_Total_Salary (dept_id int) IS CURSOR total_cursor IS SELECT * FROM TABLE(Total_Salary_By_Dept(dept_id)); cursor_rec total_cursor%ROWTYPE; NEW_sum int; NEW_avg int; BEGIN OPEN total_cursor; FETCH total_cursor INTO cursor_rec; IF (total_cursor%NOTFOUND) THEN dbms_output.put_line('Table is empty.'); ELSE IF dept_id = 1 THEN NEW_sum := cursor_rec.SUM_Salary * 1.1; NEW_avg := cursor_rec.AVG_Salary * 1.1; ELSIF dept_id = 4 THEN NEW_sum := cursor_rec.SUM_Salary * 1.2; NEW_avg := cursor_rec.AVG_Salary * 1.2; ELSIF dept_id = 5 THEN NEW_sum := cursor_rec.SUM_Salary * 1.3; NEW_avg := cursor_rec.AVG_Salary * 1.3; ELSIF dept_id = 7 THEN NEW_sum := cursor_rec.SUM_Salary * 1.4; NEW_avg := cursor_rec.AVG_Salary * 1.4; END IF; INSERT INTO NEW_Total_Salary_By_Dept_Table VALUES (cursor_rec.Dept_No, cursor_rec.Dept_Name, cursor_rec.COUNT_Emp, cursor_rec.SUM_Salary, cursor_rec.AVG_Salary, NEW_sum, NEW_avg); END IF; CLOSE total_cursor; END;

Page 7: 1. Create Tuple Type UDT in Oracle SQL Servercis.csuohio.edu/~sschung/cis612/ThuatSPUDTTupletypeOracle.pdf · Create Table Function with Tuple Type UDT in Oracle SQL Server CREATE

7

-----------------------------------

Page 8: 1. Create Tuple Type UDT in Oracle SQL Servercis.csuohio.edu/~sschung/cis612/ThuatSPUDTTupletypeOracle.pdf · Create Table Function with Tuple Type UDT in Oracle SQL Server CREATE

8

BEGIN Report_NEW_Total_Salary(4); END; / SELECT * FROM NEW_Total_Salary_By_Dept_Table;