Sie sind auf Seite 1von 8

Bulk Processing

SET SERVROUTPUT ON SIZE 1000;


DECLARE
CURSOR WS_EMP_CUR IS
SELECT EMP_ID FROM EMPLOYEES ;
TYPE WS_REC_TYPE IS RECORD ( WS_REC_DEF EMPLOYEES.EMP_ID%TYPE) ;
WS_REC WS_REC_TYPE ;
-- WS_REC EMPLOYEES%ROWTYPE ;
TYPE WS_TABLE_TYPE IS TABLE OF EMPLOYEES.EMP_ID%TYPE INDEX BY BINARY_INTEGER;
WS_TABLE WS_TABLE_TYPE;
WS_COUNT NUMBER := 1;
WS_PRESENT_ROW NUMBER := 1;
BEGIN
dbms_output.put_line('OPEN CURSOR');
FOR WS_FOR IN WS_EMP_CUR
LOOP
EXIT WHEN WS_EMP_CUR%NOTFOUND;
WS_REC := WS_FOR ;
WS_TABLE(WS_COUNT) := WS_FOR.EMP_ID ;
WS_TABLE(WS_COUNT) := WS_REC.WS_REC_DEF ;
dbms_output.put_line(WS_COUNT || ':' || WS_TABLE (WS_COUNT));
WS_COUNT := WS_COUNT + 1 ;
END LOOP;
WS_COUNT := WS_COUNT - 1;
WS_PRESENT_ROW := WS_TABLE.FIRST;
dbms_output.put_LINE (WS_PRESENT_ROW) ;
FOR WS_X IN 1 .. WS_COUNT
LOOP
DBMS_OUTPUT.PUT_LINE(WS_PRESENT_ROW || ':' || WS_TABLE(WS_PRESENT_ROW) ) ;
WS_PRESENT_ROW := WS_TABLE.NEXT(WS_PRESENT_ROW) ;
END LOOP;

EXCEPTION
WHEN OTHERS
THEN
dbms_output.put_line('ERROR'||SQLCODE ||':' || SQLERRM);
END ;
*******************************************
EMP_FUNCTION
create or replace
FUNCTION emp_FUNCTION
( WS_EMP_ID IN NUMBER DEFAULT NULL ,
WS_EMP_NAME IN char DEFAULT NULL,
WS_EMP_CITY in varchar DEFAULT NULL,
WS_EMP_salary IN number DEFAULT NULL,
ws_emp_dept IN NUMBER DEFAULT NULL,
WS_EMP_DEPT_NAME IN VARCHAR DEFAULT NULL,
WS_MESSAGE OUT VARCHAR
)
RETURN VARCHAR

IS
WS_EMPLOYEES VARCHAR (100) ;
CURSOR CUR_LOAD IS
SELECT * FROM EMPLOYEES ;
WS_VAR EMPLOYEES%rowtype ;
begin
OPEN CUR_LOAD ;
LOOP
FETCH CUR_LOAD INTO WS_var;
EXIT WHEN CUR_LOAD%NOTFOUND;
IF ws_var.EMP_ID = WS_EMP_ID
THEN
insert into emphistory
(emphis_emp_id , emphis_emp_name, emphis_emp_city , emphis_salary , emphis_
dept, emphis_dept_name )
valUES (WS_EMP_ID,WS_EMP_NAME, WS_EMP_CITY,WS_EMP_SALARY, WS_EMP_DEPT,ws_em
p_dept);
END IF ;
END LOOP ;
WS_MESSAGE := 'SUCESS FUNCTION';
dbms_output.put_line(WS_MESSAGE);
RETURN ('COMPLETE FUNCTION') ;
EXCEPTION
WHEN OTHERS
THEN
raise_application_error (-20010,'error');
end EMP_FUNCTION;
**********************************
RUN_FUNCTION
SET SERVEROUTPUT ON SIZE 2000 ;
DECLARE
WS_VAR VARCHAR (20);
BEGIN
dbms_output.put_line('START MAIN');
WS_VAR := EMP_FUNCTION
(WS_EMP_ID => 100,
WS_MESSAGE => WS_VAR
);
dbms_output.put_line('JUST BEFORE MAIN PROGRAM END');
DBMS_OUTPUT.PUT_LINE('DONE DONE' || ' ' || WS_VAR);
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.PUT_LINE ('FAILUER' || SQLERRM || SQLCODE) ;

END;
**********************************
EMP_PROCEDURE
create or replace
procedure emp_procedure
( WS_EMP_ID IN NUMBER DEFAULT NULL ,
WS_EMP_NAME IN char DEFAULT NULL,
WS_EMP_CITY in varchar DEFAULT NULL,
WS_EMP_salary IN number DEFAULT NULL,
ws_emp_dept IN NUMBER DEFAULT NULL,
WS_EMP_DEPT_NAME IN VARCHAR DEFAULT NULL,
WS_MESSAGE OUT VARCHAR
)
IS
WS_EMPLOYEES VARCHAR (100) ;
CURSOR CUR_LOAD IS
SELECT * FROM EMPLOYEES ;
WS_VAR EMPLOYEES%rowtype ;
begin
OPEN CUR_LOAD ;
LOOP
FETCH CUR_LOAD INTO WS_var;
EXIT WHEN CUR_LOAD%NOTFOUND;
IF ws_var.EMP_ID = WS_EMP_ID
THEN
insert into emphistory
(emphis_emp_id , emphis_emp_name, emphis_emp_city , emphis_salary , emphis_
dept, emphis_dept_name )
valUES (WS_EMP_ID,WS_EMP_NAME, WS_EMP_CITY,WS_EMP_SALARY, WS_EMP_DEPT,ws_em
p_dept);
END IF ;
END LOOP ;
WS_MESSAGE := 'SUCESS' ;
dbms_output.put_line(WS_MESSAGE);
EXCEPTION
WHEN OTHERS
THEN
raise_application_error (-20010,'error');
end EMP_procedure;
************************************
RUN_PROCEDURE
SET SERVEROUTPUT ON SIZE 2000 ;
DECLARE
WS_VAR VARCHAR (20);
BEGIN
dbms_output.put_line('START');
EMP_PROCEDURE
(WS_EMP_ID => 100,
WS_MESSAGE => WS_VAR
);
DBMS_OUTPUT.PUT_LINE('SUCCESS');
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.PUT_LINE ('FAILUER') ;

END;
************************************
EMP_PACKGE
CREATE PACKAGE emp_package AS
PROCEDURE EMP_P_PROCEDURE
( WS_EMP_ID IN NUMBER DEFAULT NULL ,
WS_EMP_NAME IN char DEFAULT NULL,
WS_EMP_CITY in varchar DEFAULT NULL,
WS_EMP_salary IN number DEFAULT NULL,
ws_emp_dept IN NUMBER DEFAULT NULL,
WS_EMP_DEPT_NAME IN VARCHAR DEFAULT NULL,
WS_MESSAGE OUT VARCHAR
) ;
END EMP_PACKAGE ;
/
create or replace
PACKAGE BODY EMP_PACKAGE AS
WS_OUT1 VARCHAR2 (20);
PROCEDURE EMP_P_PRIVATE
(WS_INPUT IN NUMBER DEFAULT NULL ,
WS_OUTPUT OUT VARCHAR2
)
IS
BEGIN
dbms_output.put_line('PRIVATE PROCEDURE GLOBAL VARIABLE MAIN PACKAGE ' || WS_OUT
);
WS_OUTPUT := 10;
END EMP_P_PRIVATE ;
FUNCTION emp_P_FUNCTION
( WS_EMP_ID IN NUMBER DEFAULT NULL ,
WS_EMP_NAME IN char DEFAULT NULL,
WS_EMP_CITY in varchar DEFAULT NULL,
WS_EMP_salary IN number DEFAULT NULL,
ws_emp_dept IN NUMBER DEFAULT NULL,
WS_EMP_DEPT_NAME IN VARCHAR DEFAULT NULL,
WS_MESSAGE OUT VARCHAR
)
RETURN VARCHAR

IS
WS_EMPLOYEES VARCHAR (100) ;
CURSOR CUR_LOAD IS
SELECT * FROM EMPLOYEES ;
WS_VAR EMPLOYEES%rowtype ;
begin
dbms_output.put_line('GLOBAL VARIABLE MAIN PACKAGE ' || WS_OUT );
EMP_P_PRIVATE (10,WS_OUTPUT => WS_OUT);
DBMS_OUTPUT.PUT_LINE (WS_OUT) ;
OPEN CUR_LOAD ;
LOOP
FETCH CUR_LOAD INTO WS_var;
EXIT WHEN CUR_LOAD%NOTFOUND;
IF ws_var.EMP_ID = WS_EMP_ID
THEN
insert into emphistory
(emphis_emp_id , emphis_emp_name, emphis_emp_city , emphis_salary , emphis_
dept, emphis_dept_name )
valUES (WS_EMP_ID,WS_EMP_NAME, WS_EMP_CITY,WS_EMP_SALARY, WS_EMP_DEPT,ws_em
p_dept);
END IF ;
END LOOP ;
WS_MESSAGE := 'SUCESS FUNCTION';
dbms_output.put_line(WS_MESSAGE);
RETURN ('COMPLETE FUNCTION') ;
EXCEPTION
WHEN OTHERS
THEN
raise_application_error (-20010,'error');
end EMP_P_FUNCTION;
PROCEDURE EMP_P_PROCEDURE
( WS_EMP_ID IN NUMBER DEFAULT NULL ,
WS_EMP_NAME IN char DEFAULT NULL,
WS_EMP_CITY in varchar DEFAULT NULL,
WS_EMP_salary IN number DEFAULT NULL,
ws_emp_dept IN NUMBER DEFAULT NULL,
WS_EMP_DEPT_NAME IN VARCHAR DEFAULT NULL,
WS_MESSAGE OUT VARCHAR
)
IS
WS_EMPLOYEES VARCHAR (100) ;
CURSOR CUR_LOAD IS
SELECT * FROM EMPLOYEES ;
WS_VAR EMPLOYEES%rowtype ;
begin
dbms_output.put_line('PACKAGE PROCEDURE START ');
OPEN CUR_LOAD ;
LOOP
FETCH CUR_LOAD INTO WS_var;
EXIT WHEN CUR_LOAD%NOTFOUND;
IF ws_var.EMP_ID = WS_EMP_ID
THEN
insert into emphistory
(emphis_emp_id , emphis_emp_name, emphis_emp_city , emphis_salary , emphis_
dept, emphis_dept_name )
valUES (WS_EMP_ID,WS_EMP_NAME, WS_EMP_CITY,WS_EMP_SALARY, WS_EMP_DEPT,ws_em
p_dept);
dbms_output.put_line('INSERT SUCESS');
END IF ;
END LOOP ;
WS_MESSAGE := 'SUCESS PACKAGE PROCEDURE' ;
dbms_output.put_line(WS_MESSAGE);
EXCEPTION
WHEN OTHERS
THEN
dbms_output.put_line('FAILUER PACKAGE PROCEDURE' || SQLCODE || ';' || SQLERRM
);
raise_application_error (-20010,'error');
end EMP_P_procedure;
END EMP_PACKAGE ;
****************************
RUN PACKAGE FUNCTION
SET SERVEROUTPUT ON SIZE 2000 ;
DECLARE
WS_VAR VARCHAR (20);
BEGIN
dbms_output.put_line('START MAIN');
WS_VAR := EMP_PACKAGE.EMP_P_FUNCTION
(WS_EMP_ID => 100,
WS_MESSAGE => WS_VAR
);
dbms_output.put_line('JUST BEFORE MAIN PROGRAM END');
DBMS_OUTPUT.PUT_LINE('DONE DONE' || ' ' || WS_VAR);
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.PUT_LINE ('FAILUER' || SQLERRM || SQLCODE) ;

END;
******************************
RUN PACKAGE PROCEDURE
SET SERVEROUTPUT ON SIZE 2000 ;
DECLARE
WS_VAR VARCHAR (200);
BEGIN
dbms_output.put_line('START MAIN');
EMP_PACKAGE.EMP_P_PROCEDURE
(WS_EMP_ID => 100,
WS_MESSAGE => WS_VAR
);
DBMS_OUTPUT.PUT_LINE('COMPLETE PROCESS');
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.PUT_LINE ('FAILUER MAIN' || SQLCODE || ';' || SQLERRM) ;

END;
*************************************
TRIGGER
CREATE OR REPLACE TRIGGER EMP_TRIGGER
AFTER INSERT ON EMPLOYEES
REFERENCING OLD AS OLD_EMP NEW AS NEW_EMP
FOR EACH ROW
DECLARE
WS_DEPT_NAME DEPARTMENT.DEPT_NAME%TYPE DEFAULT NULL ;
WS_DEPT DEPARTMENT%ROWTYPE ;
BEGIN
SELECT DEPT_NAME INTO WS_DEPT_NAME
FROM department
WHERE DEPARTMENT.DEPT_NUM = :NEW_EMP.EMP_DEPT;

insert into emphistory
(emphis_emp_id , emphis_emp_name, emphis_emp_city , emphis_salary , emphis_
dept, emphis_dept_name )
valUES (:NEW_EMP.EMP_ID,:NEW_EMP.EMP_NAME,:NEW_EMP.EMP_CITY,:NEW_EMP.EMP_SA
LARY,:NEW_EMP.EMP_DEPT,
WS_DEPT_NAME);
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.PUT_LINE ('ERROR'||SQLERRM||' :' ||SQLCODE) ;
RAISE_APPLICATION_ERROR(-20010,'ERROR IN TRIGGER') ;
END EMP_TRIGGER ;
*************************************
Important
-- GIVE COLUMN NAME HAVING PRIMARY/FOREIGN(REFERENCE KEY)
SELECT a.table_name, a.column_name, c.table_name, a.column_name,C.CONSTRAINT_TYP
E
FROM ALL_CONS_COLUMNS A JOIN ALL_CONSTRAINTS C ON A.CONSTRAINT_NAME = C.CONSTRAI
NT_NAME
WHERE C.TABLE_NAME IN ( 'EMPLOYEES' , 'DEPARTMENT')
AND C.CONSTRAINT_TYPE in ('P','R') ;
-- GIVE ONLY FOREING KEY BUT WITH PARENT TABLE BANE (NOT FIELD)
SELECT UC.TABLE_NAME ,UCC.COLUMyN_NAME, ucc.table_name
FROM ALL_CONSTRAINTS UC, ALL_CONS_COLUMNS UCC
WHERE UC.R_CONSTRAINT_NAME = UCC.CONSTRAINT_NAME
AND uc.constraint_type = 'R' AND UC.TABLE_NAME IN ( 'EMPHISTORY','EMPLOYEES' ,'D
EPARTMENT') ;
-- Need to use SET while updating
UPDATE EMPLOYEES E
SET E.EMP_SALARY = 80000 WHERE
E.EMP_SALARY > 100 ;
-- If more than one column is given with Distinct, then combination should be un
ique
-- Default is ascending
SELECT DISTINCT EMP_DEPT,EMP_NAME,EMP_SALARY FROM employees order by emp_dept DE
SC, emp_name DESC ;
-- Cann't use order by with Group
-- cann't use any field other than given in group by. It is applicable also for
HAVING clause
-- in PL/SQL we have to use INTO clause
SELECT EMP_DEPT,SUM(emp_salary), count(emp_id) FROM employees
group by emp_dept
having sum(emp_salary) > 4000;
select substr(emp_salary,1,2) from employees;
--- below command not working because in PL/SQL, rownum are assigned before orde
r by.
--- Also TOP command does not work
select emp_id, emp_salary
from employees
order by emp_id
where emp_salary > 40000
rownum <=1;
--- two ways to find max salary
select * from (select emp_name,Emp_salary from employees order by emp_salary des
c) where rownum <=1 ;
********************************************
others
drop table employees ;
create table department
(Dept_name varchar (20) , dept_manager varchar (40) , Dept_num number (10) prima
ry key);
insert into department
(Dept_name, dept_manager, Dept_num)
values ('is','james', 01);
create table employees
(emp_name char (10),
emp_id number primary key,
emp_city varchar (10),
emp_salary number ,
emp_dept number (10) references department (dept_num),
emp_nationality varchar (5) ) ;
insert into employees
(emp_name, emp_id, emp_city, emp_salary, emp_dept, emp_nationality)
values ('gorav', 100, 'hissar', 75000,01,'in') ;
describe employees;
Select
emp_name, emp_city, emp_salary,Dept_name
from employees e ,department d
where e.emp_dept = d.dept_num
order by dept_name;
Select emp_dept, sum (emp_salary)
from employees
group by emp_dept
having ( sum (emp_salary) > 50000 );
-- group by, select can have aggregation function or fields used in group by

Das könnte Ihnen auch gefallen