编程:储存过程,自定义函数,触发器,包。
储存过程
在命令窗口用exec调
作用:存储在数据库中用于完成某个功能的程序
创建在 procedure里
create or replace procedure 存储过程名称(参数1 in 数据类型, 参数2 out 数据类型, 参数3 in out 数据类型) is 定义变量 begin 代码 end 存储过程名称;
命令窗口输出:set serveroutput on 默认是off,关闭输出,只对当前窗口有效
dbms_output.put_line('输出内容');
变量定义:变量名 数据类型(长度);
变量赋值:变量名 数据类型(长度) := 值或表达式;
变量名 := 值或表达式;
还能修改数据,修改必须提交数据库 。 commit 提交数据库。
自定义函数
作用:用户自定义的具有返回值的程序
必须有返回值,不能执行DML语句,只能执行DQL语句。查询的时候用,不允许对数据修改
创建 在functions里
select 字段或函数,... into 变量,... from 表 把查询的单行数据赋给变量
触发器
DML触发器,修改触发
DDL触发器,查询触发
复合触发器
系统事件触发器
触发方式:
instead of 触发器 ,常用于视图
before 前触发after 后触发
DML触发器:
对表的insert,update,delete动作触发
:old 动作执行前的行数据
:new 动作执行后的行数据
创建
创建完后,写编程
修改的记录就出现在了log表中
包
保存和管理存储过程和自定义函数
可以把储存过程和自定义函数放在里面
创建 在packages里
包的部分
(包头)公开包体内的程序名的定义,提供给外部进行访问。
包体,定义公共变量、存储过程、自定义函数,外部不能直接访问。
可以直接把操作过程和内置函数放在包体里,便于管理
在包头调用,在包体里是不开放的。
从包里调用时 使用包名.程序名