Pl/SQL

学习目标

1、认识plsql

2、变量、常量

3、匿名块

4、分支语句

5、循环

6、事务

学习内容

1、plsql

sql:结构化的查询语言:

insert、update、delete、select

表链接查询:

内连接:返回多表中都匹配(==)的数据

外连接:左(所有数据)、右(所有数据)

笛卡尔乘积:

plsql:过程化的SQL语言;扩充了:变量、常量、分支语句、循环、数据结构;匿名块的形式写命令

2、变量、常量

匿名块

declare -- 声明 变量
begin -- 开始exception -- 可以有 处理异常end; --结束

变量:

declare -- 声明 变量-- 变量名 数据类型v_sal number(10,2);     v_name varchar2(30);begin -- 开始select sal into v_sal from emp where ename='333';-- 默认的服务器输出命令-- || 字符串拼接夫 类似于java中的+dbms_output.put_line('二郎的工资是:'||v_sal);exception -- 可以有 处理异常-- no_data_found :预定义好的一个异常类型when no_data_found thendbms_output.put_line('没有找到合适的数据');end; --结束

常量:


-- 常量
declare--constant pi constant number(10,6):=3.1415926;r number(3):=20;area number(10,3); --面积
begin-- pi:=5.14; 常量不允许赋值area:=pi*r*r;dbms_output.put_line('面积是:'||area);end;

3、数据类型:

数字:

number(38),number(总位数,小数的位数)

时间:

date
datetime

字符串:

char:固定长度的字符类型 :char(N) :学号、身份证号、手机号;查询效率高
varchar2:可变长度的字符类型 varchar2(N):合理利用存储空间;名字、地址、.... 2000

大类型:

BLOB:大的二进制类型
CLOB:大的文本类型

引用类型:

列引用类型

列名%type
declarev_name emp.ename%type; --跟某列的数据类型一致v_sal emp.sal%type;
beginselect ename,sal into v_name,v_sal from emp where empno=66;dbms_output.put_line('名字:'||v_name||'工资是:'||v_sal);end;

行引用类型

表名%rowtype
declarev_emp emp%rowtype; --行引用类型
beginselect * into v_emp from emp where empno=66;dbms_output.put_line(v_emp.EMPNO||v_emp.ename);end;

记录类型:

-- 存储:编号、部门名称、员工的名字、工资
declare--声明结构类型 type emp_record is record(dno dept.deptno%type,dname dept.dname%type,ename emp.ename%type,sal emp.sal%type);-- 声明结构类型的变量 只能存放一行数据v_emp emp_record;
beginselect dt.deptno,dt.dname,e.ename,e.sal into v_emp  from dept dt,emp e where dt.deptno=e.deptno and e.empno=66;dbms_output.put_line(v_emp.dno||v_emp.ename);end;

4、分支语句

if分支语句:

if 条件 then...
end if;if 条件 then...
else...
end if;if 条件 then
elsif 条件 then
elsif 条件 then
elsif 条件 then
else
end if;
declarev_sal emp.sal%type;
beginselect sal into v_sal from emp where empno=8000;if v_sal>=10000 thendbms_output.put_line('西藏');elsif v_sal>=6000 and v_sal<10000 thendbms_output.put_line('黄浦江边.....');elsedbms_output.put_line('白开水就着馒头');end if;
end;

case…end结构:

select deptno,
case deptno when 3 then '科技部' when 4 then '信息部'
end 部门
from dept;select deptno,
case  when deptno=3 then '科技部' when deptno=4 then '信息部'
end 部门
from dept;

5、循环

loop…end loop;

declarev_i number(10):=1;
beginloop --循环dbms_output.put_line(v_i);v_i:=v_i+1;exit when v_i>10; --退出条件end loop; --结束循环end;

while循环

declarev_i number(10):=1;
beginwhile v_i<=10 loop --循环dbms_output.put_line(v_i);v_i:=v_i+1;end loop; --结束循环end;

for循环

begin--reverse :反转 for vi in reverse 1..10 loopdbms_output.put_line(vi);end loop;
end;

6、事务

事务?:transaction

确保一系列数据操作作为整体执行的一种机制。要么都执行,要么都不执行(回滚);

四大特性:

原子性(A):事务作为整体执行,要么执行,要么不执行。

一致性©:事务完成前 后 ,数据要保持一致状态。

隔离性(I):多个事务在并发执行时,事务之间是相互隔离的。

持久性(D):数据更新到数据库中对数据库的影响是永久的。

不同的隔离级别引发的一些问题:

脏读: A事务正在操作数据,尚未提交 ,B事务读取到了A事务中正在操作的数据。

不可重复读:A事务正在读取数据,B事务修改了A事务中的部分数据,A事务再次读取的数据不一致。只需要锁住部分数据就可以。

幻读:A事务正在读取数据,B事务插入了部分数据,A事务再次读取的数据不一致。需要锁住整张表。

设置事务的隔离级别:

1、读未提交(read uncommit) : 引发:脏读、不可重复读、幻读

2、读已提交(read committed):(oralce默认的隔离级别) 引发:不可重复读、幻读

3、重复读(repeatable read) (mysql的默认隔离级别) 引发:幻读

4、串行化(serializable)

oracle数据库中,默认写的insert,update,delete命令都属于事务的一部分,需要显示的提交或者回滚。

三个命令:

commit :提交
rollback :回滚
savepoint :设置保存点
beginupdate emp set sal=sal+1000 where empno=66;update emp set sal=0 where empno=88;commit; --提交rollback; --回滚end;
beginupdate emp set sal=sal+2000 where empno=66;savepoint a;update emp set sal=sal+2000 where empno=88;savepoint b;--commit; --提交rollback to a; --回滚commit;end;

jdbc中如何控制事务:

public static void main(String[] args) {Connection connection=null;PreparedStatement statement=null;try {Class.forName("oracle.jdbc.OracleDriver");connection= DriverManager.getConnection("","scott","tiger");
//            关掉自动提交事务connection.setAutoCommit(false);
//            第一条命令statement=connection.prepareStatement("insert ....");statement.setInt();statement.setInt();statement.setInt();statement.setInt();statement.executeUpdate();
//            第二条命令statement=connection.prepareStatement("insert ....");statement.setInt();statement.setInt();statement.setInt();statement.setInt();statement.executeUpdate();//            提交事务connection.commit();} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {try {
//                回滚事务connection.rollback();} catch (SQLException ex) {ex.printStackTrace();}e.printStackTrace();}}

总结

1、plsql是什么?

2、变量如何声明?

declare变量名 数据类型:=值;

3、数据类型:

%type
%rowtype

4、示例熟练

Oracle第三课之PLSQL相关推荐

  1. Oracle数据库第二课2——PLSQL Developer使用教程及基础操作。

    PL/SQL Developer是一个集成开发环境,专门面向Oracle数据库存储程序单元的开发.如今,有越来越多的商业逻辑和应用逻辑转向了Oracle Server.因此,PL/SQL编程也成了整个 ...

  2. 【Python的自学之路】(五):案例分析第三课

    目录 序言 背景 思路 代码及解析 跋文 序言 上次谈到了GUI框架tkinter,今天就基于这个模块,开发一个工作中用到的小工具.备份存储过程的小工具. 背景 案例分析第三课-备份存储过程小工具 前 ...

  3. 第三课.运算符与表达式

    第三课目录 运算符与表达式 算术运算符 关系运算符 逻辑运算符 德摩根律 使用断言assert 位运算符 补码 补码与位运算 赋值运算符 杂项运算符 运算符与表达式 数学是科技发展的基础,数学公式的意 ...

  4. 第三课.Linux代码编辑器

    第三课目录 vi/vim vi/vim简介 vi的模式 vi在命令模式下的操作 vi在底线命令模式下的操作 Visual Studio Code Git git简介 关于git的故事 git的使用 v ...

  5. 0.0 目录-深度学习第三课《结构化机器学习项目》-Stanford吴恩达教授

    文章目录 第五课 第四课 第三课 第二课 第一课 第五课 <序列模型> 笔记列表 Week 1 循环序列模型 Week 1 传送门 -> 1.1 为什么选择序列模型 1.2 数学符号 ...

  6. 【C语言探索之旅】第三部分第三课:SDL开发游戏之显示图像

    内容简介 1.第三部分第三课: SDL开发游戏之显示图像 2.第三部分第四课预告: SDL开发游戏之事件处理 第三部分第三课:SDL开发游戏之显示图像 上一课中,我们学习了如何加载SDL库(SDL_I ...

  7. 矩阵理论及其应用_有限元分析ansys理论与应用视频第三课 绪论:直接法矩阵求解...

    我们拒绝关注获取资源的行为, 我们拒绝分享文章获取资源的行为, 我们拒绝收费获取资源的行为, 我们拒绝一切套路. 是否关注是大家的自由, 我们只为努力分享机械行业资源, 让更多的学习者受益. 本期视频 ...

  8. Oracle数据库三种备份方案

    Oracle数据库有三种标准的备份方法,它们分别是导出/导入(EXP/IMP).热备份和冷备份.导出备件是一种逻辑备份,冷备份和热备份是物理备份. 一. 导出/导入(Export/Import) 利用 ...

  9. 斯坦福大学机器学习第三课“多变量线性回归“

    斯坦福大学机器学习第三课"多变量线性回归(Linear Regression with Multiple Variables)" 斯坦福大学机器学习第四课"多变量线性回归 ...

最新文章

  1. ipsec ***野蛮模式应用
  2. Jsp 无法解析${}
  3. 美军称五角大楼遭网络袭击 2.4万份敏感文件被盗
  4. SD卡格式化怎么恢复?只需要五个步骤
  5. Java中JRE、JDK和JVM的区别
  6. Python中__new__和__init__的区别与联系
  7. Eclipse中不使用内嵌Maven
  8. CSS基本布局16例
  9. 洛谷 P1827 美国血统 American Heritage Label:字符串Water
  10. 2022年最完整的html网页跳转代码大全
  11. Common-BeanUtils 使用
  12. 开发“小米商城官网首页”(静态页面)
  13. linux什么系统以dd镜像写入,linux下使用dd命令写入镜像文件到u盘
  14. MBR分区,GPT分区,EFI分区,MSR分区是什么?各有什么用处?
  15. 2019年厦门国际银行“数创金融杯”数据建模大赛总结
  16. linux 有线链接树莓派,linux-通过公共互联网连接到树莓派
  17. Android冒险之旅-14-RecycleView(线性,网格,瀑布流)
  18. 美丽的夕阳(小孩文章)
  19. Web服务小试——天气预报
  20. 2022年应届大学毕业生就业分析报告

热门文章

  1. 网络协议之:socket协议详解之Datagram Socket
  2. 也谈Spring MVC
  3. Mybatis助手之Mybatis-Plus——开始使用
  4. 安卓学习 之 概述(一)
  5. 02.es的节点发现和集群构建
  6. 洛谷——P1056 排座椅
  7. 汉密尔顿回路 (25 分)【思路讲解】
  8. 1034 Head of a Gang (30 分) One way that the police finds the head of a gang is to check people‘s pho
  9. 5行代码AC——L1-029 是不是太胖了 (5分)
  10. [Leetcode总结] 101.对称二叉树