第十课Oracle PLSQL块基础、编写规则
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
PL/SQL块结构
一个PL/SQL块包括三部分:声明部分、执行部分、异常 处理部分。
DECLARE …… …… BEGIN ……. ……. EXCEPTION ……. ……. END; 声明部分:以关键字declare开始,用于定义 常量、变量、游标、异常等。 执行部分:以关键字begin开始,用于实现应 用模块功能,该部分包含了要执行的PL/SQL 语句和SQL语句。 异常处理部分:以关键字exception开始,用 于处理执行部分可能出现的运行错误。
输出
例如:将职工编号为7369的职工姓名以变量 v_ename输出。
DECLARE v_ename VARCHAR2(8) ; BEGIN SELECT ename INTO v_ename FROM scott.emp WHERE empno=7369; dbms_output.put_line(v_ename); END;
注:V$视图是SYS用户所拥有的,在缺省状况下,只
有SYS用户和拥有DBA系统权限的用户可以看到所有
的视图,没有DBA权限的用户可以看到USER_和
ALL_视图。
NEW
新课引 言
SQL语言对数据库进行各种操作,每次只能执行一条语 句,语句以英文的分号为结束标识,这样使用起来很不方便, 同时执行效率低。 Oracle数据库系统不像程序设计语言,它侧重于后台数 据库的管理,提供的编程能力较弱。而结构化编程语言对数据 库的支持能力又较弱。如果一些稍微复杂的管理任务都要借助 编程语言来实现的话,这对管理员来说是很大的负担。 正是在这种需求的驱使下,从Oracle6开始Oracle公司在 标准SQL语言的基础上加入了变量、控制结构、过程和函数等 结构化程序设计的要素,发展了自己的PL/SQL语言,这样就 能够编制比较复杂的程序,利用PL/SQL语言编写的程序也称 为PL/SQL程序块。
公共同义词、私有同义词 create public synonym synomym_name for [schema.] object
数据字典
数据字典(Data Dictionary,简称DD)是以数据表和视图 为主要存在形式的。对它们可以象处理其他数据库表或视图 一样进行查询,但不能进行任何修改。 Oracle数据库字典通常是在创建和安装数据库时被创建的, Oracle数据字典是Oracle数据库系统工作的基础,没有数据 字典的支持,Oracle数据库系统就不能进行任何工作 数据字典里存有用户信息、用户的权限信息、所有数据对象 信息、表的约束条件、统计分析数据库的视图等。当用户在 对数据库中的数据进行操作时遇到困难就可以访问数据字典 来查看详细的信息。
输入字符&
例如:输入任意的职工编号并输出。 DECLARE v_empno number(4):=&v_e; BEGIN dbms_output.put_line(v_empno); END;
输入字符&
练习:将任意职工编号的职工姓名以变量v_ename 输出。
A、v_ename C、v_sal D、c_tax E、%sal VARCHAR2(10);
B、v_sal,v_comm
NUMBER(6,2);
NUMBER(6,2) NOT NULL; CONSTANT NUMBER(6,2) DEFAULT 0.17; NUMBER(6,2);
F、v_comm m%TYPE;
说明: •每行只能定义一个标识符。 •如果加上关键字CONSTANT,则表示所定义的标识符为一个常 量,必须为它赋初值。 •如果定义的标识符不能为空,则必须加上关键字NOT NULL, 并赋初值。
•为标识符赋值时,使用赋值符号‘:=’,默认值为空。
定义变量
练习:以下哪几种定义变量和常量的方法是正确的?
create sequence sequence_name [increment by n] [start with n] [{minvalue n |nominvalue}] [{maxvalue n |nomaxvalue}] [cycle | nocycle] [{cache n | nocache}]
put_line和put的区别:
dbms_output.put_line换行,dbms_output.put不换行。 例: BEGIN
dbms_output.put('put======='); dbms_output.put('put======='); dbms_output.put_line('putline======'); dbms_output.put_line('putline======'); dbms_output.put_line('putline======'); END; 结果: put=======put=======putline====== putline====== putline======
DECLARE v_ename VARCHAR2(8) ; BEGIN SELECT ename INTO v_ename FROM scott.emp WHERE empno=&no; dbms_output.put_line('雇员名:'|| v_ename); END;
PL/SQL块分类
命名块:是指具有特定名称标识的PL/SQL块,命名块与匿名块非 常类似,只不过在PL/SQL块前使用<< >>加以标记。 <<outer>>
PL/SQL块分类 过程 子程序: 函数
包
触发器:
PL/SQL块的DECLARE部分
PL/SQL数据类型
当编写PL/SQL块时,为了存储临时数据,需要定义变量 和常量。为了在应用环境和子程序之间传递数据,需要 为子程序定义参数。当定义变量、常量和参数时,需要 指定合适的PL/SQL数据类型:
标量(scalar)数据类型 复合(composite)数据类型 LOB(large object)数据类型
复 习
什么是索引?
索引是一个单独的、物理的数据库结构,它是表中一 列或多列值的集合和相应行所对应的rowid。
索引的分类
Oracle的索引主要包含两类:_Tree索引和位图索引。
默认情况下大多使用B_tree索引,该索引就是通常所见
的唯一索引、非唯一性索引、单列索引、复合索引等。
创建索引--create index命令
标量数据类型 标量数据类型包括数字、字符、日期和布 尔等类型。
标量数据类型—数字类型
number(p,s)
pls_integer:定义整数,范围为-2147483647到+
2147483647。
binary_integer:同pls_integer。
binary_float:定义单精度浮点数。当为该类型变 量赋值时,应该带有后缀f(例如:1.5f)。 binary_double:定义双精度浮点数。当为该类型 变量赋值时,应该带有后缀d(例如:3.00095d)。
DECLARE v_ename VARCHAR2(8) ; BEGIN SELECT ename INTO v_ename FROM scott.emp WHERE empno=&no; dbms_output.put_line('雇员名:'|| v_ename); END;
注:当使用嵌套块时,为了区分多级嵌套层次关系,可以使 用命名块加以区分。
输出
利用PL/SQL的系统包——dbms_output将输出显示到 屏幕上,需用SET SERVEROUTPUT ON打开该功能。 常利用dbms_output包中的dbms_output.put_line 和 dbms_output.put过程。
例如: BEGIN dbms_output.put_line(sysdate); END;
拥有的对象的信息。
“ALL_”为前缀的数据库字典视图通常记录包括执行查询的
帐户所拥有的对象的信息及授权至PUBLIC的帐户用户所拥有 的对象的信息
“DBA_”为前缀的数据库字典视图包含所有数据库对象的信息, 而不管其所有者 其他的字典视图中主要的是V$视图,之所以这样叫是因为
他们都是以V$或GV$开头的。
数据字典的分类
静态数据字典:主要是在用户访问数据字典时不
会发生改变
动态数据字典:是依赖数据库运行的性能,反映 数据库运行的一些内在信息。
在Oracle数据库字典中,许多视图都有三个不同的实例,它们
的前缀分别为“USER_”、“ALL_”、“DBA_”
“USER_”为前缀的数据库字典视图通常记录执行查询的账户所
注:declare部分属于可选部分,exception部分属于可选部分, begin部分是必需的,end为PL/SQL块的结束标记,换行使用/执行。
PL/SQL块分类
当使用PL/SQL开发应程序时,根据需要实现的应用模块功 能,可以将PL/SQL块划分为匿名块、命名块、子程序和触 发器四种类型。 匿名块:是指没有名称的PL/SQL块。
应用举例:
DECLARE v_ename v_sal BEGIN ………. ………. END; VARCHAR2(10); NUMBER(6,2);
PL/SQL块的BEGIN部分
在begin部分查询数据库
通过在PL/SQL块中的BEGIN部分嵌入SQL语句,可以将数 据放入变量,然后输出或处理该变量。 注意:select语句只能返回一条数据。 语法如下:
定义变量、常量名称需要注意的问题
• 定义变量、常量时,名称必须字母(A—Z,a—z)开始,并 且最大长度为30个字符。如果以其他字符开始,必须使用双 引号引住。 • 定义变量、常量时,名称中只能使用符号(A—Z、a—z、 0—9、_、$、#)。如果使用以其他字符,必须使用双引号 引住。 • 定义变量、常量时,名称不能使用oracle关键字。 • 为了提高程序的可读性,当定义变量名时,建议使用v_作为 前缀。 • 为了提高程序的可读性,当定义常量名时,建议使用c_作为
create [unique] [bitmap] index index_name on table_name (col_name1[ASC|DESC], ……)
在默认情况下,create index命令创建的是非唯一的B树索引
什么是序列?
序列是一个数字生成器,用于生成连续的、唯一的 数字。序列也是一种数据库对象。
PL/SQL块基础
PL/SQL块简介
块(block)是PL/SQL程序的基本单元,编写PL/SQL
程序实际就是编写PL/SQL块。
如果完成相对简单的应用功能,那么可能只需要编 写一个PL/SQL块;如果要实现复杂的应用功能,那么 可能需要在一个PL/SQL块中嵌套其他PL/SQL块。当编 写PL/SQL应用模块时,块的嵌套层次是没有限制的。
SELECT select_list INTO FROM table_name WHERE condition; variable_name1,…..
例如:DECLARE v_ename VARCHAR2(8) ; BEGIN SELECT ename INTO v_ename FROM scott.emp WHERE empno=7369; END;
使用序列
当使用序列时,必须通过属性nextval和currval来引 用序列,引用方法:序列名.属性
nextval用于返回下一个序列值 currval用于返回当前序列值 注意:当第一次引用序列时,必须使用nextval,返 回的是初始值
同义词的概念
同义词是为表、视图和序列等对象起的另外一个名字
同义词的分类
前缀。
标量数据类型
示例:合法变量、常量名称。
v_ename
v$sal
v#error
“1234”
“变量A”
定义变量
变量名[constant]数据类型 [not null][{:=|default} de_val]
例如:
v_ename v_sal c_tax_rate v_valid
VARCHAR2(10); NUMBER(6,2); CONSTANT NUMBER(3,2):=5.5; BOOLEAN NOT NULL DEFAULT FALSE;