PL/SQL(Procedure Language/SQL)

PLSQL是Oracle对sql语言的过程化扩展:
在SQL命令语言中增加了过程处理语句(如分支、循环等),使SQL语言具有过程处理能力。
SQL语言的数据操作能力与过程语言的数据处理能力相结合,使PLSQL面向过程,但比过程语言简单、高效、灵活、实用。
不同数据库的SQL扩展
  Oracle:PL/SQL
  DB2:SQL/PL
  SQL Server:Transac-SQL(T-SQL)
===============================================================
1、PL/SQL操作数据库效率最高
2、继续学习存储过程,存储函数,触发器
第一个程序
  --打开输出开关
  set serveroutput on
  declare
  -- 说明部分(变量,光标或者例外)
  begin
  --程序体
  dbms_output.put_line('hello world');
  end;
  /

===========================目录===============================

1,PL/SQL的程序结构

2,PL/SQL引用型变量和记录型变量

3,PL/SQL中if语句的使用

4,PL/SQL中循环语句的使用

5,PL/SQL中光标

6,PL/SQL例外

7,程序设计方法
================PL/SQL的程序结构===============================
declare
说明部分(变量说明、光标说明、例外说明)
begin
语句序列(DML语句)
exception
例外处理语句
end;
/
定义基本变量
类型:char,varchar2,date,number,boolean,long
举例:var1 char(15);
married boolean := true;
psal number(7,2);
================PL/SQL引用型变量和记录型变量====================
emp_rec emp%rowtype emp_rec是emp的行,数组类型,可以获取EMP的所有字段,加.字段即可。(记录型变量)
pename emp.ename%type 某个字段的类型,只能获取表中的一个字段。(引用型变量)
================PL/SQL中if语句的使用============================
1、if 条件 then 语句1;
语句2;
end if;
2、if 条件 then 语句1;
else 语句2;
end if;
3、if 条件 then 语句1;
elsif 语句 then 语句;
else 语句;
end if;
-- 判断用户从键盘输入的数字
set serveroutput on
accept num prompt '请输入一个数字';

declare
pnum number:=#
begin
if pnum = 0 then dbms_output.put_line('你输入的是0');
elsif pnum = 1 then dbms_output.put_line('你输入的是1');
else dbms_output.put_line('你输入的是其他数字');
end;
/
================PL/SQL中循环语句的使用============================
1.while循环:当循环条件成立时执行循环体,不成立时退出该循环
WHILE total <= 25000 LOOP
...
total := total + salary;
END LOOP;
2.loop循环:当循环条件不成立时执行循环体,成立时退出该循环
Loop
EXIT [when 条件];
...
End loop;
3.for循环:循环是连续的区间时
FOR I IN 1..3 LOOP
语句序列;
END LOOP;
================PL/SQL中光标============================
定义:就是一个结果集(result set)
语法
CURSOR 光标名[(参数名 数据类型[,参数名 数据类型]...)]
IS SELECT 语句;
例如 cursor c1 is select ename from emp;
实用:
1.打开光标:
open c1;打开光标执行查询
2.关闭光标:
close c1;关闭游标释放资源
3.取一行光标的值:
fetch c1 into pename;取一行到变量中
fetch的作用:1)把当前指针指向的记录返回
2)讲指针指向下一条记录
属性:
%found %notfound
%isopen判断光标是否打开
%rowcount影响的行数
光标数的限制:默认打开最多300个光标
修改光标数限制 alter system set open_cursors=400 scope=both
scopt属性:memory(只该当前实例),spfile(只改参数文件,数据库需要重启),both(两者都改)
实例:
set serveroutput on
declare
cursor cemp is select ename,salary from emp;
pname emp.ename%type;
psal emp.sal%type;
begin
-- 打开光标
open cemp;
loop
-- 取一条记录
fetch cemp into pename,psal;
exit when cemp%notfound
dbms_output.put_line(pname||'的薪水是'||psal);
end loop
-- 关闭光标
close cemp
end
/
实例1:给员工涨工资
set serveroutput on
declare
--定义光标给哪些员工涨工资
cursor cemp is select empno,empjob from emp;
penmno emp.empno%type;
pjob emp.empjob%type;
begin
--打开光标
--把之前涨的工资回退回去
rollback;
open cemp;
loop
fetch cemp into penmno,pjob;
exit when cemp%notfound
-- 判断新员工的职位
if pjob = 'president' then update emp set sal = sal+1000 where empno = pempno;
elsif pjob = 'manager' then update emp set sal=sal +800 where empno = pempno;
else update emp set sal = sal +400 where empno = pempno;
end if;
end loop
close cemp;
commit;
dbms_output.put_line('涨工资完成');
-- 对于oracle,默认的事务隔离级别是read committed
-- 事务的acid:原子性,一致性,隔离性,持久性,
end;
/
eg:
--使用带参数的光标
declare
--定义一个带参数的游标
cursor c_emp(dno number) is select ename from emp where deptno=dno;
p_ename emp.ename%type;
begin
--打开游标时需要参入实参
open c_emp(10);
loop
fetch c_emp into p_ename;
exit when c_emp%notfound;
DBMS_OUTPUT.PUT_LINE(p_ename);
end loop;
close c_emp;
end;
/
=================PL/SQL例外============================
例外是程序设计语言提供的一种功能,用来增强程序的健壮性和容错性
1.No_date_found(没有找到数据)
2.Too_many_rows (select...into语句匹配多个行)
3.Zero_Divide (被零除)
4.Value_error (算术或转换错误) 如:负数在实数范围开平方,abc字符串 转换成 数字123
5.Timeout_on_resource (等待资源时发生超时)比较典型的场景:分布式数据库
--系统例外:no_data_found
declare
pename emp.ename%type;
begin
select ename into pename from emp where empno=222222;
SYS.DBMS_OUTPUT.PUT_LINE(pename);
exception
when no_data_found then sys.dbms_output.put_line('没有对应的记录');
when others then sys.dbms_output.put_line('其它例外');
end;
/
--系统例外:too_many_rows;
declare
pename emp.ename%type;
begin
select ename into pename from emp where deptno=10;
SYS.DBMS_OUTPUT.PUT_LINE(pename);

exception
when no_data_found then sys.dbms_output.put_line('没有对应的记录');
when too_many_rows then sys.dbms_output.put_line('无法将多行记录赋值给一个普通变量');
when others then sys.dbms_output.put_line('其它例外');
end;
/
--系统例外:zero_divide 被0除
declare
pnum number;
begin
pnum:=1/0;

exception
when zero_divide then
sys.dbms_output.put_line('0不能做除数');
sys.dbms_output.put_line('0真的不能做除数');
when others then sys.dbms_output.put_line('其它例外');
end;
/
--系统例外:value_error算术或转换例外
declare
pnum number;
begin
pnum:='abd';
exception
when value_error then
sys.dbms_output.put_line('算术或者转换错误');
when others then sys.dbms_output.put_line('其它例外');
end;
/
--自定义例外:查询50号部门的员工姓名
set serveroutput on
declare
--定义光标
cursor cemp is select ename from emp where deptno=50;
pename emp.ename%type;
--自定义例外
no_emp_data exception;
begin
open cemp;
loop
fetch cemp into pename;
if cemp%notfound then raise no_emp_data;-- 抛出例外
exit when cemp%notfound;
end if;
end loop;
close cemp;-- 关闭光标,oracle自动启动pmon(process monitor)
exception
when no_emp_data then dbms_output.put_line('没有找到员工');
when others then dbms_output.put_line('其他');
end;
/
=====================程序设计方法============================
需求分析->概要设计->详细设计->编码->测试->上线
sql语句
变量:1、初始值是多少2、最终值如何得到

PL/SQL入门随笔的更多相关文章

  1. Oracle PL/SQL入门之慨述

    Oracle PL/SQL入门之慨述 一.PL/SQL出现的目的 结构化查询语言(Structured Query Language,简称SQL)是用来访问关系型数据库一种通用语言,它属于第四代语言( ...

  2. PL/SQL入门理解(一)

    1.PL/SQL概述 1)概念 pl/sql(procedural language)是Oracle在标准sql语言的基础上的扩展,可以实现定义变量.使用逻辑控制语句等 作用:默认oracle一次只能 ...

  3. Oracle PL/SQL 入门

    PL/SQL 全称:Procedure Language/SQL.产生背景自己去百度. 模板: Declare ---变量定义 num ; name ) := 'damon'; idesc cnt_i ...

  4. Oracle PL/SQL入门语法点

    PL_SQL:带有分支和循环,面向过程匿名块:declare(可选,声明各种变量和游标的地方)begin(必要的,从此开始执行)exception(抓取到异常后执行的)end;[sql] view p ...

  5. Oracle学习笔记之五,Oracle 11g的PL/SQL入门

    1. PL/SQL概述 PL/SQL(Procedural Language/SQL)是Oracle的专用语言,是对标准SQL语言的扩展,它允许在其内部嵌套普通的SQL语句,还可以定义变量和常量,允许 ...

  6. PL/SQL 入门

    1. 概述 PL/SQL(Procedure Language/SQL)是 Oracle 对 sql 语言的过程化扩展,指在 SQL 命令语言中增加了 过程处理语句(如分支,循环等),使 SQL 语言 ...

  7. SQL入门随笔(上机实验报告)

    <数据定义部分> 一.定义模式和删除模式 a.为用户定义一个模式学生—课程模式 S-T CREATE  SCHEMA  "S-T"  AUTHORIZATION USE ...

  8. Oracle+PL+SQL从入门到精通.丁士锋.清华大学出版社.2012

    \t第1篇 pl/sql开发入门第1章 oracle 11g数据库系统1.1 关系型数据库系统介绍1.1.1 什么是关系型数据模型1.1.2 数据库系统范式1.1.3 关系型数据库管理系统1.1.4 ...

  9. PL/SQL轻量版(一)——入门介绍

    一.概述 1.概念对比: SQL:结构化查询语言(Structured Query Language)简称SQL(发音:/ˈes kjuː ˈel/ "S-Q-L"),是一种特殊目 ...

随机推荐

  1. css3的学习

    已经学习css3一个月了,通过对css3的深入学习,我对网页设计的理解就更深刻了,以前只会用简单的图片,定位等来制作网页,现在可以运用css3扩展的新内容来写出更好看的网页. css3扩展内容中,我认 ...

  2. Elasticsearch文档查询

    简单数据集 到目前为止,已经了解了基本知识,现在我们尝试用更逼真的数据集,这儿已经准备好了一份虚构的JSON,关于客户银行账户信息的.每个文档的结构如下: { , , "firstname& ...

  3. Webpack 代码分离

    Webpack 代码分离 代码分离是 webpack 中最引人注目的特性之一. 你可以把你的代码分离到不同的 bundle 中,然后你就可以去按需加载这些文件. 总的来说, webpack 分离可以分 ...

  4. 使用可视化图表对 Webpack 2 的编译与打包进行统计分析

    此文主要对使用可视化图表对 Webpack 2 的编译与打包进行统计分析进行了详细地讲解,供您更加直观地参考. 在之前更新的共十七章节中,我们陆续讲解了 Webpack 2 从配置到打包.压缩优化到调 ...

  5. JavaScript练习笔记整理·2 - 6.24

      Codewars地址:https://www.codewars.com/ 欢迎和大家一起来讨论~   基础练习(1):   我的解答为: function isIsogram(str){ if(s ...

  6. Java基础(2)-基础类型

    java基础类型 基础类型 package knowledge.base; public class Properties { /** * 整型 * int 4字节 -2 147 483 648 ~2 ...

  7. [Android FrameWork 6.0源码学习] Window窗口类分析

    了解这一章节,需要先了解LayoutInflater这个工具类,我以前分析过:http://www.cnblogs.com/kezhuang/p/6978783.html Window是Activit ...

  8. 【前端】一步一步使用webpack+react+scss脚手架重构项目

    前言 前几天做了一个项目:[node]记录项目的开始与完成——pipeline_kafka流式数据库管理项目:因为开发时间紧迫,浅略的使用了一下react,感觉这个ui库非常的符合我的口味,现在趁着有 ...

  9. Linux进阶命令-sort、uniq、 cut、sed、grep、find、awk

    命令难度总体来说有简入难,参数都是工作中常常用到的.如果涉及到一些生僻的参数还请百度或man一下. sort(参考学习网站:http://www.cnblogs.com/dong008259/arch ...

  10. 解决java.lang.NumberFormatException: For input string: "id"

    今天,项目突然报"java.lang.NumberFormatException:For input string:"id"",项目框架是spring,spri ...