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;