oracle常用笔记(二)
文章目录
- oracle常用笔记(二)
- 1. 视图
- 2. 索引
- 3. pl/sql 基本语法
- 1. 变量声明
- 2. if分支
- 3. LOOP 循环
- 4. 游标Cursor
- 4. 存储过程
- 5. 存储函数
- 6. 触发器
- 7.java调用存储过程/存储函数
oracle常用笔记(二)
1. 视图
--创建视图
create view v1 as select ename,job from emp
--创建或覆盖原视图的只读视图
create or replace view v1 as select ename from emo with read only;
--修改视图与更新sql语言一样
2. 索引
- 索引:在表的列上构建一个二叉树,以达到大幅提高查询效率的目的,但是会影响增删改的效率。
- 创建单列索引
create index idx_ename on emp(ename);
--单列索引触发规则:条件必须是索引列中的原始值。
--单行函数,模糊查询,都会影响索引的触发
- 复合索引
create index idx_enamejob on emp(ename,job);
--复合索引中第一列时优先检索列
--要触发复合索引,必须包含优先检索列中的原始值
索引的使用原则:
- 在大表上建立索引才有意义
- 在 where 子句后面或者是连接条件上的字段建立索引
- 表中数据修改频率高时不建议建立
3. pl/sql 基本语法
1. 变量声明
declare --说明部分 (变量说明,游标申明,例外说明 〕
i number(2) : =10;
s varchar2(10) :='小明';
ena emp.ename&type; -- 引用型变量
emprow emp%rowtype; -- 记录型变量begin -- 语句序列 (DML 语句〕…
dbms_output.put_line(i);select * into ena from emp where empno = 7788;
dbms_output.put_line(ena);
select * into emprow from emp where empno = 7788;
dbms_output.put_line(emprow.ename || '的工作为:' || emprow.job);exception 例外处理语句
end;
2. if分支
declarei number(3) := &11; --定义 &和任意一个变量 与控制台交互,
beginif i<18 thendbms_output.put_line('未成年');elsif i<40 thendbms_output.put_line('中年人');--。。。end if;
end;
3. LOOP 循环
--while循环
declare i number(2) :=1;
beginwhile i<11 loopdbms_output.put_line(i);i :=i+1;end loop;
end;--exit循环
declare i number(2) :=1;
beginloopexit when i>10 loopdbms_output.put_line(i);i :=i+1;end loop;
end;--for循环
declare i number(2) :=1;
beginfor i in 1..10 loopdbms_output.put_line(i);end loop;
end;
4. 游标Cursor
- 游标:可以存放多条记录,相当于集合的概念
declarecursor c1 is select * from emp; -- 创建游标emprow emp%rowtype;
beginopen c1;loopfetch c1 into emprow;exit when c1%notfound;dbms_output.put_line(emprow.ename);end loop;close c1;
end;
4. 存储过程
create or replace procedure p1 (eno emp.empno%type) --参数有in/out类型,不写默认in
is --或者as
begin update emp set sal = sal+100 where empno = eno;commit;
end;--调用
declare begin p1(7788);end;
- in和out类型参数的类别:
- 凡是涉及到into,查询语句或者:= 赋值操作的参数都必须使用out
- 其余都用in
5. 存储函数
create or replace function f_yearsal(eno emp.empno%type) return number
--存储过程和存储函数的参数都不能带长度
is s number(10);
begin select sal*12+nvl(comm,0) into s from emp where empno = eno;return s; --存储函数的返回值类型不能带长度
end;
6. 触发器
触发器:制定一个规则,在执行增删改操作时,只要满足该条件,就会自动触发,无需调用
- 语句级触发器:不包含 for each row 的触发器
--语句级触发器
create or replace trigger t1
after
insert
on person
declare
begindbms_output.put_line('1个新员工入职了');
end;
行级触发器:包含for each row 的触发器 ,触发语句作用的每一条记录都被触发。在行级触
发器中使用 :old 和 :new 为了记录变量, 识别值的状态
--行级触发器
create or replace trigger t2
before
update on emp
for each row
declare
beginif :old.sal>:new.sal thenraise_application_error(-20001,'不能员工降薪');--raise_application_error(-20001~20999之前不能重复,'不能员工降薪');end if;
end;
7.java调用存储过程/存储函数
@Testpublic void javaCallProcedure() throws Exception {//加载数据库驱动Class.forName("oracle.jdbc.driver.OracleDriver");//得到Coonection连接Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "itheima", "itheima");//得到预编译statement对象CallableStatement ps = connection.prepareCall("{call p_yearsal(?,?)}");//给对象赋值ps.setObject(1, 7788);//1=index下标 7788 第一个?参数ps.registerOutParameter(2, OracleTypes.NUMBER);//执行查询操作ps.execute();System.out.println(ps.getObject(2));//释放资源ps.close();connection.close();}--调用存储函数CallableStatement ps = connection.prepareCall("{?= call p_yearsal(?)}");//给对象赋值ps.setObject(2, 7788);//1=index下标 7788 第一个?参数ps.registerOutParameter(1, OracleTypes.NUMBER);//执行查询操作ps.execute();System.out.println(ps.getObject(1));
oracle常用笔记(二)相关推荐
- Oracle 学习笔记二 Create table
1.创建用户 create user hfy identified by hfy; 2.在该用户下建表 建表必须满足权限和表空间: 首先连接sys账户,grant create session to ...
- php oracle创建临时表,Oracle常用命令笔记
Oracle常用命令笔记 客户端用的pl/sql工具 ORACLE的重启命令 (1) 以系统管理员登录,命令:connect / as sysdba (2) 启动数据库,命令:startup (3) ...
- oracle中常用关键字,oracle常用函数及关键字笔记
--函数及关键字-- 1.trim,ltrim,rtrim 去除字符,无指定默认去除空格 SELECT TRIM('a' FROM 'aafhfhaaaaaaaa'), LTRIM('aafhfhaa ...
- oracle直查和call哪个更快,让oracle跑的更快1读书笔记二
当前位置:我的异常网» 数据库 » <>读书笔记二 <>读书笔记二 www.myexceptions.net 网友分享于:2013-08-23 浏览:9次 <> ...
- MATLAB 基础笔记(二):常用矩阵的生成
笔记二是简单介绍常用矩阵的生成 目录 笔记二是简单介绍常用矩阵的生成 1.零矩阵的生成 2.单位矩阵的生成 3.全1矩阵的生成 4.随机整数向量生成 5.生成指定对角线元素矩阵 6.生成对角矩阵 7. ...
- 冯柯《我的ORACLE笔记二:关于回滚段》接力来袭!
感谢大家对此文的关注!我们的活动还在继续中~您对文章内容有任何疑问时,欢迎您点击原文链接,填写阅读反馈表.我们不仅会邀请作者来回答问题,还会从中抽取一位粉丝赠送精美礼品一份哦~ <我的ORACL ...
- MyBatis笔记二:配置
MyBatis笔记二:配置 1.全局配置 1.properites 这个配置主要是引入我们的 properites 配置文件的: <properties resource="db.pr ...
- oracle常用sql语句
– 首先,以超级管理员的身份登录oracle sqlplus sys/bjsxt as sysdba –然后,解除对scott用户的锁 alter user scott account unlock; ...
- Oracle学习笔记 字符集概述
Oracle 学习笔记 字符集概述 这节课开始讲oracle里面的字符集 偏重于原理和简单的一些判断以及实现 字符集它涉及到很多的东西 比如建库和操作系统环境 这节课把字符集的原理性的东西以及常见的操 ...
最新文章
- java 泛型接口 范型类 范型方法_泛型类、泛型方法、泛型接口
- BZOJ 3993 Luogu P3324 [SDOI2015]星际战争 (最大流、二分答案)
- 【Python】推荐10个好用到爆的Jupyter Notebook插件,让你效率飞起
- C++位操作确定一个数是否为2的幂的算法实现(附完整源码)
- 《C专家编程》第二章——这不是Bug,而是语言特性
- python需要配置环境变量吗_python为什么会环境变量设置不成功
- 【Spring】事务
- outlook 2013 卡在正在加载配置文件
- Flutter布局锦囊---蜡笔画的表单
- RBF神经网络——案例二
- MPLAB X环境ICD3无法使用
- Inno Setup 简体中文语言包
- ubuntu 18.04 安装 wine5.0
- 【项目管理/PMP/PMBOK第六版/新考纲】纯干货!项目经理/角色/项目经理的能力/项目经理的领导力/领导和管理/职位权力/个人权力/领导生命周期理论/仆人式领导
- 程序员:耐得住寂寞,禁得住诱惑
- 在centos下安装pycrypto报错 RuntimeError: autoconf error
- ROS专题----tf和tf2坐标变换
- Gido推出电商快递服务,从中国到越南只需三天
- 携程PMO--小罗说敏捷之WIP限制在制品
- DirectDraw基础篇(学东西还是基础的好哦!)
热门文章
- 树莓派开机发ip到邮箱
- Prometheus+Alertmanager详细配置邮箱告警
- This application failed to start because no Qt platform plugin could be initialized. 报错解决方法
- 任正非接班人亮相:原来他要的是这种类型!
- 科普计算机软硬件知识,科普显卡基础知识 让你更加了解显卡
- 深度学习入门笔记(二十):经典神经网络(LeNet-5、AlexNet和VGGNet)
- ZZULIOJ 1800 少水群多刷题
- 常用英文单词的标准缩写
- 鲜为人知的PCB抄板常识,您了解多少?
- 中富金石马力老师:2022年中央一号文件发布 时隔多年重提加强粮库建设