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. ecshop的详细安装步骤

    从网上找个ecshop包,然后下载,解压,解压后的ecshop是不能直接用的,要更改几个目录的权限才能用. ecshop要放在www目录下,这样访问的话就可以直接 http://localhost/e ...

  2. hibernate操作步骤(代码部分)

    1.加载hibernate的核心配置文件 2.创建SessionFactory对象 3.使用SessionFactory创建Session对象 4.开启事务(手动开启) 5.写具体逻辑crud,增删改 ...

  3. 用JMX远程监控Tomcat

    要通过JMX远程监控Tomcat,首先需要进行Tomcat的JMX远程配置. 注意:此配置添加在catalina.bat文件开头的注释行(rem)后面即可. 不需鉴权的配置: 先修改Tomcat的启动 ...

  4. Unity3D 骨骼动画原理学习笔记

    最近研究了一下游戏中模型的骨骼动画的原理,做一个学习笔记,便于大家共同学习探讨. ps:最近改bug改的要死要活,博客写的吭哧吭哧的~ 首先列出学习参考的前人的文章,本文较多的参考了其中的表述: 1. ...

  5. 利用angular给节点添加样式

    <!DOCTYPE html> <html lang="en" ng-app="myapp"> <head> <met ...

  6. 使用zabbix_agent监控第一台linux服务器

    添加zabbix用户和组 groupadd zabbix useradd -g zabbix zabbix 解压并编译安装 tar xf zabbix-3.2.1.tar.gz cd zabbix-3 ...

  7. Linux编程之select

    select系统调用的的用途是:在一段指定的时间内,监听用户感兴趣的文件描述符上可读.可写和异常等事件. select 机制的优势 为什么会出现select模型? 先看一下下面的这句代码: int i ...

  8. 查看java线程cpu占用情况的脚本

    #!/bin/bash [ $# -ne ] && exit jstack $ >/tmp/jstack.log -o THREAD,tid,time|sort -k2nr| s ...

  9. Web直接导入导出SHP/CAD实现探讨。

    1.导入SHP/CAD文件 WEB具有直接美观展现功能,功能实现到可视化最好不要超过3S,那么就要限制导入文件的大小和优化算法了. 1.1.SHP导入实现思路 SHP格式开源,Git上随便可以找到读取 ...

  10. 【Android Developers Training】 25. 保存文件

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...