PL/SQL基础
打印 hi
set serveroutput on --打开输出开关
declare
--说明部分(变量说明,光标申明或者例外说明)
begin
--程序体,语句序列(DML语句)
dbms_out.put_line(‘hi’);--dbms_out程序包,put_line子程序
exception
--例外处理语句
end;
/ --/表示执行上一条语句或程序
desc dbms_out --查看程序包
声明部分
定义基本变量
类型:char,varchar2,date,number,boolean,long
举例:
name char(15);
married boolean :=true;
psal number(7,2);
example1:
--使用基本变量类型
declare
--定义基本变量类型
--基本数据类型
number number(7,2);
--字符串变量
name varchar2(20);
--日期变量
date date;
begin
number =1;
dbms_out.put_line(nember);
name :='zhuzhu';
dbms_out.put_line(name);
date := sysdate;
dbms_out.put_line(date);
--计算明天的日期
dbms_out.put_line(date +1);
end;
example2:
--使用基本变量类型
declare
--定义基本变量类型
--基本数据类型
number number(7,2);
--字符串变量
name varchar2(20);
--日期变量
date date;
begin
number =1;
dbms_out.put_line(nember);
name :='zhuzhu';
dbms_out.put_line(name);
date := sysdate;
dbms_out.put_line(date);
--计算明天的日期
dbms_out.put_line(date +1);
end;
引用型变量
emp_rec emp.name%type;--引用型变量就是定义一个变量,将一个表的一个字段查询出来赋给它,然后使用它把那个字段的值打印出来(一个值一个字段)
example:
--查询并打印员工号为2的姓名和薪资
set serveroutput on
declare
emp_name emp.name%type;
emp_sal emp.sal%type;
begin
select name , sal into emp_name ,emp_sal from emp where no = 2;
select sal into emp_sal from emp where no = 2;
dbms_out.put_line(emp_name||''的工资是''||emp_sal);
end;
/
记录型变量
emp_rec emp%rowtype;--记录行变量就是定义一个数组,将一个表的某些字段赋给它,此时它是一个数组,那么就可以使用它将这些字段的值都打印出来(一行值多个字段)
example:
--查询并打印员工号为2的姓名和薪资
set serveroutput on
declare
emp_name_sal emp%rowtype
begin
select * into emp_name_sal from emp;
dbms_out.put_line(emp_name_sal.name||'的工资是'||emp_name_sal.sal)
end;
/
执行部分
判断语句
- IF 条件 THEN 语句1;-----只有两种情况
语句2 ;
END IF;
- IF 条件 THEN 语句1;-----只有两种情况
ELSE 语句2 ;
END IF;
- IF 条件 THEN 语句1;-----只有三种或三种以上情况
ELSIIF 语句2 ;
ELSIF 语句3;
else 语句4;
END IF;
example:
--判断用户从键盘输入的数字
set serveroutput on
accept num prompt'请输入';
--num为地址值相当于指针
declare
pnum number :=#--取地址为num的值给数据类型为number的变量num
begin
IF pnum =1 THEN DBMS_OUT.PUT_LINE('值为1');
elsif pnum =2 THEN DBMS_OUT.PUT_LINE('值为2');
elsif pnum =3 THEN DBMS_OUT.PUT_LINE('值为3');
elsse DBMS_OUT.PUT_LINE('其他值');
end if;
end;
/
循环部分
- WHILE 循环条件 LOOP
执行语句
END LOOP;
- LOOP EXIT[WHEN 退出条件]
执行语句
ENDLOOP;
- FOR 值 IN 1.。。。n LOOP
执行语句
END LOOP;
example:
--打印1-----10
set serveroutput on
declare
pnum number :=1;
begin
while pnum<=10 loop loop for pnum in 1...10 loop
DBMS_OUT.PUT_LINE(pnum); exit when pnum > 10 DBMS_OUT.PUT_LINE(pnum);
pnum := pnum+1; DBMS_OUT.PUT_LINE(pnum); pnum := pnum+1;
end loop; pnum := pnum+1; end loop;
end ; end loop;
/
光标:就是一个结果集(列值),它的数据库中打开的数量是有限制的.oracle数据库中只允许在同一个会话中打开300个光标.
光标属性:%found;%notfound;%isopen (判断光标是否打开);%rowcount(影响的行数);
语法:cursor 光标名 is select 语法;
打开光标:open 光标名
定义光标:cursor c is select name from emp;
取光标值给变量:fetch c into pname ;--将当前指针指向的记录返回并且将指针指向下一个记录(需要取值时使用)
关闭光标是释放资源:close c;
example:
--查询并打印姓名,薪资
set serveroutput on
declare
cursor c is select name,sal from emp;
pname emp.name %type;
psal emp.sal%type;
begin
open c;
loop fetch c into pname,psal;
exit when c %notfound
dbms_out.put_line(pname||的薪资是||psal);
end loop;
end;
/
example:
--给不同职位的员工涨工资
set serveroutput on
declare
cursor c is select pro, job from emp;
pname emp.pro %type;
psal emp.job %type;
begin
open c;
fetch c into pro,job from emp;
exit when c %notfound
if job = '经理' then update emp set sal := sal+400;
elsif job = '职员' then update emp set sal := sal+300;
else update emp set sal := sal+200;
end loop;
close c;
dbms_out.put_line('更新完成');
end;
/
conmmit;
example:
--使用光标的%%isopen
set serveroutput on
declare
cursor c is select pro, job from emp;
pname emp.pro %type;
psal emp.job %type;
begin
open c;
if c%isopen then
dbms_out.put_line('光标已打开');
else dbms_out.put_line('光标未打开');
end if;
close c;
end;
/
example:
--使用光标的%rowcount属性
set serveroutput on
declare
cursor c is select pro, job from emp;
pname emp.pro %type;
psal emp.job %type;
begin
open c;
loop
fetch c into pro,job from emp;
exit when c%notfound;
dbms_out.put_line('rowcount'||c%rowcount);
end loop;
close c;
end;
/
关于在一个数据库会话中只能打开300个光标
查看可以打开的光标数量:
show parameter %cursor% --查看open _cuisor的数字
修改光标数量限制:alter system set open_cursor = 400 scope = both/memory/spfile; --scope可选both(都进行修改)/memory(只修改当前实例,不修改参数文件)/spfile(只修改参数文件不修改当前实例)中的一个
带参数的光标
语法:cursor 光标名 【参数名 参数数据类型,。。。】 is select 语法;
example:
set serveroutput on
declare
cursor c(dno number) is select pro, job from emp where deptno = dno; -- dno number为形参
pname emp.pro %type;
begin
open c(10); --10为实参
loop
fetch c into pname;
exit when c%notfound;
dbms_out.put_line(pename);
end loop;
close c;
end;
/
异常处理部分
例外:程序设计语言提供的一种功能,用来增强语言的容错性和健壮性,分为系统例外和自定义例外。
系统例外:no_data_found 没有找到数据
too_many_rows 查询语句匹配多行
zero_divide 被0除
value_error 算数或转换错误如根号下负数或abc转换为123之类的
timeout_on_resource 在等待资源是发生超时(如:分布式数据库)
example:
no_data_found--查询根本不存在的数据
set serveroutput on
declare
pname emp.name%type;
begin
open c(10); --10为实参
loop
select name from emp where no = 123;
eception
when no_data_found then dbms_out.put_line('未找到');
when others then dbms_out.put_line('其他异常');
end;
/
PL/SQL基础的更多相关文章
- Oracle数据库之PL/SQL基础
介绍PL/SQL之前,先介绍一个图像化工具:Oracle SQL Developer 在oracle的开发过程中, 我们难免会使用第三方开发的软件来辅助我们书写SQL, pl/sql是一个不错的sql ...
- Oracle实战笔记(第六天)之PL/SQL基础
一.PL/SQL介绍 1.概念 PL/SQL也是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL).PL/SQL是Oracle数据库对SQL语句的扩展.在普通SQL语 ...
- Oracle442个应用场景---------PL/SQL基础
----------------------------------------------------------------------------------- 备份和恢复数据库略过.在后面解说 ...
- pl/sql基础知识—定义并使用变量
n 介绍 在编写pl/sql程序是,可以定义变量和常量:在pl/sql程序中包括有: ①标量类型(scalar) ②复合类型(composite) ③参照类型(reference) ④lob(lar ...
- PL/SQL基础-异常处理
--*********异常处理一.异常的类型 ORACLE异常分为两种类型:系统异常.自定义异常. 其中系统异常又分为:预定义异常和非预定义异常.1.预定义异常 ORACLE定义了他们的错误编号和异常 ...
- PL/SQL基础2(笔记)
1 第一个PL/SQL的程序 DECLARE BEGIN DBMS_OUTPUT.PUT_LINE('Hello World!'); END; / --2一个简单的PL/SQL程序 DECLARE v ...
- PL/SQL基础1(笔记)
--基本结构DECLARE--变量声明部分:在此声明PL/SQL用到的变量,类型,游标,以及局部的存储过程和函数BEGIN --执行部分:过程及SQL语句,即程序的主要部分 EXCEPTION --执 ...
- oracle PL/SQL基础编程
PL/SQL(Procedural Language/SQL)是oracle中引入的一种过程化编程语言 PLS-00103:出现符号"declare"在需要下列之一时 符号&quo ...
- Oracle数据库—— PL/SQL基础编程
一.涉及内容 1. 掌握PL/SQL程序块的结构,理解并熟悉各种变量的应用. 二.具体操作 (一)使用system用户登录SQL*PLUS,使用SQL语句创建用户:u_你的姓名首字母(例如:u_zs) ...
- PL/SQL 基础编程
PL/Sql 编程 PL/Sql结构 [declare] --声明变量 begin --执行部分 [exception] ---异常处理部分 end PL/Sql 基本数据类型 数值类型 1. nu ...
随机推荐
- DB天气app冲刺第七天
今天估计得分应该是最差的了. 今天因为完全没准备所以在界面UI上面根本就是相当于没弄.结果今天的各组报告里自己做得很不好.不过好在只是项目的中间期,不碍大事. 今天也完成了任务.可以说超额了也.因为吃 ...
- js实现方法的链式调用
假如这里有三个方法:person.unmerried();person.process();person.married();在jQuery中通常的写法是:person.unmerried().pro ...
- C3p0的参数设置
C3p0的参数设置:ComboPooledDataSource和BasicDataSource一样提供了一个用于关闭数据源的close()方法,这样我们就可以保证Spring容器关闭时数据源能够成功释 ...
- 30 个最棒的 jQuery 的拖放插件
jQuery 允许用户为任意 DOM 元素添加可拖放的功能,通过 jQuery 的拖放插件你可以轻松实现网页上任意元素的拖拽操作.在本文中我们向你推荐 30 个最棒的 jQuery 的拖放插件. 点击 ...
- XSS脚本攻击漫谈
XSS跨站脚本攻击一直都被认为是客户端 Web安全中最主流的攻击方式.因为 Web环境的复杂性以及 XSS跨站脚本攻击的多变性,使得该类型攻击很难彻底解决.那么,XSS跨站脚本攻击具体攻击行为是什 ...
- 1003: [ZJOI2006]物流运输trans
spfa+dp; 刚刚开始一直想不通怎么判断他是否换了道: 后来才知道,将那个时间段打包,找出这段时间内的最短路: 真是太奇妙了! #include<cstdio> #include< ...
- 对 APM 用户的一次真实调查分析(上)
一.前言 国内的 APM 行业这两年刚刚起步,但是在国外却比较成熟了,并且由于这两年人力成本的快速提高,国内外涌现了几家非常不错的 APM 企业,例如,OneAPM,APPdynamic,Dynami ...
- MSSQL版本
(1)661是sql2008 R2的版本号 Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (Intel X86) Apr 2 201 ...
- SPRING IN ACTION 第4版笔记-第三章ADVANCING WIRING-008-SpEL介绍
一. 1.SpEL expressions are framed with #{ ... } 2.SpEl的作用 Sp EL has a lot of tricks up its sleeves, ...
- ANDROID_MARS学习笔记_S01原始版_018_SERVICE之Parcel
一.代码 1.xml(1)activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk ...