PL/SQL入门随笔
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入门随笔的更多相关文章
- Oracle PL/SQL入门之慨述
Oracle PL/SQL入门之慨述 一.PL/SQL出现的目的 结构化查询语言(Structured Query Language,简称SQL)是用来访问关系型数据库一种通用语言,它属于第四代语言( ...
- PL/SQL入门理解(一)
1.PL/SQL概述 1)概念 pl/sql(procedural language)是Oracle在标准sql语言的基础上的扩展,可以实现定义变量.使用逻辑控制语句等 作用:默认oracle一次只能 ...
- Oracle PL/SQL 入门
PL/SQL 全称:Procedure Language/SQL.产生背景自己去百度. 模板: Declare ---变量定义 num ; name ) := 'damon'; idesc cnt_i ...
- Oracle PL/SQL入门语法点
PL_SQL:带有分支和循环,面向过程匿名块:declare(可选,声明各种变量和游标的地方)begin(必要的,从此开始执行)exception(抓取到异常后执行的)end;[sql] view p ...
- Oracle学习笔记之五,Oracle 11g的PL/SQL入门
1. PL/SQL概述 PL/SQL(Procedural Language/SQL)是Oracle的专用语言,是对标准SQL语言的扩展,它允许在其内部嵌套普通的SQL语句,还可以定义变量和常量,允许 ...
- PL/SQL 入门
1. 概述 PL/SQL(Procedure Language/SQL)是 Oracle 对 sql 语言的过程化扩展,指在 SQL 命令语言中增加了 过程处理语句(如分支,循环等),使 SQL 语言 ...
- SQL入门随笔(上机实验报告)
<数据定义部分> 一.定义模式和删除模式 a.为用户定义一个模式学生—课程模式 S-T CREATE SCHEMA "S-T" AUTHORIZATION USE ...
- 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 ...
- PL/SQL轻量版(一)——入门介绍
一.概述 1.概念对比: SQL:结构化查询语言(Structured Query Language)简称SQL(发音:/ˈes kjuː ˈel/ "S-Q-L"),是一种特殊目 ...
随机推荐
- jdbc的配置及jdbc连接常用数据库(mysql、sqlserver、Oracle)
1.连接SQL Server数据库 import java.sql.*; publicclassMain{publicstaticvoid main(String[] args){String dri ...
- DISCUZ积分及点评需求
1.点评设置(可增强用户互动,但又不会顶帖刷屏):目前很难限制用户通过点评刷积分,点评等同于回复但却不需要审核,目前只是简单地关闭了点评功能.需求:可以审核点评内容:可以限制点评不获得积分或每天点评获 ...
- 活动页怎么切图photoshop
一 切固定大小的单个图片 1.用pc打开图像 2.按ctrl+A(全选) 3.点击 选择 ->变换选区 ->拉参考线(把参考线放到最中央)->按回车 ->ctrl+d(取消全选 ...
- AS3批量替换文件
在做项目时,经过会遇到资源替换问题.比如配音公司,提供了一批八九百个配音MP3文件,用到后面却发现有些配音不能正常使用.可能是十几个,也可能是一两百个.只能是配音公司重新提供.因为之前的配音资源,已经 ...
- AngularJS高级程序设计读书笔记 -- 指令篇 之 自定义指令
2. 自定义指令(15-17 章) Module.directive(name, factory) 2.1 创建自定义指令的方法 Module.directive(name, factory) 示例 ...
- flask 扩展之 -- flask-mail
Flask-Mail 封装了 python 标准库 smtplib 包, 以便于更好的与 Flask 集成. 一. 安装 $ pip install flask-mail 二. 配置 及 初始化 Fl ...
- Linux命令 文件压缩及压缩命令
gzip [功能说明] 文件的压缩 #gizp属于GNU软件,总性能不错,是Linux系统首选的压缩工具,tar归档命令的-z参数也是利用gzip/gunzip来解压缩 [语法格式] Gip[选项][ ...
- 基于FPGA的IIR滤波器
基于FPGA的IIR滤波器 by方阳 版权声明:本文为博主原创文章,转载请指明转载地址 ...
- js函数一些小的知识点
var scope="123"; function aa(){ console.log(scope);//undefind var scope="234"; c ...
- 远程连接mysql 授权方法详解
今在服务器上 有mysql 数据库,远程访问,不想公布root账户,所以,创建了demo账户,允许demo账户在任何地方都能访问mysql数据库中shandong库. 方案一: 在安装mysql的机器 ...