Chinaunix首页 | 论坛 | 博客
  • 博客访问: 92301290
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: Oracle

2008-04-30 16:15:11

 

讲讲pl/sql编程基础.
pl/sql(Procedural Language/SQL,过程语言/SQL)是结合了Oracle过程语言和结构化查询语言(SQL)的一种扩展语言.pl/sql支持多种数据类型,可以使用条件语句和循环语句等控制结构.pl/sql可用于创建存储过程、触发器和程序包等,也用来处理业务规则、数据库事件或SQL命令的执行添加程序逻辑.
pl/sql优点如下:
1.支持SQL
SQL是访问数据库的标准语言,通过使用SQL命令,用户可以轻松地操纵存储在关系数据库中的数据.PL/SQL允许使用所有的SQL数据操纵命令、游标控制命令、事务控制命令、SQL函数、运算符和伪列,因此可以更加灵活而有效地操纵表中的数据.
2.支持面向对象编程(OOP)
3.更好的性能
SQL是一种非过程语言,在此语言中一次只能执行一条语句,因此在连续的语句之间没有关联.使用这PL/SQL则可以一次处理整个语句块.这减少了在应用程序和Oracle服务器之间进行通信所花费的时间,从而提高性能.过程调用是快速而高效的,因为PL/SQL存储过程编译一次后,是以可执行的形式存储的.
4.可移植性
5.与SQL集成
6.安全性

pl/sql块:
pl/sql是一种块结构的语言,它将一组语句放在一个块中.构成PL/SQL程序的基本单位是逻辑块(如过程、函数或匿名块),该逻辑块可以包含任何数量的嵌套子块,每个逻辑块对应要解决的问题或子问题.PL/SQL块将逻辑上相关的声明和语句组合一起.在PL/SQL块中可以使用select、insert、update、delete等DML语句、事务控制语句以及SQL函数等.
pl/sql块共分为3个部分,具体内容如下.
1.声明部分:声明块中使用的变量、游标和自定义异常.这些声明的作用域仅限于它们所在的块.
2.可执行部分:执行命令并操作在声明部分声明的变量和游标.PL/SQL可执行部分是必选项.
3.异常处理部分:处理执行块时引发的异常.
如下一个结构:
declare
....
begin
.......
exception
.....
end;


PL/SQL对大小写不第三,但是用户和用户的开发团队应该选择一个的编码标准,以确保最好地使用共享池.

PL/SQL中一些复合符号的含义如下:
:=   赋值操作符
||   连接操作符
--   单行注解
/*,*/多行注解
<<,>> 标签分隔符
..   范围操作符
** 求幂操作符

声明变量:
变量名 类型:=值;
声明常量:
常量名 constant 数据类型:=值;
OK,下面来看个实例:
declare
s_id number;
s_name varchar2(20);
begin
select empno,ename into s_id,s_name from emp where empno=7369;
dbms_output.put_line('编号为'||s_id||'姓名为'||s_name);
end;

pl/sql提供的4种内置数据类型:
*标量数据类型:此类型包括数字,字符,日期时间,布尔型的数据类型
*LOB类型:此类型包括bfile,blob,clob.
bfile数据类型用于将大型二进制对象存储在操作系统中.
blob数据类型用于将大型二进制数据存储在数据库中.
clob数据类型用于将大型字条数据存储在数据库中.
*属性类型:
%type与%rowtype
%type引用某个变量或数据库的数据类型来声明变量.看实例:
declare
s_id number;
s_name varchar2(20);
begin
s_id:=&abc;
select ename into s_name from emp where empno=s_id;
dbms_output.put_line(s_name);
end;
%rowtype提供表示表中一行的记录类型.记录类型可以存储从表中选择或由游标提取的整行数据.
简单实例:
declare
s_id number;
s_record emp%rowtype;
begin
s_id:=&abc;
select * into s_record from emp where empno=s_id;
dbms_output.put_line('姓名为'||s_record.ename||'工资为'||s_record.sal);
end;

OK,控制结构,PL/SQL程序可通过控制结构来控制命令执行的流程.
控制结构有如下三种:
1.条件控制
条件控制包括IF语句和case语句.
IF语句有三种
(1)IF-then语句,实例如下:
begin
if 2>1 then dbms_output.put_line('为真');
end if;
end;
(2)IF-then-else语句,实例如下:
declare
s_id number;
begin
s_id:=&abc; --此处为给用户输入参数
if s_id=0 then dbms_output.put_line('关机状态...');
else dbms_output.put_line('开机状态');
end if;
end;
(3)IF-then-ELSIF语句,实例如下:
declare
s_id number;
begin
s_id:=&abc;
if s_id>=80 then dbms_output.put_line('优异');
elsif s_id>=70 then dbms_output.put_line('一般');
elsif s_id>=60 then dbms_output.put_line('及格');
else
dbms_output.put_line('不及格');
end if;
end;
case语句,与C语言中case差不多,在这就不举出具体实例.
2.循环控制
create table hh(id number)--创建表

declare
s_id number:=1;
begin
while s_id<=20
loop
insert into hh values(s_id);
select count(*) into s_id from hh;
end loop;
end;
3.顺序控制
顺序控制用于按顺序执行语句.顺序控制包括:
(1).goto语句
无条件的将控制权转到标签指定的语句.标签是双尖括号括起来的标识符,在pl/sql块内必须具有唯一的名称,标签后必须紧跟可执行语句或pl/sql块.goto语句不能跳转到IF语句、case语句、Loop语句或子块中.
(2)null语句.
什么也不做,只是将控制权转到下一条语句.
下面一个goto与null结合的实例:
declare
s_sal emp.sal%type;
begin
s_sal:=&输入薪金;
select sal into s_sal from emp where empno=7782;
if s_sal<1000 then
goto updation;
else
goto quit;
end if;
<>
update emp set sal=sal*3 where empno=7782;
<>
null;
end;

 

原文:http://hujing1229.blog.ccidnet.com/blog-htm-do-showone-uid-60604-type-blog-itemid-185153.html


阅读(215) | 评论(0) | 转发(0) |
0

上一篇:pl/sql编程之动态SQL

下一篇:索引

给主人留下些什么吧!~~