oracle数据库:存储过程和存储函数

1、编写一个存储过程,输入某个员工ID,输出其first_name和last_name

create or replace procedure print_name4(emp_id in int)
is item EMPLOYEES%rowtype;
begin
	SELECT *
		into item
		from EMPLOYEES
		where EMPLOYEE_ID=emp_id;
		dbms_output.put_line(item.FIRST_NAME||' '||item.LAST_NAME);
end print_name4;
begin
print_name4(100);
end;

2、编写一个存储过程,使用out型参数返回某员工的first_name和last_name。再写一个存储过程,调用之前的存储过程获得员工的first_name和last_name,并输出。

create or replace procedure print_name3(fname out varchar2,
                                        lname out varchar2) is
  item   EMPLOYEES%rowtype;
  emp_id number;
begin
  emp_id := 100;
  SELECT * into item from EMPLOYEES where EMPLOYEE_ID = emp_id;
  --dbms_output.put_line(item.FIRST_NAME||' '||item.LAST_NAME);
  fname := item.FIRST_NAME;
  lname := item.LAST_NAME;
end print_name3;

declare
fname1 varchar2(50);
lname1 varchar2(50);
begin
  print_name3(fname1,lname1);
  dbms_output.put_line(fname1||' '||lname1);
end;

3、编写一个存储过程,使用 in out型参数,对于输入的电话号码,判断其类型,如果有区号,使用区号-电话号码的方式返回;如果是手机号码,按三位-四位-四位返回;再写一个存储过程,调用之前的存储过程,并输出。

--定义打印的存储过程
CREATE OR REPLACE PROCEDURE println(str VARCHAR2)
is
BEGIN
  dbms_output.put_line(str);
END println;

--测试in out模式的存储过程
CREATE OR REPLACE PROCEDURE dianhua(p4 in out varchar2)
is
begin
    declare
    len number;
    str1 varchar2(10);
    str2 varchar2(10);
    str3 varchar2(10);
    begin
        if substr(p4,1,1)=1
            then 
            str1:=substr(p4,1,3);
            str2:=substr(p4,4,4);
            str3:=substr(p4,8,4);
            println(str1||'-'||str2||'-'||str3);
        else 
            str1:=substr(p4,1,4);
            str2:=substr(p4,5,7);
            println(str1||'-'||str2);
        end if;
    end;
end;

DECLARE
    dian varchar2(30):='13112345678';--声明一个变量用于设定存储过程调用前的值
    shou varchar2(30):='07312345678';
BEGIN
    dianhua(dian);
    dianhua(shou);
END;

4、创建存储过程,在期间插入,更新,删除某个表的记录

/*create or replace procedure addline
is 
begin 
    INSERT INTO EMPLOYEEs VALUES ('97', 'Stttten', 'Kittng', 'SKtttING', '525.123.4568', TO_DATE('1986-06-17 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'), 'AD_VP', '300001', NULL, 100, '90');
end addline;

begin
    addline;
end;*/

  --删除一行记录
  create or replace procedure deleteline(id1 in number) is
begin
  delete from employees where employee_id = id1;
end deleteline;

declare
  zz number;
begin
  zz := 97;
  deleteline(97);
end;

 --更新一行记录
  create or replace procedure updateline(id1 in number) is
begin
  update employees e set e.salary=e.salary+400 where employee_id = id1;
end updateline;

declare
  zz number;
begin
  zz := 98;
  updateline(98);
end;

5、建立一个存储函数,输入某部门的ID,返回其部门的工资总和。

create or replace function sumSalary(dept_id in number)
return number
is
 cursor c_salary is select salary from employees
 where department_id=dept_id;
 sum_salary number(10):=0;
begin
  for c in c_salary loop
      sum_salary:=sum_salary+c.salary;
  end loop;
  return sum_salary;
end sumSalary;

select sumSalary(90) from dual;

6、在sql语句中使用之前建立的存储函数,在select子句和where子句中使用。写一个存储过程,期间使用动态sql,建立一个统计表,并把统计结果,插入这个表中。

create table sum_salary(department_id int,salary int);

create or replace procedure calSumSalary is
  zzz number;
  hhh number;
begin
  zzz := 10;
  while zzz < 270 loop
    zzz := zzz + 10;
    select sumSalary(zzz) into hhh from dual;
    insert into sum_salary values (zzz, hhh);
    commit;
  end loop;
end calSumSalary;

猜你喜欢

转载自blog.csdn.net/Dong__Ni/article/details/107667911