Oracle的Scott用户
1、存储过程示例:为指定的职工在原工资的基础上长10%的工资
SQL>createorreplaceprocedureraiseSalary(empidinnumber)
as
pSalemp.sal%type;
begin
selectsalintopSalfromempwhereempno=empid;
updateempsetsal=sal*1.1whereempno=empid;
dbms_output.put_line('员工号:'||empid||'涨工资前
'||psal||'涨工资后'||psal*1.1);
end;
/
Procedurecreated
SQL>setserveroutputon
SQL>execraisesalary(7369);
员工号:7369涨工资前
800涨工资后880
PL/SQLproceduresuccessfullycompleted
2、存储函数示例:查询某职工的年收入。
SQL>/**/
/*
查询某职工的总收入
*/
createorreplacefunctionqueryEmpSalary(empidinnumber)
returnnumber
as
pSalnumber;--定义变量保存员工的工资
pCommnumber;--定义变量保存员工的奖金
begin
selectsal,commintopsal,pcommfromempwhereempno=empid;
returnpsal*12+nvl(pcomm,0);
end;
/
Functioncreated
SQL>declare
v_salnumber;
begin
v_sal:=queryEmpSalary(7934);
dbms_output.put_line('salaryis:'||v_sal);
end;
/
salaryis:15600
PL/SQLproceduresuccessfullycompleted
SQL>begin
dbms_output.put_line('salaryis:'||queryEmpSalary(7934));
end;
/
salaryis:15600
PL/SQLproceduresuccessfullycompleted
3、创建触发器示例1:限制非工作时间向数据库插入数据
SQL>createorreplace
triggersecurityEmp
beforeinsertonemp
declare
begin
ifto_char(sysdate,'day')in('星期四','星期六','星期日')
orto_number(to_char(sysdate,'hh24'))notbetween8and18then
raise_application_error(-20001,'不能在非工作时间插入数据。');
endif;
end;
/
Triggercreated
4、创建触发器示例2:确认数据(检查emp表中sal的修改值不低于原值)
SQL>createorreplacetriggercheckSal
beforeupdateofsalonemp
foreachrow
declare
begin
if:new.sal<:old.salthen
raise_application_error(-20001,'更新后的薪水比更新前小');
endif;
end;
/
Triggercreated