Basic structures напишете pl/sql блок, който въвежда номера в таблицата messages


Total Salary for Unidentified departments IS 11000



страница2/6
Дата30.03.2017
Размер450.15 Kb.
#18074
1   2   3   4   5   6
    Навигация на страницата:
  • RESULT

Total Salary for Unidentified departments IS 11000


##########################################################

SET SERVEROUT ON

DECLARE

sal_total NUMBER;



dept_no emp.deptno%TYPE;

CURSOR c_sal IS

SELECT sum(sal), deptno

FROM emp


GROUP BY deptno;

BEGIN


OPEN c_sal;

LOOP


FETCH c_sal INTO sal_total, dept_no;

EXIT WHEN c_sal%NOTFOUND;

IF dept_no IS NOT NULL THEN

dbms_output.put_line('Total Salary for Department '|| dept_no||' IS ' ||sal_total);

ELSE

dbms_output.put_line('Total Salary for Unidentified departments IS ' ||sal_total);



END IF;

END LOOP;

CLOSE c_sal;

END;


/
Как бихте могли да получите същият резултат без да използвате PL/SQL блок?

######################################################

SELECT 'Total Salary for Department '|| deptno||' IS ' ||sum(sal) as "TOTAL SALARY"

FROM emp


WHERE deptno is not null

GROUP by deptno

UNION

SELECT 'Total Salary for Unidentified departments IS ' ||sum(sal) as "TOTAL SALARY "



FROM emp

WHERE deptno is null

GROUP BY deptno

/**************************************************** Variant 2 *************************************************/


/*SELECT DECODE(NVL(deptno,-1),

'-1', 'Total Salary for unidentified departments IS ' ||sum(sal),

'Total Salary for Department '|| deptno||' IS ' ||sum(sal)

)

as "TOTAL SALARY"



FROM emp

GROUP BY deptno

*/


  1. Разгледайте функциите rank() и dense_rank() в SQL Reference от документацията. Можете ли стяхна помощ да реализирате зад.3 без да използвате курсори и цикли?
    Кое от решенията е по-ефективно?


###################################################

begin

insert into top_dogs as

select ename,sal

from

(

select w.ename,w.sal, rank() over (order by sal desc) top_n

from emp w

)

where top_n <=3 -- rownum <=2

end

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

begin

insert into top_dogs as

select ename,sal

from

(select e.ename,e.sal, dense_rank() over (order by sal desc) top_n

from emp e )

where top_n <=3

end

EXCEPTIONS

  1. Напишете PL/SQL блок, който селектира името на работникът с дадена заплата.

  1. Ако въведената заплата връща повече от един ред, прихванете изключението и въведете в таблицата MESSAGES съобщението “More than one employee with a salary of ”;

##############################

SET VERIFY OFF

ACCEPT p_sal PROMPT 'Please enter the salary value: '

DECLARE


v_ename emp.ename%TYPE;

v_sal emp.sal%TYPE := &p_sal;

BEGIN

SELECT ename



INTO v_ename

FROM emp


WHERE sal = v_sal;

INSERT INTO messages (results)

VALUES (v_ename || ' - ' || v_sal);

EXCEPTION

WHEN no_data_found THEN

INSERT INTO messages (results)

VALUES ('No employee with a salary of '|| TO_CHAR(v_sal));

WHEN too_many_rows THEN

INSERT INTO messages (results)

VALUES ('More than one employee with a salary of '||

TO_CHAR(v_sal));

WHEN others THEN

INSERT INTO messages (results)

VALUES ('Some other error occurred.');

END;

/

SET VERIFY ON



  1. Ако въведената заплата не връща нито един ред, прихванете изключението и въведете в таблицата MESSAGES съобщението “No employee with a salary of ”;

  2. Ако въведената заплата връща само един ред, въведете в таблицата MESSAGES името на работника и неговата заплата;

###########################################

SET VERIFY OFF

ACCEPT p_sal PROMPT 'Please enter the salary value: '

DECLARE


v_ename emp.ename%TYPE;

v_sal emp.sal%TYPE := &p_sal;

v_err_code NUMBER;

v_err_msg VARCHAR(100);

BEGIN

SELECT ename



INTO v_ename

FROM emp


WHERE sal = v_sal;

INSERT INTO messages (results)

VALUES (v_ename || ' - ' || v_sal);

EXCEPTION

WHEN no_data_found THEN

INSERT INTO messages (results)

VALUES ('No employee with a salary of '|| TO_CHAR(v_sal));

WHEN too_many_rows THEN

INSERT INTO messages (results)

VALUES ('More than one employee with a salary of '||TO_CHAR(v_sal));

WHEN others THEN

v_err_code:=SQLCODE;

v_err_msg :=SQLERRM;

INSERT INTO messages (results)

VALUES ('Some other error occurred.'||' ErrorCode='||TO_CHAR(v_err_code)|| '. Msg='||v_err_msg);

END;


/

SET VERIFY ON



  1. Прихванете останалите изключения и въведете в таблицата MESSAGES съобщението “Some other error occurred.”

  2. Тествайте програмата:

    1. Тествайте със следните стойности за заплатата: 2850, 5000, 3000, 33

    2. Как да тестваме OTHERS?

  3. Променете програмата, така че случая на непредвидена грешка в (случая OTHERS) да се записва номера и съобщението на грешката.

  1. Създайте PL/SQL блок, които променя местоположението на съществуващ отдел. Съхранете вашия PL/SQL блок във файл наречен Except_Sol2.sql.

    1. Използвайте субституционен параметър за номера на отдела;

    2. Използвайте субституционен параметър за местоположението на отдела;

    3. Тествайте блока;

#################################3

SET VERIFY OFF

ACCEPT p_deptno PROMPT 'Please enter the department number: '

ACCEPT p_loc PROMPT 'Please enter the department location: '

BEGIN

UPDATE dept



SET loc = UPPER('&p_loc')

WHERE deptno = &p_deptno;

COMMIT;

END;


/

SET VERIFY ON



    1. Изкарайте номера, името и местоположението на променения отдел.

#################################

SELECT *


FROM dept

WHERE deptno = &p_deptno;



  1. Модифицирайте Except_Sol2.sql и добавете exception handler.

    1. Напишете подходящ exception handler, така че да изкарате съобщение на потребителя, когото подадения от него номер на отдел е номер на несъществуващ отдел;

    2. Изпълнете PL/SQL блокът като въведете отдел, който не съществува.

################################################

SET VERIFY OFF

VARIABLE g_message VARCHAR2(40)

ACCEPT p_deptno PROMPT 'Please enter the department number: '

ACCEPT p_loc PROMPT 'Please enter the department location: '

DECLARE


e_invalid_dept EXCEPTION;

v_deptno dept.deptno%TYPE := &p_deptno;

BEGIN

UPDATE dept



SET loc = '&p_loc'

WHERE deptno = v_deptno;

COMMIT;

IF SQL%NOTFOUND THEN



raise e_invalid_dept;

END IF;


EXCEPTION

WHEN e_invalid_dept THEN

:g_message := 'Department '|| TO_CHAR(v_deptno) ||

' is an invalid department';

END;

/

SET VERIFY ON



PRINT g_message

  1. Напишете PL/SQL блок, който отпечатва номерата на работниците, които имат плюс или минус 100 от заплатата, въведена като параметър.

    1. Ако няма работници във този обхват, изкарайте съобщение на потребителя указващо, че случаят е такъв;

    2. Ако има един или повече работници в този обхват, съобщението трябва да указва колко са на брой работниците от обхвата;

###################################################

VARIABLE g_message VARCHAR2(100)

SET VERIFY OFF

ACCEPT p_sal PROMPT 'Please enter the salary: '

DECLARE

v_sal emp.sal%TYPE := &p_sal;



v_low_sal emp.sal%TYPE := v_sal - 100;

v_high_sal emp.sal%TYPE := v_sal + 100;

v_no_emp NUMBER(7);

e_no_emp_returned EXCEPTION;

e_more_than_one_emp EXCEPTION;

BEGIN


SELECT count(ename)

INTO v_no_emp

FROM emp

WHERE sal between v_low_sal and v_high_sal;

IF v_no_emp = 0 THEN

RAISE e_no_emp_returned;

ELSIF v_no_emp > 0 THEN

RAISE e_more_than_one_emp;

END IF;

EXCEPTION



WHEN e_no_emp_returned THEN

:g_message := 'There is no employee salary between '||

TO_CHAR(v_low_sal) || ' and '||

TO_CHAR(v_high_sal);

WHEN e_more_than_one_emp THEN

:g_message := 'There is/are '|| TO_CHAR(v_no_emp) ||

' employee(s) with a salary between '||

TO_CHAR(v_low_sal) || ' and '||

TO_CHAR(v_high_sal);

END;


/

SET VERIFY ON

PRINT g_message


    1. Прихванете всички останали изключения. Съобщението трябва да указва, че някаква друга грешка е възникнала.

##############################################3

SET VERIFY OFF

SET SERVEROUTPUT ON

ACCEPT p_sal PROMPT 'Please enter the salary: '

DECLARE

v_sal emp.sal%TYPE := &p_sal;



v_low_sal emp.sal%TYPE := v_sal - 100;

v_high_sal emp.sal%TYPE := v_sal + 100;

v_no_emp NUMBER(7);

e_no_emp_returned EXCEPTION;

e_more_than_one_emp EXCEPTION;

BEGIN


SELECT count(ename)

INTO v_no_emp

FROM emp

WHERE sal between v_low_sal and v_high_sal;

IF v_no_emp = 0 THEN

RAISE e_no_emp_returned;

ELSIF v_no_emp > 0 THEN

RAISE e_more_than_one_emp;

END IF;

EXCEPTION



WHEN e_no_emp_returned THEN

dbms_output.put_line('There is no employee salary between '||

TO_CHAR(v_low_sal) || ' and '||

TO_CHAR(v_high_sal));

WHEN e_more_than_one_emp THEN

dbms_output.put_line( 'There is/are '|| TO_CHAR(v_no_emp) ||

' employee(s) with a salary between '||

TO_CHAR(v_low_sal) || ' and '||

TO_CHAR(v_high_sal));

WHEN others THEN

dbms_output.put_line( 'Some other error occured.');

END;


/

SET VERIFY ON



EXPLICIT CURSORS

  1. Използвайте курсор, за да върнете номер и име на отдел от таблицата DEPT. Подайте номерът на отдела на друг курсор, за да върнете от таблицата EMP информация за името, длъжността, дата на назначаване и заплатата на всички работници, които работят в този отдел.

Department Number : 10 Department Name : ACCOUNTING

CLARK MANAGER 09-JUN-81 2450

MILLER CLERK 23-JAN-82 1300

DOE CLERK 05-MAR-04

Department Number : 20 Department Name : RESEARCH

JONES MANAGER 02-APR-81 2975

SMITH CLERK 17-DEC-80 800

ADAMS CLERK 12-JAN-83 1100

JONES1 MANAGER 02-APR-81 2975

Department Number : 30 Department Name : SALES

BLAKE MANAGER 01-MAY-81 2850

MARTIN SALESMAN 28-SEP-81 1250

ALLEN SALESMAN 20-FEB-81 1600

TURNER SALESMAN 08-SEP-81 1500

JAMES CLERK 03-DEC-81 950

WARD SALESMAN 22-FEB-81 1250

Department Number : 40 Department Name : OPERATIONS

#################################################

SET SERVEROUTPUT ON

DECLARE


CURSOR dept_cursor IS

SELECT deptno,dname

FROM dept

ORDER BY deptno;

CURSOR emp_cursor (v_deptno NUMBER) IS

SELECT ename,job,hiredate,sal

FROM emp

WHERE deptno = v_deptno;

v_current_deptno dept.deptno%TYPE;

v_current_dname dept.dname%TYPE;

v_ename emp.ename%TYPE;

v_job emp.job%TYPE;

v_mgr emp.mgr%TYPE;

v_hiredate emp.hiredate%TYPE;

v_sal emp.sal%TYPE;

v_line varchar2(100);

BEGIN

v_line := '



';

OPEN dept_cursor;

LOOP

FETCH dept_cursor INTO v_current_deptno,v_current_dname;



EXIT WHEN dept_cursor%NOTFOUND;

DBMS_OUTPUT.PUT_LINE ('Department Number : ' || v_current_deptno || ' Department Name : ' || v_current_dname);

DBMS_OUTPUT.PUT_LINE(v_line);

IF emp_cursor%ISOPEN THEN

CLOSE emp_cursor;

END IF;


OPEN emp_cursor (v_current_deptno);

LOOP


FETCH emp_cursor INTO v_ename,v_job,v_hiredate,v_sal;

EXIT WHEN emp_cursor%NOTFOUND;

DBMS_OUTPUT.PUT_LINE (v_ename || ' ' || v_job || ' ' || v_hiredate || ' ' || v_sal);

END LOOP;

IF emp_cursor%ISOPEN THEN

CLOSE emp_cursor;

END IF;

DBMS_OUTPUT.PUT_LINE(v_line);



END LOOP;

IF emp_cursor%ISOPEN THEN

CLOSE emp_cursor;

END IF;


CLOSE dept_cursor;

END;


/

SET SERVEROUTPUT OFF





  1. Добавете нова колона наречена STARS от тип VARCHAR2 и дължина 50 в таблицата EMP за съхранение на звездички.

############################################

ALTER TABLE emp

ADD stars VARCHAR2(50)

/

  1. Създайте блок, който награждава работник като добавя звездички в колоната STARS за всеки 100$ от заплатата му. Съхранете този блок във файл наречен p3.sql.

    1. Приемете номера на работника като като потребителски вход чрез субституционна променлива на SQL*Plus;

    2. Инициализирайте променливата, която ще съдържа низа от звездички;

    3. Добавяйте звездичка в низа за всеки 100$ от заплатат му. Например, ако работникът има заплата от 800$, низът от звездички ще съдържа 8 звездички. Ако работникът има заплата от 1250$, низът от звездички ще съдържа 13 звездички;

    4. Променете STARS колоната на работника със съответния брой звезди;

    5. Потвърдете направената промяна;

    6. Тествайте блока за работници, които имат нямат заплата, както и за работници, които имат.

####################################

SET VERIFY OFF

ACCEPT p_empno PROMPT 'Please enter the employee number: '

DECLARE


v_empno emp.empno%TYPE := &p_empno;

v_asterisk emp.stars%TYPE := NULL;

v_sal emp.sal%TYPE;

BEGIN


SELECT NVL(ROUND(sal/100), 0)

INTO v_sal

FROM emp

WHERE empno = v_empno;

FOR i IN 1..v_sal LOOP

v_asterisk := v_asterisk ||'*';

END LOOP;

UPDATE emp

SET stars = v_asterisk

WHERE empno = v_empno;

COMMIT;

END;


/

SET VERIFY ON



  1. Модифицирайте p3.sql, за да включите FOR UPDATE и WHERE CURRENT OF функционалност в изпълнението на курсор.

################################################

SET VERIFY OFF

ACCEPT p_empno PROMPT 'Please enter the employee number: '

DECLARE

v_empno emp.empno%TYPE := &p_empno;

v_asterisk emp.stars%TYPE := NULL;

CURSOR emp_cursor IS

SELECT empno, NVL(ROUND(sal/100), 0) sal

FROM emp

WHERE empno = v_empno

FOR UPDATE;

BEGIN

FOR emp_record IN emp_cursor LOOP

FOR i IN 1..emp_record.sal LOOP

v_asterisk := v_asterisk ||'*';

END LOOP;

UPDATE emp

SET stars = v_asterisk

WHERE CURRENT OF emp_cursor;

v_asterisk := NULL;

END LOOP;

COMMIT;

END;

/

SET VERIFY ON

CREATING PROCEDURES

  1. Създайте и извикайте съхранена процедура LOG_EXECUTION без параметри, която записва потребителя и текущата дата в таблицата LOG_TABLE. Разгледайте получените резултати.

##############################################################

CREATE OR REPLACE PROCEDURE log_execution

IS

BEGIN

INSERT INTO log_table (user_id, log_date)

VALUES (user, sysdate);

END log_execution;

/

  1. Създайте и извикайте процедура LEAVE_EMP и разгледайте получените резултати.

    1. Създайте процедура наречена LEAVE_EMP за изтриване на работник от таблицата EMP.

    2. Подайте номера на работника, който е напуснал като параметър.

    3. Използвайте процедурата LOG_EXECUTION, за да регистрирате в таблицата LOG_TABLE потребителя, който изпълнява процедурата LEAVE_EMP.

    4. Тествайте процедурата и разгледайте получените резултати.

####################################################

CREATE OR REPLACE PROCEDURE leave_emp (v_id IN emp.empno%TYPE)

IS

BEGIN


DELETE FROM emp

WHERE empno = v_id;

log_execution;

END leave_emp;

/


  1. Създайте и извикайте процедурата ADD_PROD и разгледайте получените резултати.

    1. Създайте процедура наречена ADD_PROD за въвеждане на нов продукт в таблицата PRODUCT.

    2. Подайте номер на продукт и негово описание като използвате 2 параметъра.

    3. Компилирайте кода, извикайте процедурата и напишете заявка върху таблицата PRODUCT, за да видите резултата.

    4. Извикайте процедурата отново, подавайки продукт с номер 100860. Какво се случва и защо?

#######################################

CREATE OR REPLACE PROCEDURE add_prod

(v_prodid IN product.prodid%TYPE,

v_descrip IN product.descrip%TYPE)

IS

BEGIN


INSERT INTO product (prodid, descrip)

VALUES (v_prodid, v_descrip);

COMMIT;

END add_prod;



/

  1. Създайте и извикайте процедура наречена UPD_PROD за модифициране на продукт в таблицата PRODUCT.

  1. Създайте процедура наречена UPD_PROD за промяна на описанието на продукт. Подайте номер на продукт и ново описание като използвате 2 параметъра. Включете необходимата обработка на изключения, ако не са настъпили никакви промени.

  2. Компилирайте кода, извикайте процедурата и след това изкарайте необходимата информация от таблицата PRODUCT, за да видите резултатите. Проверете също обработката на изключения като се опитате да промените несъществуващ продукт.

###########################################

CREATE OR REPLACE PROCEDURE upd_prod

(v_prodid IN product.prodid%TYPE,

v_descrip IN product.descrip%TYPE)

IS

BEGIN


UPDATE product

SET descrip = v_descrip

WHERE prodid = v_prodid;

IF SQL%NOTFOUND THEN

RAISE_APPLICATION_ERROR(-20202,'No products updated.');

END IF;


END upd_prod;

/


  1. Създайте и извикайте процедура наречена DEL_PROD за изтриване на продукт от таблицата PRODUCT.

  1. Създайте процедура наречена DEL_PROD за изтриване на продукт от таблицата PRODUCT. Включете необходимата обработка на изключения, ако не е изтрит нито един продукт.

  2. Компилирайте кода, извикайте процедурата и напишете заявка върху таблицата PRODUCT, за да видите резултата. Проверете и обработката на изключения като се опитате да изтриете несъществуващ продукт.

#####################################

CREATE OR REPLACE PROCEDURE del_prod

(v_prodid IN product.prodid%TYPE)

IS

BEGIN



DELETE FROM product

WHERE prodid = v_prodid;

IF SQL%NOTFOUND THEN

RAISE_APPLICATION_ERROR(-20203,'No products deleted.');

END IF;

END DEL_PROD;



/

  1. Създайте процедура наречена QUERY_EMP, която извлича информация от таблицата EMP , връщайки заплатата и длъжността на работник, когато подадете номера на работник.

  1. Създайте процедура, която връща стойности от колоните SAL и JOB за определен работник (използвайте EMPNO).

  2. Използвайте променливи на средата за двата OUT параметъра.

  3. Компилирайте кода, извикайте процедурата и изкарайте на екрана заплатата и длъжността за работник с номер 7839.

  4. Извикайте процедурата отново, подавайки работник с номер 9898. Какво се случва и защо?

###########################################3

CREATE OR REPLACE PROCEDURE query_emp

(v_empno IN emp.empno%TYPE,

v_sal OUT emp.sal%TYPE,

v_job OUT emp.job%TYPE)

IS

BEGIN



SELECT sal, job

INTO v_sal, v_job

FROM emp

WHERE empno = v_empno;

END query_emp;

/

Допълнителна задача (с малко по-висока трудност от горните)



Задача 7.

Създайте процедура наречена UPD_DEPT_DEPTNO, която променя номер на отдел. Уверете се, че в случая когато променяме номер на непразен отдел (с регистрирани работници), процедурата работи коректно.

Как се държи вашата процедура, когато и се подаде несъществуващ номер на отдел? Ами ако новият номер на отдел е номер на вече съществуващ отдел?

#########################################

CREATE OR REPLACE PROCEDURE UPD_DEPT_DEPTNO

(v_deptno IN dept.deptno%TYPE,

v_new_deptno IN dept.deptno%TYPE)

IS

v_dname dept.dname%TYPE;



v_loc dept.loc%TYPE;

e_dept_exist EXCEPTION;

PRAGMA EXCEPTION_INIT (e_dept_exist, -00001);

BEGIN


SELECT dname,loc

INTO v_dname,v_loc

FROM dept

WHERE deptno=v_deptno;

INSERT INTO dept

VALUES (v_new_deptno,v_dname,v_loc);

UPDATE EMP

SET deptno=v_new_deptno

WHERE deptno=v_deptno;

DELETE dept

WHERE deptno=v_deptno;

EXCEPTION

WHEN no_data_found THEN

RAISE_APPLICATION_ERROR (-20001,'No such department');

WHEN e_dept_exist THEN

RAISE_APPLICATION_ERROR (-20002,'Department ' || v_new_deptno ||' already exist!');

WHEN OTHERS THEN

RAISE_APPLICATION_ERROR (-20003,'Error');

Rollback;

END UPD_DEPT_DEPTNO;

/

-- execute upd_dept_deptno(40,10);



########################################################

CREATE OR REPLACE PROCEDURE UPD_DEPT_DEPTNO

(v_deptno IN dept.deptno%TYPE,

v_new_deptno IN dept.deptno%TYPE)

IS

v_dname dept.dname%TYPE;



v_loc dept.loc%TYPE;

v_new_dept_check number;

e_dept_exist EXCEPTION;

BEGIN


SELECT count(*) INTO v_new_dept_check

FROM dept

WHERE deptno=v_new_deptno;

IF v_new_dept_check<>0

THEN RAISE e_dept_exist;

END IF;


SELECT dname,loc

INTO v_dname,v_loc

FROM dept

WHERE deptno=v_deptno;

INSERT INTO dept

VALUES (v_new_deptno,v_dname,v_loc);

UPDATE EMP

SET deptno=v_new_deptno

WHERE deptno=v_deptno;

DELETE dept

WHERE deptno=v_deptno;

EXCEPTION

WHEN no_data_found THEN

RAISE_APPLICATION_ERROR (-20001,'No such department');

WHEN e_dept_exist THEN

RAISE_APPLICATION_ERROR (-20001,'Department ' || v_new_deptno ||' already exist!');

WHEN OTHERS THEN

RAISE_APPLICATION_ERROR (-20001,'Error');

Rollback;

END UPD_DEPT_DEPTNO;



/

-- execute upd_dept_deptno(40,10);



###########################################################

CREATE OR REPLACE PROCEDURE UPD_DEPT_DEPTNO

(v_deptno IN dept.deptno%TYPE,

v_new_deptno IN dept.deptno%TYPE)

IS

v_dname dept.dname%TYPE;

v_loc dept.loc%TYPE;

v_new_dept_check number;

v_dept_check number;

e_new_dept_exist EXCEPTION;

e_dept_exist EXCEPTION;

BEGIN

SELECT count(*) INTO v_new_dept_check

FROM dept

WHERE deptno=v_new_deptno;

IF v_new_dept_check<>0

THEN RAISE e_new_dept_exist;

END IF;

SELECT count(*) INTO v_dept_check

FROM dept

WHERE deptno=v_deptno;

IF v_dept_check<>0

THEN RAISE e_dept_exist;

ELSE

update dept

set deptno=v_new_deptno

where deptno=v_deptno;

END IF;

EXCEPTION

WHEN e_new_dept_exist THEN

RAISE_APPLICATION_ERROR (-20001,'Department ' || v_new_deptno ||' already exist!');

WHEN e_dept_exist THEN

BEGIN

SELECT dname,loc

INTO v_dname,v_loc

FROM dept

WHERE deptno=v_deptno;

INSERT INTO dept

VALUES (v_new_deptno,v_dname,v_loc);

UPDATE EMP

SET deptno=v_new_deptno

WHERE deptno=v_deptno;

DELETE dept

WHERE deptno=v_deptno;

EXCEPTION

WHEN no_data_found THEN RAISE_APPLICATION_ERROR (-20001,'No such department');

WHEN OTHERS THEN Rollback; RAISE_APPLICATION_ERROR (-20001,'Inner Error');

END;

WHEN OTHERS THEN Rollback; RAISE_APPLICATION_ERROR (-20001,'Error');

END UPD_DEPT_DEPTNO;

/

-- execute upd_dept_deptno(40,10);

############################################################

  1. Създайте и извикайте процедура наречена EMP_GRADE, която по подаден grade, извежда имената на всички работници със съответния grade. Ако бъде подаден невалиден grade, то процедурата вдига програмна грешка с номер -20100 и съобщение “Invalid grade!”

  1. Подайте grade като входен параметър

  2. Изведете имената и длъжностите на работниците със съответния grade на екрана, като използвате пакета DBMS_OUTPUT.

  3. Тествайте различните случаи и демонстрирайте получения резултат.


TEST:

GRADE

RESULT


0


PL/SQL procedure successfully completed.

3

ALLEN,SALESMAN

TURNER,SALESMAN

PL/SQL procedure successfully completed.

5

KING,PRESIDENT

PL/SQL procedure successfully completed.

6



ORA-20100: Invalid grade!





Сподели с приятели:
1   2   3   4   5   6




©obuch.info 2024
отнасят до администрацията

    Начална страница