filmov
tv
56/125 Oracle PLSQL: Working with Packages / Forward Declaration
Показать описание
Learn Oracle PLSQL
EXAM 1Z0-144
---------------------------------------------------------------------
create or replace package proc_rules_calling
is
procedure print_emp_details
(p_emp_id number);
end;
create or replace package body proc_rules_calling
is
function get_no_work_days (p_emp_id number)
return number
is
v_hiredate date;
begin
select HIRE_DATE into v_hiredate
from employees
where EMPLOYEE_ID=p_emp_id;
return round(sysdate-v_hiredate);
end;
procedure print_emp_details
(p_emp_id number)
is
-- we will call the funcion from this procedure
--so it should be defined above in order to invoke it
v_details employees%rowtype;
begin
select * into v_details
from employees
where EMPLOYEE_ID=p_emp_id;
end;
end;
------------------------------------------------------------------------------
--same example but we will change the order
create or replace package proc_rules_calling
is
procedure print_emp_details
(p_emp_id number);
end;
--it will give error
--'GET_NO_WORK_DAYS' not declared in this scope
create or replace package body proc_rules_calling
is
procedure print_emp_details
(p_emp_id number)
is
v_details employees%rowtype;
begin
select * into v_details
from employees
where EMPLOYEE_ID=p_emp_id;
end;
function get_no_work_days (p_emp_id number)
return number
is
v_hiredate date;
begin
select HIRE_DATE into v_hiredate
from employees
where EMPLOYEE_ID=p_emp_id;
return round(sysdate-v_hiredate);
end;
end;
------------------------------------------------------------------
--the solution is to do forward declaration
drop package proc_rules_calling;
create or replace package proc_rules_calling
is
procedure print_emp_details
(p_emp_id number);
end;
create or replace package body proc_rules_calling
is
function get_no_work_days (p_emp_id number)
return number; -- we put the function specification only
procedure print_emp_details
(p_emp_id number)
is
-- we will call the funcion from this procedure
--so it should be defined above in order to invoke it
v_details employees%rowtype;
begin
select * into v_details
from employees
where EMPLOYEE_ID=p_emp_id;
end;
function get_no_work_days (p_emp_id number)
return number
is
v_hiredate date;
begin
select HIRE_DATE into v_hiredate
from employees
where EMPLOYEE_ID=p_emp_id;
return round(sysdate-v_hiredate);
end;
end;
EXAM 1Z0-144
---------------------------------------------------------------------
create or replace package proc_rules_calling
is
procedure print_emp_details
(p_emp_id number);
end;
create or replace package body proc_rules_calling
is
function get_no_work_days (p_emp_id number)
return number
is
v_hiredate date;
begin
select HIRE_DATE into v_hiredate
from employees
where EMPLOYEE_ID=p_emp_id;
return round(sysdate-v_hiredate);
end;
procedure print_emp_details
(p_emp_id number)
is
-- we will call the funcion from this procedure
--so it should be defined above in order to invoke it
v_details employees%rowtype;
begin
select * into v_details
from employees
where EMPLOYEE_ID=p_emp_id;
end;
end;
------------------------------------------------------------------------------
--same example but we will change the order
create or replace package proc_rules_calling
is
procedure print_emp_details
(p_emp_id number);
end;
--it will give error
--'GET_NO_WORK_DAYS' not declared in this scope
create or replace package body proc_rules_calling
is
procedure print_emp_details
(p_emp_id number)
is
v_details employees%rowtype;
begin
select * into v_details
from employees
where EMPLOYEE_ID=p_emp_id;
end;
function get_no_work_days (p_emp_id number)
return number
is
v_hiredate date;
begin
select HIRE_DATE into v_hiredate
from employees
where EMPLOYEE_ID=p_emp_id;
return round(sysdate-v_hiredate);
end;
end;
------------------------------------------------------------------
--the solution is to do forward declaration
drop package proc_rules_calling;
create or replace package proc_rules_calling
is
procedure print_emp_details
(p_emp_id number);
end;
create or replace package body proc_rules_calling
is
function get_no_work_days (p_emp_id number)
return number; -- we put the function specification only
procedure print_emp_details
(p_emp_id number)
is
-- we will call the funcion from this procedure
--so it should be defined above in order to invoke it
v_details employees%rowtype;
begin
select * into v_details
from employees
where EMPLOYEE_ID=p_emp_id;
end;
function get_no_work_days (p_emp_id number)
return number
is
v_hiredate date;
begin
select HIRE_DATE into v_hiredate
from employees
where EMPLOYEE_ID=p_emp_id;
return round(sysdate-v_hiredate);
end;
end;
Комментарии