Oracle PL/SQL 自学笔记

一般注意点:
1、标识符不区分大小写,所有名称在存储时被改成大写。
2、语句使用分号结束,语句块的结束标志end后面同样需要使用分号。
3、命名使用_连接。
4、逗号和操作符前后都应该加上空格。
5、程序的注释不要低于代码量的20%。(没有注释的代码去起来心累,尤其是变量没有注释,有些人还喜欢拼音命名法,真的很要命)

变量声明
变量+类型 (与一般编程语言唱反调)
变量+constant+类型
表字段名%type 获取表字段的类型

复合类型变量
记录类型
索引类型
varray数组

记录类型 (有点像c语言中的typedef自定义数据类型,感觉更像结构体😂)
declare
type TEMP is record
(
x int,(这里是逗号哦)
y varchar2
);
temp TEMP;

记录类型变量(感觉像java中定义了一个对象,拥有表中所有列的属性)
变量名 表名%rowtype

索引表类型

varray变长数组
type varr isvarry(100) of varchar2(20); --定义数组元素类型为varchar2长度20,数组大小100,可变。
v_temp varr := varr(‘1’,‘2’);–初始化数组。

流程控制语句(一般语言都会有的条件,循环语句,就是写法不一样)

if 结构
if 条件 then
巴拉巴拉;
end if;

if 条件 then
巴拉巴拉;
else
欧拉欧拉;
end if;

if 条件 then
巴拉巴拉;
elsif – 注意这里是elsif 不是elseif
欧拉欧拉;
else
木大木大;
end if;
可以嵌套使用if语句

case 变量(JOJO) when
‘承太郎’ then ‘欧拉欧拉’;
‘乔鲁诺乔巴纳’ then ‘木大木大’;
else ‘烤鸡要没了’;
end;

case
when 宁次的白眼 then 好凶呀;
when 雏田的白眼 then 好美呀;
else 没有灵魂 end;

循环语句

loop
巴拉巴拉;
exit when 条件;
end loop;

while 条件
loop
巴拉巴拉;
end loop;

for i in 1…20 loop --直接指定循环次数
巴拉巴拉;
end loop;

处理异常
Exception
when 被人家着火了 then 吃瓜;
when 自己家着火了 then 哇哇;
when others then 鬼知道会干啥;

函数用法
create or replace function 这货是个函数 return dataType
is
begin
函数体(这是我身体,你写美一点)
end;

可以将参数设置为out,将改变输入值,有点类似c语言中传入指针

删除函数
drop FUNCTION 本函数要被删了;

游标(这玩意还挺别致的)用于从集合结果中提取单条记录

游标分为静态游标和Ref游标
静态游标取到结果后,再对数据进行修改不会对游标产生影响(开车压线了,被拍了,退回去也改变不了事实🤣)

静态游标分为显式游标和隐式游标
显式游标用户可自由调用和关闭
隐式游标用户无法控制但是可以得到属性信息

游标咋玩
创建显式游标
declare
cursor 这货是游标 is select * from 去年买了个表 where name = ‘祖安少年’;
联盟新手 去年买了个表%rowType; --从游标里取出来的值放在这里。
打开游标
open 这货是游标;
读取数据
fetch 这货是游标 into 联盟新手;
关闭游标
close 这货是游标;

游标&loop 联合公演

open 这货是游标;
我是游标儿子 表%rowtype;
loop
fetch 这货是游标into 我是游标儿子;
exit when name%notFound; --真的一滴都没有了,退出循环。
end loop;
close namel;

fetch into 是单句提取语句,在数据量很大的情况下不适用。(本宝宝适合单发)
fetch 这货是游标 bulk collect into 可以批量提取数据。(本大爷可以连发哦)
fetch 这货是游标 bulk collect into 游标儿子 limit 2;每次提取两条

for i in 1…这货是游标.count – 获取游标数据条数
loop
你想干啥;
end loop; --隐含了游标的开启和关闭

显式游标的属性
%isopen 游标是否打开
%found 行数据是否有效
%notfound 行数据是否无效
%rowCount 累计到当前位置使用fetch提取数据的行数

带参数的游标
可以根据指定条件查询
Cursor 这货是游标(name varchar2)
is select * from table where key = name;
open 这货是游标(‘祖安狂人’);

隐式游标 sql%found

数据库中的虚拟表-视图
视图是查询语句的结果
比如查询很复杂,一个人创建视图,其他人直接调用就可以了
视图通常设置为只读属性
强制创建视图
create or replace force view 人家是视图 as
select * from 可能还没创建的表名字

存储过程
将一段可以执行某种功能的程序存储在数据库中,可以通过java调用存储过程。
高水平的人编写存储过程水平低的人员直接调用,我应该就是负责调用的那个🤣。
可以避免许多不必要的错误发生,减少对数据库的连接。

创建存储过程
create procedure 存储过程牛逼
as
begin
巴拉巴拉
end;

触发器 (第一眼想到的居然是RS,D,JK,T触发器之类的词汇)
触发器由数据库的特定事件触发。
1、用户在制定的表或视图中做增删改
2、DDL 增删改对象
3、数据库用户的登入或注销 数据库打开或关闭 特定的错误消息。

触发器可以分为五种类型
数据操纵语言(DML)触发器 before after
数据定义语言(DDL)触发器
复合触发器
instead of 触发器
用户和系统事件触发器

before statement; 前语句级触发
before each row; 前行级触发
after statement; 后语句级触发
after each row; 后行级触发

触发器的执行顺序
1、前语句级触发器
2、前行级触发器,行级触发器和sql修改的记录次数一致。
3、sql修改完成后会出发后行级触发器
4、执行一次语句级触发器,后语句级触发器

这是第一遍学习,后续将会改进和补充。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ranx3

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值