一、SQL和PL/SQL的区别
SQL是结构化查询语言,比较接近自然语言,使用SQL,只需要说干什么,不需要说怎么干。由数据定义语言、数据操纵语言、数据控制语言构成,它不面向过程,即前一条语句与后一条语句无关。SQL是标准的数据库语言。
PL/SQL,Oracle对SQL标准的扩充,增加了面向过程的功能,所以可以用来编写存储过程、存储函数、触发器等等。 PL/SQL是结构化SQL,就是在标准SQL中加入了IF…ELSE… For…等控制过程的SQL。
二、具体的什么是PL/SQL
PL/SQL(Procedural Language/SQL) 是对SQL的扩充,它吸收了近年来编程语言的许多最高设计特点:如数据封装性、信息隐蔽性、重载和例外处理等。它允许SQL的数据操纵语言和查询语句包含在块结构(block_structured)和代码过程语言中,使PL/SQL成为一个功能强大的事务处理语言。
三、PL/SQL基本语法
1、基本架构
declare
-- Local variables here
i integer;
begin
-- Test statements here
end;
上边就是一个plsql能够执行的基本架构(并不是存储过程),其中 declare 顾名思义就是描述的意思就是在这个下边可以对变量进行声明。
2、声明变量
- 变量可以在声明时赋值,也可以先定义后赋值;
- 使用%TYPE与%ROWTYPE可以根据已有类型定义变量。
PL/SQL是一种强类型的编程语言,所有的变量都必须在它声明之后才可以使用,变量都要求在declare部分进行声明,而对于变量的名称也有如下的一些规定:
- 变量名称的组成可以由字母、数字、_、$、#等组成;
- 所有的变量名称要求以字母开头,不能是Oracle中的保留字(关键字);
- 变量的长度最多只能为30个字符。
声明变量的语法:
变量名称 [CONSTANT] 类型 [NOT NULL] [:=value] ;
组成:
CONSTANT
:定义常量,必须在声明时为其赋予默认值;
NOT NULL
:表示此变量不允许设置为NULL;
:=value
:表示在变量声明时,设置好其初始化内容。
声明变量有大概如下两三种方式:
v_temp varchar(10);
v_temp tablename.property%type;
(表明属性名%type就是该表属性的类型,这样可以灵活使用)v_stu student%rowtype;
(这种类型就是定义一个变量为表数据的行类型用于接受查询的一行数据,注意是一行数据)
%rowtype 栗子:
DECLARE
deptRow dept%ROWTYPE ; -- 装载一行dept记录
BEGIN
SELECT * INTO deptRow FROM dept WHERE deptno=10 ;
--当用户使用了“SELECT … INTO …”将表中的一行记录设置到了ROWTYPE类型的变量之中,
就可以利用“rowtype变量.表字段”的方式取得表中每行的对应列数据。
DBMS_OUTPUT.put_line('部门编号:'||deptRow.deptno || ',名称:' || deptRow.dname || ',位置:' || deptRow.loc) ;
END ;
部门编号:10,名称:ACCOUNTING,位置:NEW YORK
说到变量,必须了解数据表中的数据类型
3、数据类型
数据表中的数据类型:字符型,数值型,日期型,其他型
字符型:
char(n)
char(8)只能存8个字母 n最大2000 不满使用空格补
nchar(n)
根据Unicode标准定义的,所以nchar(8)能存8个汉字 n最大1000
varchar(n)
不要使用,使用varchar2,目前和varchar2一样,以后计划会改<