内容主要包括:

(1)三种循环及其简化

(2)游标的使用

(3)异常处理

(4)存储过程

(5)存储函数

(6)触发器

(7)其它pl/sql操作

---------------loop循环定义变量--------------------

declare
cursor c1 is select * from emp;
#
rec emp%rowtype;
#
i numeber:=1;
#
v_count number;
begin
#
select count(*) into v_count from emp;
#(1)
open c1;
loop
fetch c1 into rec.EMPNO,rec.JOB;
insert into emp1(EMPNO,JOB) values(rec.EMPNO,rec.JOB)
i:=i+1;
exit when i>v_count;
end loop;
  close c1;
end;

---------------loop循环--------------------
declare
cursor c1 is select * from emp;
#
rec emp%rowtype;
begin
#(1)
open c1;
loop
fetch c1 into rec.EMPNO,rec.JOB;
exit when c1%notfound;
insert into emp1(EMPNO,JOB) values(rec.EMPNO,rec.JOB)
end loop;
  close c1;
end;
---------------loop循环简化--------------------
declare
cursor c1 is select * from emp;
#
rec c1%rowtype;
begin
#(1)
open c1;
loop
fetch c1 into rec;
exit when c1%notfound;
insert into emp1 values rec
end loop;
  close c1;
end;
---------------while循环--------------------
declare
cursor c1 is select * from emp;
#
rec emp%rowtype;
begin
open c1;
fetch c1 into rec.EMPNO,rec.JOB;
while c1%found loop
insert into emp1(EMPNO,JOB) values(rec.EMPNO,rec.JOB)
fetch c1 into rec.EMPNO,rec.JOB;
end loop;
  close c1;
end;
---------------for循环。最简洁,不易产生死循环。自己关闭--------------------
declare
#记录集
cursor c1 is select * from emp;
#一行记录
rec emp%rowtype;
begin
#for默认打开游标
for rec in c1 loop
insert into emp1(EMPNO,JOB) values(rec.EMPNO,rec.JOB)
end loop;
end;
---------------for循环。简化--------------------
declare
#记录集
cursor c1 is select * from emp;
begin
#for默认打开游标
#for隐含声明rec,所以不用声明了
for rec in c1 loop
insert into emp1(EMPNO,JOB) values(rec.EMPNO,rec.JOB)
end loop;
end;
---------------for循环,再简化--------------------
declare
begin
#for默认打开游标
#for隐含声明rec,所以不用声明了
for rec in (select * from emp) loop
insert into emp1 values rec
end loop;
end;
---------------带參数的游标--------------------
declare
cursor c1(p_deptno number) is select * from emp;
#
rec emp%rowtype;
begin
#(1)
open c1(10);
loop
fetch c1 into rec.EMPNO,rec.JOB;
exit when c1%notfound;
insert into emp1(EMPNO,JOB) values(rec.EMPNO,rec.JOB)
end loop;
  close c1;
end;
---------------打印--------------------
dbms_output.put_line(v_val);
---------------例外--------------------
Oracle提前定义例外
Oracle错误
用户定义的例外
---------------使用例外----------------
定义例外
捕获例外
处理例外
EXCEPTION 
WHEN TOO_MANY_ROWS THEN
NULL;
WHEN NO_DATA_FOUND THEN 
NULL;
END;
---------------加入主键----------------
alter table 
add constraint EMP_PK primary key;
---------------自己定义例外--------------
DECLARE
MY_EXCEPTION EXCEPTION
PRAGMA EXCEPTION_INIT(MY_EXCEPTION,-00001);
BEGIN
INSERT INTO department() values();
EXCEPTION
WHEN MY_EXCEPTION THEN
# DBMS_OUTPUT.PUT_LINE('ERROR MESSAGES');
RAISE_APPLICATION_ERROR(-1111111。'STH');
END;
---------------定义变量--------------
v_1 data:=sysdata
---------------捕获例外--------------
raise el;
DECLARE
v_ddrq data:=sysdata;
v_fhrq data:=sysdata-1;
MY_EXCEPTION EXCEPTION
BEGIN
INSERT INTO item(id,ddrq,fhrq) values(v_ddrq,v_fhrq); 
IF v_ddrq>v_fhrq THEN 
RAISE MY_EXCEPTION;
END IF;
EXCEPTION
WHEN MY_EXCEPTION THEN
# DBMS_OUTPUT.PUT_LINE('ERROR MESSAGES');
ROLLBACK;
RAISE_APPLICATION_ERROR(-1111111。'STH');
END;
---------------procedure--------------
CREATE or replace PROCEDURE get_sal(p_empno number)
is
v_sal emp.sal%type;
BEGIN 
SELECT sal INTO v_sal FROM emp WHERE empno=p_empno;
DBMS_OUTPUT.PUTLINE(v_sal);
EDN;

sqlplus调用(每一个语言有各自的调用方法)
execute get_sal(7269)

pl/sql调用
declare
begin
get_sal(7369);
end;
-----------过程与函数的差别------------
函数仅仅有一个输出
过程有多个
-----------过程,输出參数------------
CREATE or replace PROCEDURE get_info
(p_empno  number,
 p_ename  out     varchar2,
 p_deptno out     number,
 p_sal    out     emp.sal%type)
is
v_deptno emp.depyno%type;
v_ename emp.ename%type;
v_sal emp.sal%type;
BEGIN 
SELECT sal,ename,deptno
INTO v_sal,v_ename,v_deptno
FROM emp 
WHERE empno=p_empno;
p_ename:=v_ename;
p_deptno:=v_deptno;
p_sal:=v_sal;
EDN;

调用pl/sql
variable v_ename varchar2(20)
variable v_sal int;
variable v_deptno 
execure get_info(7360,:v_ename,:v_deptno,:v_sal)
print v_sal; ...
-----------过程,混合參数------------
CREATE or replace PROCEDURE chang_no
(p_no in out varchar2)
is
BEGIN 
p_no:=substr(p_no,1,3||'0'||substr(p_no,4));
EDN;

调用pl/sql
variable v_no varchar2(20)
declare
begin
:v_no:='1234567890';
execure get_no(:v_no)
print v_no;
-----------參数调用------------
顺序
名字:形參 实參
variable v_name varchar2(20)
variable v_emptno 
(p_name=>:v_name,p_empno=>:v_empno)
-----------存储函数(能够在sql、pl/sql语句中调用,不能作为语句的一部分)------------
CREATE OR REPLACE FUNCTION add_sal(p_empno number)
RETURN number 
IS
v_sal emp.sal%type;
BEGIN 
select sal into v_sal from emp
where empno=p_empno;
RETURN v_sal*1.1;
END;

pl/sql调用
declare 
v_sal:=emp.sal%type;
begin
v_sal:=add_sal(7369);
dbms_output.put_line(v_sal);
end;

sql调用
select ename,sal,add_sal(empno) from emp;
-----------触发器------------
事前校验
事后审计

语句级
行级

DML

-----------语句级触发器-----------
CREATE OR REPLACE TRIGGER trig1
BEFORE INSERT or UPDATE or DELETE ON emp
DECLARE 
v_string varchar(20):="you can't option data";
BEGIN
IF(TO_CHAR(SYSYDATE,'DY') IN ('SAT','SUN')) OR (TO_CHAR(SYSDATE,'HH24:MI'))
NOT BETWEEN '08:00' AND '18:00')THEN
RAISE_APPLICATION_ERROE(-20500,v_error);
END IF;
END;
-----------行级触发器-----------

CREATE OR REPLACE TRIGGER trig1
BEFORE INSERT or UPDATE or DELETE ON emp
FOR EACH ROW
WHEN (OLD.depto=10)
DECLARE 
v_string varchar(20):="you can't option data";
BEGIN
IF(TO_CHAR(SYSYDATE,'DY') IN ('SAT','SUN')) OR (TO_CHAR(SYSDATE,'HH24:MI'))
NOT BETWEEN '08:00' AND '18:00')THEN
RAISE_APPLICATION_ERROE(-20500。v_error);
END IF;
END;

【Oracle学习笔记】的更多相关文章

  1. Oracle学习笔记三 SQL命令

    SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)  

  2. oracle学习笔记第一天

    oracle学习笔记第一天 --oracle学习的第一天 --一.几个基础的关键字   1.select select (挑选) 挑选出显示的--列--(可以多列,用“,”隔开,*表示所有列),为一条 ...

  3. Oracle学习笔记——点滴汇总

    Oracle学习笔记——点滴汇总 http://www.botangdb.com/ Oracle GI = Grid Infrastructure = ASM + Cluster

  4. Oracle学习笔记之四sp1,Oracle 11g的常用函数

    从Oracle学习笔记之四,SQL语言入门中摘出来的,独立成一章节 3.1 字符类函数 ASCII(c)和CHR(i)    分别用于返回一个字符的ASCII码和返回给定ASCII值所对应的字符. C ...

  5. Oracle学习笔记之四,SQL语言入门

    1. SQL语言概述 1.1 SQL语言特点 集合性,SQL可以的高层的数据结构上进行工作,工作时不是单条地处理记录,而对数据进行成组的处理. 统一性,操作任务主要包括:查询数据:插入.修改和删除数据 ...

  6. Oracle学习笔记—数据字典和常用命令(转载)

    转载自: oracle常用数据字典和SQL语句总结 Oracle常用命令大全(很有用,做笔记) 一.Oracle数据字典 数据字典是Oracle存放有关数据库信息的地方,其用途是用来描述数据的.比如一 ...

  7. oracle学习笔记(一)用户管理

    --oracle学习第一天 --连接 @后面连接数据库实例,具体连接到那个数据库 conn scott/tiger@MYORA1; --修改密码 passw; --显示用户 show user; -- ...

  8. 吴裕雄--天生自然 oracle学习笔记:oracle理论学习详解及各种简单操作例子

    1. 数据库的发展过程 层次模型 -->网状模型 -->关系模型 -->对象关系模型 2. 关于数据库的概念 DB:数据库(存储信息的仓库) DBMS:数据库管理系统(用于管理数据库 ...

  9. Oracle 学习笔记 11 -- 视图 (VIEW)

    本次必须学习一个全新的概念-- 视图 (VIEW).在前面的笔记中曾提到过,数据对象包含:表.视图.序列.索引和同义词.前面的笔记都是对表的想剖析,那么本次笔记就对视图的世界进行深入的剖析. 视图是通 ...

  10. oracle学习笔记1(环境搭建)

    学习的开始先剧透一下,本人有点笨,本来想用oracle vbox,装个red hat+oracle,但是虚拟机一直报错,0x00000000内存不能written.所以便想到其他的办法,刚好接触了go ...

随机推荐

  1. Manarcher 求 字符串 的最长回文子串 【记录】

    声明:这里仅仅写出了实现过程.想学习Manacher的能够看下这里给出的实现过程,算法涉及的一些原理推荐个博客. 给个链接 感觉讲的非常细 引子:给定一个字符串s,让你求出最长的回文子串的长度. 算法 ...

  2. 【Java集合源代码剖析】LinkedList源代码剖析

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/35787253 您好.我正在參加CSDN博文大赛.假设您喜欢我的文章,希望您能帮我投一票,谢 ...

  3. UVA 11987 Almost Union-Find 并查集单点修改

                                     Almost Union-Find I hope you know the beautiful Union-Find structur ...

  4. xBIM 学习与应用系列目录

        xBIM 实战04 在WinForm窗体中实现IFC模型的加载与浏览   xBIM 实战03 使用WPF技术实现IFC模型的加载与浏览   xBIM 实战02 在浏览器中加载IFC模型文件并设 ...

  5. tableview偏移

    tableview偏移 方法一:改变edgesForExtendedLayout self.edgesForExtendedLayout = UIRectEdgeNone; 将edgesForExte ...

  6. BZOJ 4321 DP

    思路: 这个DP太神了- 完全没想到 http://blog.csdn.net/geotcbrl/article/details/49663401 //By SiriusRen #include &l ...

  7. BZOJ 2212线段树的合并

    借鉴(抄)了一下题解-- 线段树合并的裸题吧- //By SiriusRen #include <cstdio> #include <cstring> #include < ...

  8. 【转】如何使用windows的计划任务?计划任务?

    我们经常有一些程序想要过了几小时来运行:比如定时关机 或者说希望能够每天的几点执行一个什么程序: 这些所有的操作都需要用到windows的任务计划:或者叫计划任务:反正都一样 下面小编将指导大家创建一 ...

  9. 日志记录~log4.net

    1. 添加Log4net引用 2. 添加配置文件 Log.config <?xml version="1.0" encoding="utf-8"?> ...

  10. EF Code First 使用 代码优先迁移(三)

    迁移到特定版本(包括降级) 到目前为止,我们一直升级到最新的迁移,但有时您可能需要升级/降级到特定的迁移. 这是目前我数据库中的表:有四个表,我降级到addEndTime这个版本(这个版本是没有gra ...