-- 练习题 1: 编写能够实现转账功能的存储过程,例如将KING的sal转200给SCOTT
-- 涉及知识点:事务,存储过程
create or replace procedure pro_transfer(v_from_ename varchar2,v_in_ename varchar2,v_money number)
is
begin
savepoint start_transaction;
update a_emp set sal=sal-v_money where ename=v_from_ename;
update a_emp set sal=sal+v_money where ename=v_in_ename;
end;
/
call pro_transfer('KING','SCOTT',200);
call pro_transfer('SCOTT','KING',200);
-- 练习题2: 编写用户可以使用exec命令直接使用的RUD操作,
-- 例如proc_update_emp,proc_save_emp,proc_delete_emp;
create or replace procedure pro_delete_emp(p_empno number)
is
begin
delete from a_emp where empno=p_empno;
end;
/
call pro_delete_emp(1001);
--练习1:编写一个函数计算员工应交个人所得税,输入姓名,返回交税金额.设定工资<3500不交税,工资在3500
--和8000之前缴纳2%所得税,大于10000缴纳5%所得税.(分别实现在开发环境及存储过程中的调用),接口设计如下:
--function func_income_tax(p_ename varchar2) return number
-- 练习2:编写将字符串倒序排列的函数 func_reverse(str varchar2) return varchar2
create or replace function func_reverse(str varchar2)
return varchar2
is
v_length number(3);
v_temp varchar2(2);
v_result varchar2(50);
begin
select length(str) into v_length from dual;
for i in reverse 1..v_length loop
v_temp:=substr(str,i,1);
v_result:= v_result||v_temp;
end loop;
return v_result;
end;
/
select func_reverse('abc') from dual;
create or replace trigger trigger_a_dept
before insert or delete or update
on a_dept
declare
v_msg varchar2(20);
begin
if inserting then
v_msg:='插入数据';
elsif updating then
v_msg:='更新数据';
elsif deleting then
v_msg:='删除数据';
end if;
if to_char(sysdate,'hh24:mi') not between '09:00' and '18:00' then
dbms_output.put_line('**在非上班时间不允许对表进行'||v_msg||'操作');
end if;
end;
/
Oracle PL/SQL小练习
最新推荐文章于 2021-01-07 21:52:52 发布