Oracle PL/SQL

存储过程是一条或多条 Oracle PL/SQL 语句的集合。
PL是过程语言,提供了从if语句到循环等一切功能。
创建:使用CREATE PROCEDURE语句创建(CREATE OR REPLACE 存在则更新,不存在则创建)。
执行:EXECUTE 存储名
删除:DROP PROCEDURE 存储名
例:根据时间输出问候语

CREATE OR REPLACE PROCEDURE Greeting IS
 h number;
 g char(20);
 BEGIN
 SELECT EXTRACT(HOUR FROM CURRENT_TIMESTAMP) INTO h FROM dual;
 IF h>=20 OR h<=5 THEN
 	g := 'GOOD NIGHT'
 ELSEIF h>5 AND h<=12 THEN
 	g := 'GOOD MORNING'
  ELSEIF h>12 AND h<=17 THEN
 	g := 'GOOD AFTERNOON'
 ELSE
 	g := 'GOOD EVENING'
 END IF;
 DBMS_OUTPUT.PUT_LINE(g);
 END;
 	

显式游标和隐式有效:
在Oracle中,每次执行SQL语句时,就会在内部创建游标,这是Oracle自身处理SQL语句的方式。这类游标称为隐式游标,与之相对的是显示游标。

使用游标:
1.在可以使用游标之前,必须先声明(定义)它。这个过程实际上不会检索任何数据,它只定义要使用的SELECT语句。
2.在声明游标之后,必须打开它以便使用。这个过程实际上将使用之前定义的SELECT语句来检索数据。
3.利用填充了数据的游标,可以根据需要获取(检索)各个行。
4.操作完成后,必须关闭游标。
创建:DECLARE CURSOR 游标名
打开:OPEN 游标名
关闭:CLOSE 游标名
例:

DECLARE
	v_vend_id vendors.vend_id%TYPE;
	v_vend_name vendors.vend_name%TYPE;
	v_vend_address vendors.vend_address%TYPE;
	v_vend_city vendors.vend_city%TYPE;
	CURSOR c_vendors IS
	SELECT ven_id,vend_name,vend_address,vend_city
	FROM vendors;
BEGIN
	OPEN c_vendors;
	LOOP
		FETCH c_vendors INTO v_vend_id,
													v_vend_name,
													v_vend_address,
													v_vend_city;
		EXIT WHEN c_vendors%notfound;
	END LOOP;
	CLOSE cursor;
END

触发器:
将由Oracle自动执行,以响应以下语句:
ALTER CREATE DROP DELETE INSERT UPDATE
创建触发器:
1.唯一的触发器名称
2.触发器将关联的表
3.触发器应该响应的动作(DELETE INSERT UPDATE)
4.何时应该执行触发器(处理前或后)
例:

//创建一个名为orders_after_insert的触发器
CREATE OR REPLACE TRIGGER orders_after_insert
AFTER INSERT ON orders
FOR EACH ROW
BEGIN
	INSERT INTO orders_log(changed_on,change_type,order_num) //每当orders表插入新数据,都会让日志表更新数据。
	Values(SYSDATE,'A',:NEW.order_num);//:NEW.order_num 获得新的编号
END;

//AFTER INSERT ON 使得触发器将在成功地执行INSERT语句之后才执行。
//无论何时把产品添加到orders表中,都会执行BEGIN 和 END 之间的代码。

删除触发器:DROP TIGGER 触发器名

BEFORE 还是 AFTER?
通常:如果需要访问直到语句处理之后才会存在的数据,那么就要使用AFTER。对于任何数据验证和清理,可以使用BEFORE。

:NEW表/:OLD表
:NEW不是一个实际的表,但是可以在触发器内把它用作一个表,来访问新的数据。
:OLD引用一个虚拟表,只读,不能被更新。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值