Oracle PL/SQL小练习

-- 练习题 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;
/









  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值