--=====================
-- PL/SQL --> 语言基础
--=====================
PL/SQL是过程化的SQL语言,是ORACLE对SQL语言的扩展,在普通SQL语句的基础上增加了编程语言的特点。使得该语言不仅具有过程编程语
言的特征,如循环、条件分支等。同时也具有对象编程语言的特征,如重载、继承等。
一、PL/SQL程序语言的组成
主要由块组成
一个块由三个基本部分组成:声明、执行体、异常处理
PL/SQL块有匿名块和命名块
命名块会将代码保存到服务器
典型的块结构如下
[ DECLARE --声明部分
declaration_statements
]
BEGIN
executable_statements --执行体部分
[EXCEPTION
exception_handling_statements --异常处理部分
]
END;
/
PL/SQL的语言优点
支持SQL
高生成率,性能好
可移植性
与Oracle集成
二、PL/SQL的语法要素
PL/SQL语法要素包括字符集、标识符、文本、分隔符、注释等。
字符集:
包括英文大小写
0-数字
空白符、制表符、空格
一些特殊符号,如~、!、@、#等
PL/SQL字符集不区分大小写
标识符:
变量、常量、子程序的名称
以字母开头、最大长度个字符
包含空格等特殊符号时,要用英文双引号括起来
文字
数值型
可用常规表示,也可以用科学计数法和幂的形式
字符型
字符型用单引号括起
日期型
布尔型
TRUE、FALSE、NULL
PL/SQL的数据类型
NUMBER 数字型能存放整数值和实数值,并且可以定义精度和取值范围
DEC 数字型NUMBER的子类型,小数
DOUBLE PRECISION 数字型NUMBER的子类型,高精度实数
INTEGER 数字型NUMBER的子类型,整数
INT 数字型NUMBER的子类型,整数
NUMERIC 数字型NUMBER的子类型,与NUMBER等价
REAL 数字型NUMBER的子类型,与NUMBER等价
SMALLINT 数字型NUMBER的子类型,取值范围比INTEGER小
BINARY_INTEGER 数字型可存储带符号整数,为整数计算优化性能
VARCHAR2 字符型存放可变长字符串,有最大长度
CHAR 字符型定长字符串
LONG 字符型变长字符串,最大长度可达,767
DATE 日期型以数据库相同的格式存放日期值
BOOLEAN 布尔型TRUE OR FALSE
ROWID ROWID 存放数据库的行号
LOB类型,又分为BFILE,BLOB,CLOB,NCLOB
操作符
算术运算符
+、-、*、/、**
比较运算符
=、<>、~=、!= 、^=、<、<=、>、>=
其它分隔符
()、:= (赋值)、,(表表项的分隔)、| |(字符串连接)
<< (标号开始) >> (标号的结束)
-- 单行注释
/* */ 多行注释
% 属性指示器,一般与TYPE、ROWTYPE等一起用
三、定义变量
变量的类型可以分为
标量类型
复合类型
参照类型
LOB 类型
1.标量类型(常用)
varchar2(n),char(n),number(p,s),date,timestamp,long(long raw),boolean,binary_integer,binary_float,binary_double
定义方法(定义时必须使用标量类型)
identifier [constant] datatype [not null] [:= | default expr]
v_ename varchar2(20);
v_sal number(6,2);
c_tax_rate constant number(3,2):=3.35;
v_hiredate date;
v_valid boolean not null default false;
v_ename emp.ename%type; --使用表列来定义数据类型
v_sal emp.sal%type;
2.复合类型(存放多个值的变量)
plsql中包含pl/sql记录,pl/sql表,嵌套表,varray四种复合类型
--定义PL/SQL记录
declare
type emp_record_type is record(
name emp.ename%type,
salary emp.sal%type,
title emp.job%type);
emp_record emp_record_type;
begin
select ename,sal,job into emp_record
from scott.emp where empno=7788;
dbms_output.put_line('Employee Name: ' || emp_record.name);
end;
/
--定义PL/SQL表
declare
type ename_table_type is table of emp.ename%type
index by binary_integer;
ename_table ename_table_type;
begin
select ename into ename_table(-1) from scott.emp
where empno=7788;
dbms_output.put_line('Employee Name : '|| ename_table(-1));
end;
/
PL/SQL表类似于高级语言中的数组,且PL/SQL表的下表可以为负值,元素的个数没有限制.注意必须首先定义PL/SQL表类型及表变量
在本例中,ename_table_type为表类型,表类型中元素的数据类型为emp.ename%type,
ename_table为表变量,ename_table(-1)表示下标为-1的元素
--嵌套表,varray例子略
3.参照类型变量
用于存放数值指针的变量。通常包括游标变量(REF CURSOR)和对象类型变量(REF obj_type)
4.LOB变量
存储大批量数据的变量,通常分为内部LOB以及外部LOB
5.使用SQL*Plus变量
必须首先使用variable命令定义变量,如在SQL*Plus中输出变量,则使用print variable_name
scott@ORCL> var name varchar2(20);
scott@ORCL> begin
2 select ename into :name from emp where empno=7788;
3 end;
4 /
PL/SQL procedure successfully completed.
scott@ORCL> print name;
NAME
--------------------------------
SCOTT
三、PL/SQL中常用的变量赋值方式
1.在定义时赋值
v_empno number:=7788
c_tax_rate constant number(3,2):=3.35;
2.使用select ... into 来赋值
SELECT expression INTO var_list FROM table_name WHERE condition
--例:将号部门的名称和工作地点显示出来
DECLARE
v_name dept.dname%TYPE;
v_loc dept.loc%TYPE;
BEGIN
select dname,loc INTO v_name,v_loc FROM dept WHERE deptno=10;
DBMS_OUTPUT.PUT_LINE('10 DEPT NAME: '||v_name);
DBMS_OUTPUT.PUT_LINE('10 DEPT loc: '||v_loc);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('NOT FOUND RECORD');
END;
/
--例:输入员工编号,查询员工姓名,职位,工资
scott@ORCL> DECLARE
2 v_name emp.ename%TYPE;
3 v_job emp.job%TYPE;
4 v_sal emp.sal%TYPE;
5 v_id emp.empno%TYPE;
6 BEGIN
7 v_id:=&inputid;
8 SELECT ename,job,sal INTO v_name,v_job,v_sal FROM emp WHERE empno=v_id;
9 DBMS_OUTPUT.PUT_LINE('7788 NAME:'||v_name);
10 DBMS_OUTPUT.PUT_LINE('7788 job:'||v_job);
11 DBMS_OUTPUT.PUT_LINE('7788 sal:'||v_sal);
12 EXCEPTION
13 WHEN NO_DATA_FOUND THEN
14 DBMS_OUTPUT.PUT_LINE('NOT FOUND RECORD!');
15 END;
16 /
Enter value for inputid: 7788
old 7: v_id:=&inputid;
new 7: v_id:=7788;
7788 NAME:SCOTT
7788 job:ANALYST
7788 sal:3000
PL/SQL procedure successfully completed.
--例:执行UPDATE
scott@ORCL> DECLARE
2 v_sal emp.sal%TYPE;
3 old_sal emp.sal%TYPE;
4 v_id emp.empno%TYPE;
5 BEGIN
6 v_sal:=&inputsal;
v_id:=&inputid;
7 v_id:=&inputid;
8 SELECT sal INTO old_sal FROM emp WHERE empno=v_id;
9 UPDATE emp SET sal=v_sal WHERE empno=v_id;
10 DBMS_OUTPUT.PUT_LINE('old sal:'||old_sal);
11 DBMS_OUTPUT.PUT_LINE('new sal:'||v_sal);
12 END;
13 /
Enter value for inputsal: 3500
old 6: v_sal:=&inputsal;
new 6: v_sal:=3500;
Enter value for inputid: 7788
old 7: v_id:=&inputid;
new 7: v_id:=7788;
old sal:3000
new sal:3500
PL/SQL procedure successfully completed.
四、更多参考
有关SQL请参考
SQL 基础--> 子查询
SQL 基础-->多表查询
SQL基础-->分组与分组函数
SQL 基础-->常用函数
SQL 基础--> ROLLUP与CUBE运算符实现数据汇总
SQL基础-->层次化查询(START BY ... CONNECT BY PRIOR)
有关PL/SQL请参考
PL/SQL --> 语言基础
PL/SQL --> 流程控制
PL/SQL --> 存储过程
PL/SQL --> 函数
PL/SQL --> 游标
PL/SQL -->隐式游标(SQL%FOUND)
PL/SQL --> 异常处理(Exception)
PL/SQL --> PL/SQL记录
PL/SQL --> 包的创建与管理
PL/SQL --> 包重载、初始化
PL/SQL --> DBMS_DDL包的使用
PL/SQL --> DML 触发器
PL/SQL --> INSTEAD OF 触发器
分享到:
相关推荐
PL/SQL是Oracle对标准数据库语言的扩展,Oracle公司已经将PL/SQL整合到Oracle 服务器和...通过本教程的学习,您将初步掌握PL/SQL语言,能够利用PL/SQL语言完成建表、查询、添加、删除数据以及事务处理语句的基本用法。
第3章 语言基础 50 第2部分 PL/SQL程序结构 第4章 条件和顺序控制 77 第5章 用循环进行迭代处理 96 第6章 异常处理 118 第3部分 PL/SQL数据 第7章 使用数据 159 第8章 字符串 182 第9章 数字 221 第10章 日期和...
本书不仅适合于pl/sql初学者 而且也适合于有经验的pl/sql编程人员 本书还可以作为oracle应用开发培训班的教材或者辅助材料 ">sql是关系数据库的基本操作语言 它是应用程序与数据库进行交互操作的接口 pl/sql是...
《oracle pl/sql程序设计(第5版)》基于oracle数据库11g,从pl/sql编程、pl/sql程序结构、pl/sql程序数据、pl/sql中的sql、pl/sql应用构建、高级pl/sql主题6个方面详细系统地讨论了pl/sql以及如何有效地使用它。...
PL/SQL是ORACLE对标准数据库语言的扩展,ORACLE公司已经将PL/SQL整合到ORACLE 服务器和其他工具中了,近几年中更多的开发人员和DBA开始使用PL/SQL,本文将讲述PL/SQL基础语法,结构和组件、以及如何设计并执行一个PL...
通过学习本书,读者不仅可以掌握PL/SQL的基础编程知识(嵌入SQL语句和编写子程序),而且还可以掌握PL/SQL的所有高级开发特征(使用记录类型、集合类型、对象类型和大对象类型)。另外,本书还为应用开发人员提供了大量...
本文主要介绍PL/SQL的编程基础,以使入门者对PL/SQL语言有一个总体认识和基本把握。 二、编程基础知识 1. 程序结构 PL/SQL程序都是以块(block)为基本单位,整个PL/SQL块分三部分:声明部分(用declare开头)...
第3章 语言基础 50 第2部分 PL/SQL程序结构 第4章 条件和顺序控制 77 第5章 用循环进行迭代处理 96 第6章 异常处理 118 第3部分 PL/SQL数据 第7章 使用数据 159 第8章 字符串 182 第9章 数字 221 第10章 日期和...
PL/SQL是ORACLE对标准数据库语言的扩展,ORACLE公司已经将PL/SQL整合到ORACLE 服务器和其他工具中了,近几年中更多的开发人员和DBA开始使用PL/SQL,本文将讲述PL/SQL基础语法,结构和组件、以及如何设计并执行一个PL...
从Oracle6开始,Oracle公司在标准SQL的基础上发展了自己的PL/SQL语言,将变量、控制结构、过程和函数等结构化程序设计的要素引入了SQL语言中,这样就能够编制比较复杂的SQL程序了,利用PL/SQL语言编写的程序也称为...
1) PL/SQL(Procedual language/SQL)是在标准SQL的基础上增加了过程化处理的语言; 2) Oracle客户端工具访问Oracle服务器的操作语言; 3) Oracle对SQL的扩充; 4. PL/SQL的优缺点 优点:1) 结构化模块化编程,...
PUSQL基础<br>3.1 PL/SQL块简介<br>3.1.1 PL/SQL块结构<br>3.1.2 PL/SQL块分类<br>3.2 定义并使用变量<br>3.2.1 标量变量<br>3.2.2 复合变量<br>3.2.3 参照变量<br>3.2.4 LOB变量<br>3.2.5 非PL...
PL/SQL语言是的SQL语言扩展,具有为程序开发而设计的特性,如数据封装、异常处理、面向对象等特性。 PL/SQL是嵌入到Oracle服务器和开发工具中的,具有很高的执行效率和同Oracle数据库的完美结合。在PL/SQL模块中可以...
具体的语法结构可以参阅其他关于SQL语言的资料,这里不再赘述。 编辑本段 过程与函数 PL/SQL中的过程和函数与其他语言的过程和函数一样,都是为了执行一定的任务而组合在一起的语句。过程无返回值,函数有...
PL/SQL(Procedural Language/SQL)是一种过程化语言,属于第三代语言,它与C、C++、Java等语言一样关注于处理细节,可以用来实现比较复杂的业务逻辑。它允许SQL的数据操纵语言和查询语句包含在块结构(block_...