开始学习PL/SQL的阵痛期,将一些没使用过的涵式及术语定义纪录下来
前篇 : Oeacle 常用函式笔记 1
函式
Coalesce(n1, n2)
列表中第一个非空的表达式是函数的返回值,假如所有的表达式都是空值,最终将返回一个空值。
select Coalesce('A', 'B', 'C') from dual-- 结果: Aselect Coalesce(null, 'B') from dual-- 结果: Bselect Coalesce(null, null) from dual-- 结果: null
参考 : NVL , NVL2 ,COALESCE ,DECODE用法
EXISTS
在Oracle中, 在判断资料是否存在与否, 除了用 IN, BETWEEN 之外, 还有另一种选择, 就是用 "EXISTS"。
exists (子查询)-- 若子查询有返回值则 return true 反之则 return false
子查询中不要用select count(*)
, 这样无论如何, 都会有值取回,也就是 exists 结果都是 true
使用範例 :
select * from tom1where aa >= 2and exists( select xx from tom2 where xx = tom1.aa );
参考 : Oracle PL/SQL: 关于 Exists 用法
sequence
在 Oracle 中可以建立 sequence 也就是序列号,每次取用后自动增加值。
CREATE SEQUENCE sequence名称 INCREMENT BY 1 -- 每次加几个 START WITH 1 -- 从1开始计数 NOMAXVALUE -- 不设置最大值 NOCYCLE -- 一直累加,不循环 CACHE 10;
定义完成后就可以用CURRVAL
,NEXTVAL
涵式
CURRVAL
: 返回 sequence的当前值NEXTVAL
: 增加 sequence的值,然返回 sequence 值参考 : Oracle的Sequence用法
rownum
在 Oracle 使用 rownum 栏位时会根据你SELECT的资料建立顺序给予序号,所以如果有ORDER BY 栏位,rownum 的顺序并不会按照顺序呈现,这是因为 rownum 会在排序前先配置好的缘故。
参考 : Oracle rownum / row_number / rank / dense_rank 这四个的差异
查询资料库连结 DB_LINK
在oracle中要跨资料库查询需要建立db_link,要查询目前已有的db_link方式可以透过已下两种方式
直接透过sql developer 查询select * from dba_db_links;
参考 : oracle 查看 、创建、删除 dblink
%Type
%TYPE
是 Procedure 定义变数的一种方法,
V_StudentID students.id%TYPE 表示的含义:变数V_StudentID 与students表中id的栏位资料类型一致,长度也一致,当students中id的资料类型改变时,那么V_StudentID的资料类型也会跟着改变。
参考 : Oracle %TYPE %ROWTYPE
笔记内容如果有错误欢迎留言告知,可以帮忙纠正错误的观念,感谢!