Sie sind auf Seite 1von 12

CREATE TABLE employees_temp AS SELECT EMPLOYEE_ID, FIRST_NAME, LAST_NAME

FROM EMPLOYEE;
DECLARE
emp_id employees_temp.employee_id%TYPE;
emp_first_name employees_temp.first_name%TYPE;
emp_last_name employees_temp.last_name%TYPE;
BEGIN
INSERT INTO employees_temp VALUES(299, 'Bob', 'Henry'); ---INSERT
UPDATE employees_temp SET first_name = 'Robert' WHERE employee_id = 299; -----UPDATE
DELETE FROM employees_temp WHERE employee_id = 299 -----DELECT
RETURNING first_name, last_name INTO emp_first_name, emp_last_name;
COMMIT;
DBMS_OUTPUT.PUT_LINE( emp_first_name || ' ' || emp_last_name);
END;

---SQL%ROWCOUNT
CREATE TABLE employee_temp AS SELECT * FROM employee;
BEGIN
UPDATE employee_temp SET salary = salary * 1.05 WHERE salary < 2500;
DBMS_OUTPUT.PUT_LINE('Updated ' || SQL%ROWCOUNT || ' salaries.');
END;

SELECT * FROM dept_temp;


-----%FOUND
CREATE TABLE dept_temp AS SELECT * FROM department;
DECLARE
dept_no NUMBER(4) := 20;
BEGIN
DELETE FROM dept_temp WHERE department_id = dept_no;
IF SQL%FOUND THEN -- delete succeeded
INSERT INTO dept_temp VALUES (20, 'Personnel', 200);
END IF;
END;

-----NOTFOUND
DECLARE
v_jobid employee.job_id%TYPE; -- variable for job_id
v_lastname employee.last_name%TYPE; -- variable for last_name
CURSOR c1 IS SELECT last_name, job_id FROM employee
WHERE job_id=670;
v_employees employee%ROWTYPE; -- record variable for row
CURSOR c2 is SELECT * FROM employee
WHERE job_id=671;
BEGIN
OPEN c1; -- open the cursor before fetching
LOOP
FETCH c1 INTO v_lastname, v_jobid; -- fetches 2 columns into variables
EXIT WHEN c1%NOTFOUND;
DBMS_OUTPUT.PUT_LINE( RPAD(v_lastname, 25, ' ') || v_jobid );
END LOOP;
CLOSE c1;
DBMS_OUTPUT.PUT_LINE( '-------------------------------------' );
OPEN c2;
LOOP
FETCH c2 INTO v_employees; -- fetches entire row into the v_employees record
EXIT WHEN c2%NOTFOUND;
DBMS_OUTPUT.PUT_LINE( RPAD(v_employees.last_name, 25, ' ') ||
v_employees.job_id );
END LOOP;
CLOSE c2;
END;

-------ref cursor
set serveroutput on;
DECLARE
TYPE REF_CUR IS REF CURSOR RETURN emp%ROWTYPE;
V_REF_CUR REF_CUR;
V_EMP emp%ROWTYPE;
begin
open V_REF_CUR FOR select * from emp;
loop
FETCH V_REF_CUR INTO V_EMP;
EXIT WHEN V_REF_CUR%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(V_EMP.ename||' '||V_EMP.empno||' '||V_EMP.job||' '||V_EMP.job);
END LOOP;
CLOSE V_REF_CUR;
END;

-----cursor
set serveroutput on;
DECLARE
CURSOR emp_cursor IS SELECT empno,ename FROM emp;
v_empno emp.empno%TYPE;
v_ename emp.ename%TYPE;
BEGIN
IF NOT emp_cursor% ISOPEN THEN
OPEN emp_cursor;
END IF;
LOOP
FETCH emp_cursor INTO v_empno,v_ename;
EXIT WHEN emp_cursor%NOTFOUND;
DBMS_OUTPUT.PUT_LINE('EMP NAME: '||v_ename||' EMP NO: '||v_empno);
END LOOP;
CLOSE emp_cursor;
END;
select * from emp;
-----cursor parameter
set serveroutput on;
declare
cursor cur_emp1(in_deptno integer) is select * from emp where deptno=in_deptno;
v_cur cur_emp1%rowtype;
begin
open cur_emp1(20);
loop
fetch cur_emp1 into v_cur;
DBMS_OUTPUT.PUT_LINE('ename :'||v_cur.ename);
exit when cur_emp1%notfound;
end loop;
close cur_emp1;
open cur_emp1(10);
loop
fetch cur_emp1 into v_cur;
DBMS_OUTPUT.PUT_LINE('ename :'||v_cur.ename);
exit when cur_emp1%notfound;
end loop;
close cur_emp1;
end;

----------for loop using cursor


begin
for i in(select * from emp)loop
dbms_output.put_line('employee name :'||i.ename);
end loop;
end;

-------ref cursor
set serveroutput on;
DECLARE
TYPE REF_CUR IS REF CURSOR RETURN emp%ROWTYPE;
V_REF_CUR REF_CUR;
V_EMP emp%ROWTYPE;
begin
open V_REF_CUR FOR select * from emp;
loop
FETCH V_REF_CUR INTO V_EMP;
EXIT WHEN V_REF_CUR%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(V_EMP.ename||' '||V_EMP.empno||' '||V_EMP.job||' '||V_EMP.job);
END LOOP;
CLOSE V_REF_CUR;
END;

set serveroutput on; -----Nested Blocks and Variable Scope


DECLARE
l_x INTEGER;
BEGIN
l_x := 9;
DECLARE
l_y NUMBER;
BEGIN
l_y:= l_x;
dbms_output.put_line('l_y='||l_y||'l_x='||l_x);
END;
l_x := 20;
dbms_output.put_line('l_x='||l_x);
END;

set serveroutput on;


SELECT * FROM emp;
declare
l_sal emp.sal%TYPE; -------%type
BEGIN
SELECT sal INTO l_sal
FROM EMP WHERE EMPNO=7499;
dbms_output.put_line('SAL='||L_sal);
end;

-----%ROWTYPE
set serveroutput on;
DECLARE
customer_rec emp%rowtype;
BEGIN
SELECT * into customer_rec
FROM emp
WHERE EMPNO = 7654;
dbms_output.put_line('Customer ID: ' || customer_rec.EMPNO);
dbms_output.put_line('Customer Name: ' || customer_rec.Ename);
dbms_output.put_line('Customer JOB: ' || customer_rec.JOB);
dbms_output.put_line('Customer Salary: ' || customer_rec.sal);
END;
------IF ELSE
SET SERVEROUTPUT ON;
DECLARE
l_start INTEGER:= 60;
BEGIN
IF l_start > 100 THEN
l_start := 0.2 * l_start;
ELSIF l_start >= 50 THEN
l_start := 0.5 * l_start;
ELSE
l_start := 0.1 * l_start;
END IF;
dbms_output.put_line('l_start : '||l_start);
END;

-----CASE 2. Create a standalone block using CASE statement to display


appraisal based on input grade.
SET SERVEROUTPUT ON;
DECLARE
l_grade CHAR(1) := UPPER('&p_grade');
l_appraisal VARCHAR2(20);
BEGIN
l_appraisal :=
CASE l_grade
WHEN 'A' THEN 'Excellent'
WHEN 'B' THEN 'Very Good'
WHEN 'C' THEN 'Good'
ELSE 'No such grade'
END;
DBMS_OUTPUT.PUT_LINE ('Grade: '|| l_grade || ' Appraisal ' || l_appraisal);
END;

DECLARE
l_grade CHAR(1) :='&p_grade';
l_appraisal VARCHAR2(20);
BEGIN
l_appraisal :=
CASE
WHEN l_grade='A' THEN 'Excellent'
WHEN l_grade='B' THEN 'Very Good'
WHEN l_grade='C' THEN 'Good'
ELSE 'No such grade'
END;
DBMS_OUTPUT.PUT_LINE ('Grade: '|| l_grade || ' Appraisal ' || l_appraisal);
END;

-----loop
SELECT * FROM EMPLOYEE;
DECLARE
EMPP INTEGER;
BEGIN
SELECT COUNT(*) INTO EMPP FROM employee WHERE deptid=10;
LOOP
DBMS_OUTPUT.PUT_LINE ('EMPP '||EMPP);
EXIT WHEN EMPP=0;
EMPP:=EMPP-1;
END LOOP;
END;

-----------while loop
DECLARE
EMPP INTEGER;
BEGIN
SELECT COUNT(*) INTO EMPP FROM employee WHERE deptid=10;
while EMPP>=0
LOOP
DBMS_OUTPUT.PUT_LINE ('EMPP '||EMPP);
EMPP:=EMPP-1;
END LOOP;
END;

-------------------FOR LOOP
DECLARE
EMPP INTEGER;
BEGIN
SELECT COUNT(*) INTO EMPP FROM employee WHERE deptid=10;
FOR i IN 0..EMPP
LOOP
DBMS_OUTPUT.PUT_LINE ('EMPP '||EMPP);
EMPP:=EMPP-1;
END LOOP;
END;
set SERVEROUTPUT ON;                                                    ----1procedure
CREATE OR REPLACE PROCEDURE greetings 
AS 
BEGIN 
   dbms_output.put_line('Hello World!'); 
END;
EXECUTE greetings;
begin 
greetings;
end;
                                                                   ----2procedure
CREATE OR REPLACE PROCEDURE welcome_msg (p_name IN VARCHAR2) 
AS
BEGIN
dbms_output.put_line('Welcome '||p_name);
END welcome_msg;

declare
p_name VARCHAR2(20);
BEGIN
--p_name:='&n';
welcome_msg ('&p_name');
ENd;
                                                              -----------------3procedure
create PROCEDURE findMin(x IN number, y IN number, z OUT number) IS 
BEGIN 
   IF x < y THEN 
      z:= x; 
   ELSE 
      z:= y; 
   END IF; 
END;  

declare 
x integer;
y integer;
z integer;
BEGIN 
   x:= 23; 
   y:= 45; 
   findMin(x,y,z); 
   dbms_output.put_line(' Minimum of (23, 45) : ' || z); 
END; 
                                           ------4procedure
select * from customer_table;
CREATE OR REPLACE PROCEDURE print_contact(
    P_customer_id NUMBER )
IS
  r_contact customer_table%ROWTYPE;
BEGIN
  -- get contact based on customer id
  SELECT *
  INTO r_contact
  FROM customer_table
  WHERE custid = p_customer_id;
  dbms_output.put_line( r_contact.firstname || ' ' ||
  r_contact.lastname || '<' || r_contact.on_board_date ||'>' );
EXCEPTION
   WHEN OTHERS THEN
      dbms_output.put_line( SQLERRM );
END;
execute print_contact(10);

CREATE OR REPLACE FUNCTION get_sal ------creating function


(i_empno IN emp.empid%TYPE)
RETURN NUMBER
IS
r_empsal emp.salary%TYPE;
BEGIN
SELECT salary INTO r_empsal FROM emp
WHERE empid = i_empno;
RETURN r_empsal;
END get_sal;

SELECT get_sal(5112) FROM SYS.dual;


DECLARE
c number(10);
BEGIN
c := get_sal(5112);
dbms_output.put_line('Total no. of Customers: ' || c);
END;

CREATE OR REPLACE FUNCTION totalCustomers


RETURN number IS
total number(2) := 0;
BEGIN
SELECT count(*) into total
FROM customertable;

RETURN total;
END;
DECLARE
c number(2);
BEGIN
c := totalCustomers();
dbms_output.put_line('Total no. of Customers: ' || c);
END;

------ PACKAGE
CREATE PACKAGE cust_sal AS
PROCEDURE print_contact(
P_customer_id NUMBER );
FUNCTION totalCustomers
RETURN number ;
END cust_sal;

Das könnte Ihnen auch gefallen