Oracle笔记四

PL/SQL编程语言

概念

plsql是oracle对sql进行的过程化扩展,使sql语言具有过程处理能力。
如支持 update emp set sal=sal*1.2

语法

declare
说明部分(变量说明,光标说明,例外说明)
begin
语句序列(DML语句)
exception
例外处理语句
end;

常量类型

1.说明变量
如char,varchar2,date,number,boolean,long
例var1 char(10);
psal numbe(9,2);
2.引用变量
my_name emp.ename%type;
即my_name的类型和emp表中ename列的类型一样
sql里使用into赋值。
declare
emprec emp.ename%type;
begin
select t.tname into emprec from emp t where t.empno=7639;
dbms_output.put_line(emprec);
end;
3.记录型变量
emp_rec emp%rowtype;
记录变量分量的引用
married boolean :=true;

if语句

1.if 条件 then 语句1;
语句2;
end if;
范例:
declare
pnum number :=#
begin
if pnum =1 then
dbms_output.put_line(‘我是1’);
end if;
end;
2.if 条件 then 语句序列1;
else 语句序列2;
end if;
3.if 条件 then 语句1;
elsif 语句序列2;
else 语句序列3;
end if;

循环

语法1:
declare
step number :=1;
begin
while step <= 10 loop
dbms_output.put_line(step);
step := step +1;
end loop;
end;
语法2:
declare
step number :=1;
begin
loop
exit when step > 10
dbms_output.put_line(step);
step := step +1;
end loop;
end;
语法3:
declare
step number :=1;
begin
for step in 1…10 loop
dbms_output.put_line(step);
end loop;
end;

游标(光标cursor)

语法:
cursor 游标名 【{参数名 数据类型,参数名 数据类型,…}】is select 语句;

cursor c1 is select ename from emp;

例外

系统定义异常
no_data_found
too_many_rows(select…into语句匹配多个行)
zero_error(被零除)
value_error(算数或转换错误)
timeout_on_resource(等待资源时超时)

存储过程

存储过程是一组经过编译后存储在数据库中的可以完成特定功能的sql语句。
语法1:
create [or replace] procedure 过程名[(参数名 in/out 数据类型)]
as
begin
plsql子程序体;
end 过程名;
语法2:
create [or replace] procedure 过程名[(参数名 in/out 数据类型)]
is
begin
plsql子程序体;
end 过程名;

存储函数

语法:
create or replace function 函数名[name in type,name out type,…] return 数据类型 is 结果变量 数据类型;
begin
return[结果变量]
end [函数名];

区别

存储过程和存储函数的区别在于函数可以有一个返回值,而过程没有返回值;
过程和函数都可以通过out指定一个或多个输出参数;
可以用out参数,在过程和函数中实现返回多个值;

触发器

触发器是一个与表相关联的、存储的PL/SQL程序,当特定的数据操作语句(insert,update.delete)在指定的表上发出时,oracle会自动执行触发器中定义的语句序列。

语法

create [or replace] trigger 触发器名
{before | after}
{delete |insert |update [of 列名]}
on 表名
[for each row [when(条件)]]
declare

begin
plsql块
end 触发器名

触发器语法分为3部分,第一部分说明创建的触发器使用条件,第二部分即declare部分,用来定义本地变量,下面的第三部分会用到。第三部分是触发器的操作部分,当被触发时,执行相应的语句。

应用

使用触发器模拟mysql中自增效果
1.创建序列
1).建立表
create table user
(
id number(6) not null,
name varchar2(30) not null primary key
)
2).建立序列
create sequence user_seq;
2.创建自增触发器
create or replace trigger user_trigger
before insert on user
for each row
begin
select user_seq.nextval into:new.id from sys.dual;
end;
3.测试效果
insert into ituser(name) values(‘aa’);
comit;
insert into ituser(name) values(‘bb’);
comit;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值