文章目录

  • 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. 索引

  • 索引:在表的列上构建一个二叉树,以达到大幅提高查询效率的目的,但是会影响增删改的效率。
  1. 创建单列索引
create index idx_ename on emp(ename);
--单列索引触发规则:条件必须是索引列中的原始值。
--单行函数,模糊查询,都会影响索引的触发
  1. 复合索引
create index idx_enamejob on emp(ename,job);
--复合索引中第一列时优先检索列
--要触发复合索引,必须包含优先检索列中的原始值

索引的使用原则:

  1. 在大表上建立索引才有意义
  2. 在 where 子句后面或者是连接条件上的字段建立索引
  3. 表中数据修改频率高时不建议建立

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常用笔记(二)相关推荐

  1. Oracle 学习笔记二 Create table

    1.创建用户 create user hfy identified by hfy; 2.在该用户下建表 建表必须满足权限和表空间: 首先连接sys账户,grant create session to ...

  2. php oracle创建临时表,Oracle常用命令笔记

    Oracle常用命令笔记 客户端用的pl/sql工具 ORACLE的重启命令 (1) 以系统管理员登录,命令:connect / as sysdba (2) 启动数据库,命令:startup (3) ...

  3. oracle中常用关键字,oracle常用函数及关键字笔记

    --函数及关键字-- 1.trim,ltrim,rtrim 去除字符,无指定默认去除空格 SELECT TRIM('a' FROM 'aafhfhaaaaaaaa'), LTRIM('aafhfhaa ...

  4. oracle直查和call哪个更快,让oracle跑的更快1读书笔记二

    当前位置:我的异常网» 数据库 » <>读书笔记二 <>读书笔记二 www.myexceptions.net  网友分享于:2013-08-23  浏览:9次 <> ...

  5. MATLAB 基础笔记(二):常用矩阵的生成

    笔记二是简单介绍常用矩阵的生成 目录 笔记二是简单介绍常用矩阵的生成 1.零矩阵的生成 2.单位矩阵的生成 3.全1矩阵的生成 4.随机整数向量生成 5.生成指定对角线元素矩阵 6.生成对角矩阵 7. ...

  6. 冯柯《我的ORACLE笔记二:关于回滚段》接力来袭!

    感谢大家对此文的关注!我们的活动还在继续中~您对文章内容有任何疑问时,欢迎您点击原文链接,填写阅读反馈表.我们不仅会邀请作者来回答问题,还会从中抽取一位粉丝赠送精美礼品一份哦~ <我的ORACL ...

  7. MyBatis笔记二:配置

    MyBatis笔记二:配置 1.全局配置 1.properites 这个配置主要是引入我们的 properites 配置文件的: <properties resource="db.pr ...

  8. oracle常用sql语句

    – 首先,以超级管理员的身份登录oracle sqlplus sys/bjsxt as sysdba –然后,解除对scott用户的锁 alter user scott account unlock; ...

  9. Oracle学习笔记 字符集概述

    Oracle 学习笔记 字符集概述 这节课开始讲oracle里面的字符集 偏重于原理和简单的一些判断以及实现 字符集它涉及到很多的东西 比如建库和操作系统环境 这节课把字符集的原理性的东西以及常见的操 ...

最新文章

  1. java 泛型接口 范型类 范型方法_泛型类、泛型方法、泛型接口
  2. BZOJ 3993 Luogu P3324 [SDOI2015]星际战争 (最大流、二分答案)
  3. 【Python】推荐10个好用到爆的Jupyter Notebook插件,让你效率飞起
  4. C++位操作确定一个数是否为2的幂的算法实现(附完整源码)
  5. 《C专家编程》第二章——这不是Bug,而是语言特性
  6. python需要配置环境变量吗_python为什么会环境变量设置不成功
  7. 【Spring】事务
  8. outlook 2013 卡在正在加载配置文件
  9. Flutter布局锦囊---蜡笔画的表单
  10. RBF神经网络——案例二
  11. MPLAB X环境ICD3无法使用
  12. Inno Setup 简体中文语言包
  13. ubuntu 18.04 安装 wine5.0
  14. 【项目管理/PMP/PMBOK第六版/新考纲】纯干货!项目经理/角色/项目经理的能力/项目经理的领导力/领导和管理/职位权力/个人权力/领导生命周期理论/仆人式领导
  15. 程序员:耐得住寂寞,禁得住诱惑
  16. 在centos下安装pycrypto报错 RuntimeError: autoconf error
  17. ROS专题----tf和tf2坐标变换
  18. Gido推出电商快递服务,从中国到越南只需三天
  19. 携程PMO--小罗说敏捷之WIP限制在制品
  20. DirectDraw基础篇(学东西还是基础的好哦!)

热门文章

  1. 树莓派开机发ip到邮箱
  2. Prometheus+Alertmanager详细配置邮箱告警
  3. This application failed to start because no Qt platform plugin could be initialized. 报错解决方法
  4. 任正非接班人亮相:原来他要的是这种类型!
  5. 科普计算机软硬件知识,科普显卡基础知识 让你更加了解显卡
  6. 深度学习入门笔记(二十):经典神经网络(LeNet-5、AlexNet和VGGNet)
  7. ZZULIOJ 1800 少水群多刷题
  8. 常用英文单词的标准缩写
  9. 鲜为人知的PCB抄板常识,您了解多少?
  10. 中富金石马力老师:2022年中央一号文件发布 时隔多年重提加强粮库建设