【Oracle学习笔记】
内容主要包括:
(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学习笔记】的更多相关文章
- Oracle学习笔记三 SQL命令
SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)
- oracle学习笔记第一天
oracle学习笔记第一天 --oracle学习的第一天 --一.几个基础的关键字 1.select select (挑选) 挑选出显示的--列--(可以多列,用“,”隔开,*表示所有列),为一条 ...
- Oracle学习笔记——点滴汇总
Oracle学习笔记——点滴汇总 http://www.botangdb.com/ Oracle GI = Grid Infrastructure = ASM + Cluster
- Oracle学习笔记之四sp1,Oracle 11g的常用函数
从Oracle学习笔记之四,SQL语言入门中摘出来的,独立成一章节 3.1 字符类函数 ASCII(c)和CHR(i) 分别用于返回一个字符的ASCII码和返回给定ASCII值所对应的字符. C ...
- Oracle学习笔记之四,SQL语言入门
1. SQL语言概述 1.1 SQL语言特点 集合性,SQL可以的高层的数据结构上进行工作,工作时不是单条地处理记录,而对数据进行成组的处理. 统一性,操作任务主要包括:查询数据:插入.修改和删除数据 ...
- Oracle学习笔记—数据字典和常用命令(转载)
转载自: oracle常用数据字典和SQL语句总结 Oracle常用命令大全(很有用,做笔记) 一.Oracle数据字典 数据字典是Oracle存放有关数据库信息的地方,其用途是用来描述数据的.比如一 ...
- oracle学习笔记(一)用户管理
--oracle学习第一天 --连接 @后面连接数据库实例,具体连接到那个数据库 conn scott/tiger@MYORA1; --修改密码 passw; --显示用户 show user; -- ...
- 吴裕雄--天生自然 oracle学习笔记:oracle理论学习详解及各种简单操作例子
1. 数据库的发展过程 层次模型 -->网状模型 -->关系模型 -->对象关系模型 2. 关于数据库的概念 DB:数据库(存储信息的仓库) DBMS:数据库管理系统(用于管理数据库 ...
- Oracle 学习笔记 11 -- 视图 (VIEW)
本次必须学习一个全新的概念-- 视图 (VIEW).在前面的笔记中曾提到过,数据对象包含:表.视图.序列.索引和同义词.前面的笔记都是对表的想剖析,那么本次笔记就对视图的世界进行深入的剖析. 视图是通 ...
- oracle学习笔记1(环境搭建)
学习的开始先剧透一下,本人有点笨,本来想用oracle vbox,装个red hat+oracle,但是虚拟机一直报错,0x00000000内存不能written.所以便想到其他的办法,刚好接触了go ...
随机推荐
- linux下安装redis3.2
这部分来自网络: http://blog.csdn.net/cuibruce/article/details/53501532 1.下载 下载地址:http://www.redis.io/downlo ...
- Chrome下使用百度地图报错Cannot read property 'minZoom' of undefined
问题:工作中在Google chome下面的js console里面测试百度地图API var map = new BMap.Map("container"); map.cente ...
- C4
#include <stdio.h> int main(int argc, const char * argv[]) { // int 占用4个字节 double 占用8个字节 // 只是 ...
- $scope angular在controller之外调用
1.定义 var m = angular.module('ddd',[]); m.controller('ctrl',['$scope',function ($scope) { }]); 2.外部调用 ...
- JavaScript组成部分——ECMAScript、DOM、BOM、
1.JavaScript组成部分 虽然 JavaScript 和 ECMAScript 通常被人们用来表达相同的含义,但 JavaScript 的含义却比ECMA-262标准中规定的要多得多. 一个完 ...
- php基础知识(一)--2017-04-14
1.Php的两种打开方式: 第一种方式:地址栏打开:http://localhost/0414/qq.php 地址栏输入localhost/ 就是phpstudy下的www文件夹 第二种:新 ...
- shell编程01—shell基础
01.学习shell编程需要的知识储备 1.vi.vim编辑器的命令,vimrc设置 2.命令基础,100多个命令 3.基础.高端的网络服务,nfs,rsync,inotify,lanmp,sersy ...
- CLR寄宿和应用程序域
Win实际上将CLR作为一个COM服务器实现在一个DLL内,即为CLR定义了标准的COM接口,并为该接口和COM服务器分配一GUID,安装FrameWork时表示CLR的COM服务器被注册到注册表内. ...
- Linux内核分析笔记
我在MOOC<Linux内核分析>的学习笔记,这里只做个索引! 计算机是如何工作的
- web_测试用例注意点
测试是一种思维,包括情感思维和智力思维,情感思维主要体现在一句俗语:思想决定行动上(要怀疑一切),智力思维主要体现在测试用例的设计上.具有了这样的思想,就会找出更多的bug.(^_^个人认为,不代表官 ...