PL/SQL复习之快分类

PL/SQL块分类,分为以下四类,匿名块、命名块,子程序,触发器
A、
匿名块,示例如下
DECLARE
v_avgsal NUMBER(6,2)
BEGIN
SELECT avg(sal) INTO v_avgsal FROM emp
WHERE deptno = &no;
dbms_output.putline('平均工资'||v_avgsal)
END;
输出:
输入 no的值 :10
平均工资:2916.67
B、
命名块
<<outer>>
DECLARE
v_deptno NUMBER(2);
v_dname varchar2(10);
BEGIN
<<inner>>
select deptno into v_deptno from EMPLOYEES
WHERE lower(ename) = lower('&name');
END;
select dname into v_dname from EMPLOYEES
WHERE deptno = v_deptno;
dbms.output.put_line(v_dname);
END;
输出:
输入name的值:scott
部门名;RESEARCH
C.子程序。子程序包括过程。函数和包
a,过程
CREATE PROCEDURE update_sal(name_ VARCHAR2,newsal NUMBER)
IS
BEGIN
update EMPLOYEES set salary = newsal
where lower(FIRST_NAME) = lower(name_);
END;
调用过程如下
exec update_sal('scott',2000);
call update_sal('scott',2000);
b,函数,函数用于返回特定数据,在函数头部必须包含Return语句,
在函数体内必须包含RETURN 语句
CREATE FUNCTION annaual_income(name VARCHAR2)
RETURN NUMBER IS
annual_salary NUMBER(7,2);
BEGIN
SELECT sal*12+nal(comm,0) INTO annual_salary FROM EMPLOYEES
WHERE lower(FIRST_NAME) = lower(name);
RETURN annual_salary;
END;
调用过程如下

VAR income NUMBER
CALL annual_salary_('Alana') INTO :income;
PRINT income;
输出:
income
24000
c.包,用于定义公用的变量。过程。常数和函数
CREATE PACKAGE emp_pkg IS
PROCEDURE update_sal(name VARCHAR2,newsal NUMBER)L
FUNCTION annual_income(name VARCHAR2) RETURN NUMBER;
END;
上面代码只包含了过程和函数,没有实现过程和函数的实现
代码,包体用于实现包规范中的过程和函数
使用CREATE PACJAGE BOD。代码略
调用如下:
call emp_pkg.update_sal('scott',1500);

VAR income NUMBER
CALL emp_pkg.annual_income('scott') INTO :income;
PRINT income
输出:
income
18000
D.触发器
CREATE TRIGGER update_cascade
AFTER UPDATE OF DEPARTMENT_ID ON DEPARTMENTS
FOR EACH ROW
BEGIN
UPDATE EMPLOYEES SET EMPLOYEE_ID =:new.EMPLOYEE_ID
WHERE EMPLOYEE_ID =:OLD.EMPLOYEE_ID;
END;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值