) DYNAMIC RESULT SETS 2 BEGIN DECLARE V_STMT VARCHAR (1000); DECLARE RS CURSOR WITH RETURN FOR PESAN; SET V_STMT = 'SELECT E.EMPNO, E.FIRSTNME, D.DEPTNAME, E.SALARY FROM EMPLOYEE E, DEPARTMENT D WHERE E.WORKDEPT = D.DEPTNO AND D.DEPTNO = ''' || IN_DEPTNO ||'' ''; PREPARE PESAN FROM V_STMT; OPEN RS; END@ CALL FIND('A00')@ CREATE OR REPLACE PROCEDURE FIND ( IN IN_SAL ANCHOR EMPLOYEE.SALARY, IN IN_SAL2 ANCHOR EMPLOYEE.SALARY ) RESULT SET 1 BEGIN DECLARE V_STMT VARCHAR2(100); DECLARE RS CURSOR WITH RETURN FOR PESAN; SET V_STMT = 'SELECT E.EMPNO, E.FIRSTNME, D.DEPTNAME, E.SALARY FROM EMPLOYEE E, DEPARTMENT D WHERE E.WORKDEPT = D.DEPTNO AND E.SALARY < ''' || IN_SAL 2 || ''' AND E.SALARY > ''' || IN_SAL || ''''; PREPARE V_STMT FROM PESAN; OPEN RS; END@ CALL FIND(100000,200000)@ CREATE OR REPLACE PROCEDURE FIND( IN IN_DEPTNO ANCHOR DEPARTMENT.DEPTNO, IN IN_SAL ANCHOR EMPLOYEE.SALARY, IN IN_SAL2 ANCHOR EMPLOYEE.SALARY ) RESULT SETS 1 BEGIN DECLARE V_STMT VARCHAR2(1000); DECLARE RS CURSOR WITH RETURN FOR PESAN; SET V_STMT = ' SELECT E.EMPNO, E.FIRSTNME, D.DEPTNAME, E.SALARY FROM EMPLOYEE E, DEPARTMENT D WHERE E.WORKDEPT = D.DEPTNO AND E.SALARY < ''' || IN_SAL2 || ''' AND E.SALARY > ''' || IN_SAL || ''' AND D.DEPTNO = '''||IN_DEPTN O||''''; OPEN RS; END@ CALL FIND('A00',100000,200000)@ --TABEL LOG-- --END LOG-- CREATE TABLE LOG_EMPLOYEE LIKE EMPLOYEE@ ALTER TABLE LOG_EMPLOYEE ADD COLUMN KETERANGAN VARCHAR(1000)@ CREATE TRIGGER LOG_INS AFTER INSERT ON EMPLOYEE REFERENCING NEW AS N FOR EACH ROW MODE DB2SQL INSERT INTO LOG_EMPLOYEE(FIRSTNME, LASTNAME, EMPNO, EDLEVEL, KETERANGAN) VALUES( N.FIRSTNME, N.LASTNAME, N.EMPNO, N.EDLEVEL, 'INSERT')@ DROP TRIGGER LOG_INS@ CREATE OR REPLACE TRIGGER LOG_UPD AFTER UPDATE ON EMPLOYEE REFERENCING NEW AS N OLD AS O FOR EACH ROW MODE DB2SQL BEGIN ATOMIC INSERT INTO LOG_EMPLOYEE VALUES ( O.EMPNO, O.FIRSTNME, O.MIDINIT, O.LASTNAME, O.WORKDEPT, O.PHONENO, O.HIREDATE, O.JOB, O.EDLEVEL, O.SEX, O.BIRTHDATE, O.SALARY, O.BONUS, O.COMM, 'SEBELUM UPDATE') ,( N.EMPNO, N.FIRSTNME, N.MIDINIT, N.LASTNAME, N.WORKDEPT, N.PHONENO, N.HIREDATE, N.JOB, N.EDLEVEL, N.SEX, N.BIRTHDATE, N.SALARY, N.BONUS, N.COMM, 'SESUDAH UPDATE'); END@ INSERT INTO EMPLOYEE(EMPNO, FIRSTNME, LASTNAME, EDLEVEL) VALUES ('002201', 'RIAN ', 'HIDAYAT', 10)@ UPDATE EMPLOYEE SET FIRSTNME = 'OKIKLALA' WHERE EMPNO = '002201'@ SELECT * FROM LOG_EMPLOYEE@ CREATE FUNCTION RATA() RETURNS TABLE( DEPTNO VARCHAR (1000), SALARY DECIMAL(9,2), AVGSALARY DECIMAL(9,2) ) BEGIN ATOMIC RETURN SELECT D.DEPTNO, D.DEPTNAME, AVG(E.SALARY) FROM EMPLOYEE E JOIN DEPARTMENT D ON E.WORKDEPT = D.DEPTNO GROUP BY D.DEPTNO, D.DEPTNAME; END@ CREATE FUNCTION UDF(IN IN_EMPNO VARCHAR (100)) RETURNS DECIMAL(9,2) BEGIN ATOMIC RETURN SELECT CASE WHEN (YEAR(CURRENT TIMESTAMP) - YEAR(HIREDATE) >=0 AND Y EAR(CURRENT TIMESTAMP) - YEAR(HIREDATE) <=4) THEN E.SALARY+(0.05 * D.AVGSALARY) WHEN (YEAR(CURRENT TIMESTAMP) - YEAR(HIREDATE) >=5 AND Y EAR(CURRENT TIMESTAMP) - YEAR(HIREDATE) <=8) THEN E.SALARY+(0.075 * D.AVGSALARY) WHEN (YEAR(CURRENT TIMESTAMP) - YEAR(HIREDATE) >=9) THEN E.SALARY+(0.1 * D.AVGSALARY) END TUNJANGAN FROM EMPLOYEE E, TABLE(RATA()) D WHERE E.WORKDEPT=D.DEPTNO AND EMPNO = IN_EMPNO; END@ DROP FUNCTION UDF(VARCHAR(100))@ VALUES UDF('000010')@