oracle学习笔记4:PL/SQL
PL/SQL是没命名的存储过程,函数,触发器,PL/SQL块的语法格式如下:
[declare]
--声明部分,可选
begin
--执行部分,必须
[exception]
--异常处理部分,可选
end
PL/SQL块每条语句必须用分号结束,单行注释--,多行注释/*...*/,下面是一个PL/SQL块例子
set serveroutput on
declare
--声明变量
a int := 1; --声明并且赋值
address varchar2(128);
mobilephone varchar2(20);
username varchar2(50);
begin
select address, mobilepone, usrename into address, mobilephone, username from orderinfo where orderid = 1
dbms_output.put_line('用户' || username || '的地址是' || address || '手机是' || mobilephone); --||字符连接运算符
exception
when others then
dbms_output.put_line('获取数据失败!');
end;
数据类型
1.数值类型:numeric,dec,decimal,double,integer,int,smallint,binary_integer,pls_integer
2.字符类型:varchar2, char, long,nchar,nvarchar2
varchar2最大长变为4000字节,长度可变
char最大长度为2000字节,长度不可变
long最大长度为32767字节,2GB
3.日期类型:date,7个字节
4.布尔类型boolean
特殊数据类型
1.%type可以声明一个与指定列名相同的数据类型
var_orderid orderinfo.orderid%type; var_orderid与orderinfo表中的orderid字段数据类型相同
2.record数据类型
用type语句进行定义,record类型是一种结构化数据类型,相当于C#的结构类型,可以存储多个列值组成一行,格式:
type record_type is record
(
var_member1 data_type [not null] [:=default_value],
...
var_member2 data_type [not null] [:=default_value]
)
例子:
type orderinfo is record
(
orderid int not null:=1,
ordercode varchar2(20) not null
)
3.%rowtype
它可以根据表中的结构定义一种特殊的数据类型
var_orderinfo orderinfo%rowtype --var_orderinfo变量名,orderinfo表名
定义变量和常量
<变量名> <数据类型>[(长度):=<初始值>];
var_name int;
var_name2 varchar2(20);
var_name3 numeric:=3;
定义常量
<变量名> constant <数据类型>:=<常量值>;
con_name constant integer:=3;
流程控制
1.if语句
if <condition_expression1> then
plsql_sentence;
elseif <condition_expression2> then
plsql_sentence;
else
plsql_sentence;
end;
2.case语句
case <selector>
when <expression_1> then plsql_sentence;
when <expression_2> then plsql_sentence;
.......
when <expression_n> then plsql_sentence;
[else plsql_sentence;]
end case;
循环语句
1.loop
loop语句先执行一次循环体,然后再判断exit when关键字后面的条件表达式的值true还是false,如果是true退出循环体,否则继续执行循环体
loop
plsql_sentence;
exit when end_condition_exp;
end loop;
例子:
declare
sum int := 0;
i int := 0;
begin
loop
i:= i+1;
sum := sum + i;
exit when i= 100;
end loop;
end;
2.while语句
while condition loop
plsql_sentence;
end loop;
3.for语句
for counter in [reverse] min..max loop
plsql_sentence;
end loop;
默认情况下计数器的值会循环递增,reverse关键字使计数器会随着循环器递减
for i in 1..100 loop
dbms_output.put_line(i);
end loop;
pl/sql游标
显示游标
使用游标顺序
1.声明游标
2.打开游标
3.读取游标
4.数据是否为空,是关闭游标,否继续读取
1.声明游标
cursor cur_name[(input_parameter1,input_parameter2...)]
[return ret_type]
is select_sentence;
input_parameter:para_name [in] datatype [{:= default|para_value}]
例子
cursor cur_orderinfo(ordercode in varchar2 := '0000000')
is select * from orderinfo where ordercode= ordercode;
这里的参数不可以指定长度,否则会报错
2.打开游标
open cur_name[(para_value[,para_value2]...)];
para_value:指定输入参数的值
open cur_orderinfo('11111111');
param_value是可选参数,如果未指定则用声明使用的默认值,如果指定了则用这里指定的值
3.读取游标
fetch cur_name into {variable};
例子:
var_orderinfo orderinfo%rowtype;
fetch cur_order into var_orderinfo;
如果有值的话,可以用var_orderinfo.orderid读取数据
4.关闭游标
close cur_name;
例子:
close cur_orderinfo;
游标的属性
1.%found 布尔型属性 ,如果SQL语句至少影响到一行数据,则该属性返回御前,否则返回false
2.%notfound 与%found属性相反
3.%rowcount 数字型属性,返回受SQL语句影响的行数
4.%isopen 布尔型属性,游标打开返回true,关闭返回false
例子:
set serveroutput on
declare
cursor cur_orderinfo (username in varchar2)
is select * from orderinfo where username= username;
var_orderinfo orderinfo%rowtype;
begin
open cur_orderinfo('abcd');
fetch cur_orderinfo into var_orderinfo;
while cur_orderinfo%found loop
dbms_output.put_line('订单编号:' || var_orderinfo.ordercode);
fetch cur_orderinfo into var_orderinfo;
end loop;
close cur_orderinfo;
exception
when others then
dbms_output.put_line('错误');
end;
隐式游标
在执行一个SQL语句时,Oracle会自动创建一个隐式游标。这个游标是内存中处理该语句的工作区域,隐式游标主要是处理数据操纵语句(如update,
delete语句)的执行结果,当然特殊情况下,也可以处理select语句的查询结果。由于隐式游标也有属性,当使用隐式游标属性时,需要在属性前面加上隐式
游标的默认名称--SQL。在实际编程中,经常使用隐式游标来判断更新数据行或删除数据行的情况。
set serveroutput on
begin
update orderinfo set mobilephone = '1111111111' where username = 'abcd';
if sql%notfound then
dbms_output.put_line('此用户不需要更新手机号码');
else
dbms_output.put_line('更新手机成功');
end if;
end;
通过for语句循环游标
1.for语句循环隐式游标
begin
for var_orderinfo in (select * from orderinfo)
loop
sql_sentences;
end loop;
end;
2.for语句循环显示游标
declare
cursor cur_orderinfo is select * from orderinfo;
begin
for var_orderinfo in cur_orderinfo
loop
sql_sentences;
end loop;
end;
for语句循环游标时,可以声明游标,但不用打开,读取,关闭游标。
oracle学习笔记4:PL/SQL的更多相关文章
- Oracle学习笔记之PL/SQL编程
SQL(Structure Query Language)的含义是结构化查询语句,最早由Boyce和Chambedin在1974年提出,称为SEQUEL语言.1976年,IBM公司的Sa ...
- Oracle学习笔记之四,SQL语言入门
1. SQL语言概述 1.1 SQL语言特点 集合性,SQL可以的高层的数据结构上进行工作,工作时不是单条地处理记录,而对数据进行成组的处理. 统一性,操作任务主要包括:查询数据:插入.修改和删除数据 ...
- Oracle学习DaySix(PL/SQL续)
一.游标 在 PL/SQL 程序中,对于处理多行记录的事务经常使用游标来实现.游标是一个指向上下文的句柄( handle)或指针.通过游标,PL/SQL 可以控制上下文区和处理语句时上 下文区会发生些 ...
- Oracle学习DayFive(PL/SQL)
一.PL/SQL简介 PL/SQL 是 Procedure Language & Structured Query Language 的缩写.PL/SQL 是对 SQL 语言存储过程语言的扩 ...
- Oracle学习(十一):PL/SQL
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/v123411739/article/details/30231659 1.知识点:能够对照以下的录屏 ...
- 吴裕雄--天生自然ORACLE数据库学习笔记:PL/SQL编程
set serveroutput on declare a ; b ; c number; begin c:=(a+b)/(a-b); dbms_output.put_line(c); excepti ...
- Oracle学习笔记_02_基本SQL
1.select语句 (1)语法 SELECT *|{[DISTINCT] column|expression [alias],...} FROM table; (2)示例: 选择全部列 SELECT ...
- Oracle学习笔记之四sp1,Oracle 11g的常用函数
从Oracle学习笔记之四,SQL语言入门中摘出来的,独立成一章节 3.1 字符类函数 ASCII(c)和CHR(i) 分别用于返回一个字符的ASCII码和返回给定ASCII值所对应的字符. C ...
- Oracle 学习笔记(Windows 环境下安装 + PL/SQL)
Oracle 安装.PL/SQL 配置使用 前言:因更换机械硬盘为 SSD 固态硬盘装了新 Windows 7 系统,需要重新搭建开发环境,把 Oracle 安装过程和 PL/SQL 配置使用做下笔 ...
- Oracle 学习笔记 18 -- 存储函数和存储过程(PL/SQL子程序)
PL/SQL子程序 它包含了函数和过程.此功能是指用户定义的函数.和系统功能是不同的.子程序通常完成特定的功能PL/SQL座.,能够被不同的应用程序多次调用.Oracle提供能够把PL/SQL程序存储 ...
随机推荐
- Linux之sed详解
转载:http://blog.chinaunix.net/u/22677/showart_1076318.html 1.简介 sed是非交互式的编辑器.它不会修改文件,除非使用shell重定向来保 ...
- chapter3:Collaborative Filtering ---------A Programmer's Guide to Data Mining
Implicit rating and item based filtering Explicit rating: 用户明确的对item评分 Implicit rating:反之 明确评分所存在的问题 ...
- nginx一致性hash及应用场景。
考虑一种场景. 多台web服务. 1 后台添加用户,更新用户信息,要求管理员能够实时看到变化. 2 前台用户允许1分钟后生效. nginx 配置一致性hash1. https://github.com ...
- RDD.scala(源码)
---- map. --- flatMap.fliter.distinct.repartition.coalesce.sample.randomSplit.randomSampleWithRange. ...
- HOWTO: Setup XCode 6.1 to work with OpenCV3 libraries
HOWTO: Setup XCode 6.1 to work with OpenCV3 libraries Overview This post demonstrates how to setup y ...
- xml增强学习笔记
2 Dom4j修改xml文档 2.1 写出内容到xml文档 XMLWriter writer = new XMLWriter(OutputStream, OutputForamt) wirter.wr ...
- JavaScript实现拖拽预览,AJAX小文件上传
本地上传,提前预览(图片,视频) 1.html中div标签预览显示,button标签触发上传事件. <div id="drop_area" style="bord ...
- Plinq-Parallel.ForEach for 性能提升
https://msdn.microsoft.com/zh-cn/library/dd460720.aspx 本示例显示如何使用 Parallel.ForEach 循环对任何 System.Colle ...
- C#环境下的数值计算库:MathNet
下面用一个简单的例子来说明MathNet的使用方法: 1. 进入MathNet官网找到数值计算库Math.NET Iridium(Numerics)并下载: 2. 将下载的文件解压缩,在目录下的Bin ...
- WEB DYNPRO SAP HELP
http://help.sap.com/saphelp_nw70ehp1/helpdata/EN/43/70d83e8cb23d67e10000000a114084/content.htm