第18章 PLSQL基础
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
18.2.1
标识符
标识符可以由字母、数字、下划线、货币符号和“#” 字符组成,并且必须以字母开头,其最大长度为30个字符。 使用标识符可以用来命名PL/SQL语句块中的变量、常量、 数据类型、游标、参数、子程序(包括存储过程、函数和包 )的名称。 除了上面讲到的标识符定义之外,在PL/SQL语句块中 定义变量、常量、数据类型、游标、参数、子程序的名称时 ,还需要注意以下一些规则。 PL/SQL语句块中的标识符不区分大小写。例如,变量 v_stuName和变量v_STUNAME表示的意义相同。
18.1.4 子程序
带参数的过程 CREATE OR REPLACE PROCEDURE insert_student( p_ stuID VARCHAR2(15), p_ stuName VARCHAR2(10), p_age NUMBER(2), p_ sex VARCHAR2 (20), p_ birth DATE) AS BEGIN …….. END;
18.1.3
命名语句块
所谓命名语句块,顾名思义,就是给与特定名称的 PL/SQL 语句块。它与匿名语句块用法基本相同,也只能执 行一次,一般都是动态生成的。 如果要为匿名语句块加入相应的名字,可以使用 “<<>>”对其进行标记。
18.1.3
命名语句块
名
<<insert_student>> DECLARE v_ stuID VARCHAR2(15) := 's145203'; v_ stuName VARCHAR2(10):= '杜玉'; v_age NUMBER(2) :=22; v_ sex VARCHAR2 (20) :=’女’; v_ birth DATE :=’19870513’; BEGIN /* *插入学生信息 */ INSERT INTO t_student VALUES(v_ stuID, v_ stuName, v_age, v_ sex, v_ birth); /* *根据学生编号查询学生姓名 */ SELECT stuName INTO v_stuName FROM t_student WHERE stuID = v_ stuID; DBMS_OUTPUT.PUT_LINE (‘学生姓名为’|| v_stuName); END;
18.1.1
基本语句块
PL/SQL语言中的基本语句块包含三个部分,定义部分 、执行部分和异常处理部分。在这三个部分中,只有执行部 分是必需的,而定义部分和异常处理部分是可选的。 1.完整的基本语句块架构 2.包含定义部分和执行部分的语句块架构 3.包含执行部分和异常处理部分的语句块架构
18.1.1
18.1.4 子程序
18.1.5 包
包是由两个相互独立的部分组成的,包头和包体。其 中,包头是用来包含包内容的相关信息。包头含有过程和函 数的定义,不包含任何过程和函数实现的代码。可以使用关 键字CREATE [OR REPLACE] PACKAGE定义一个包头。 其中,关键字OR REPLACE是可选的。
18.2.1
标识符
程序中的标识符不能使用PL/SQL中的关键字命名。例 如,使用begin定义一个变量将会产生一个编译错误。 PL/SQL语句块中使用标识符定义变量或者常量时,一 行只能定义一个变量或者常量。在程序中一行定义两个变量 或者常量是不允许的。 如果希望标识符中包括除字母、数字、下划线、货币 符号和“#”字符以外的符号,或者希望使用关键字作为标识 符,或者希望区分标识符的大小写,可以使用双引号(“” )将该标识符引起来。例如,”student Name”、” v/b”、 ” V/B”、” begin” 、”BEGIN”等,这些都是合法的标识 符。
第18章 PL/SQL基础
PL/SQL语句其实是由过程性的语句和SQL语句组成的 。SQL语句在前面的章节中已经介绍过了,本章就来介绍 PL/SQL的块结构和PL/SQL的基本要素。另外,还将介绍 过程性的语句中涉及到的变量声明、数据类型、变量作用域 以及数据类型相互转换等内容。
第18章
PL/SQL基础
2.函数 CREATE OR REPLACE FUNCTION insert_student( p_ stuID VARCHAR2(15), p_ stuName VARCHAR2(10), p_age NUMBER(2), p_ sex VARCHAR2 (20), p_ birth DATE) RETURN VARCHAR2 AS BEGIN /* *插入学生信息 */ INSERT INTO t_student VALUES(p_ stuID, p_ stuName, p_age, p_ sex, p_ birth); /* *根据学生编号查询学生姓名 */ SELECT stuName INTO v_stuName FROM t_student WHERE stuID = v_ stuID; RETURNv_stuName; END insert_student;
基本语句块
1.完整的基本语句块架构 DECLARE /* 定义变量、常量、数据类型、游标等*/ BEGIN /*执行代码*/ EXCEPTION /*异常处理代码*/ END;
18.1.1
基本语句块
2.包含定义部分和执行部分的语句块架构 DECLARE /* 定义变量、常量、数据类型、游标等*/ BEGIN /*执行代码*/ END;
包体是用来实现包头中定义的过程和函数。可以使用 关键字CREATE [OR REPLACE] PACKAGE BODY定义一 个包体。其中,关键字OR REPLACE是可选的。
18.1.5 包
包体是用来实现包头中定义的过程和函数。可以使用关键字CREATE [OR REPLACE] PACKAGE BODY定 义一个包体。其中,关键字OR REPLACE是可选的。 CREATE OR REPLACE PACKAGE BODY selectStudentPackage AS PROCEDURE insert_student( p_ stuID VARCHAR2(15), p_ stuName VARCHAR2(10), p_age NUMBER(2), p_ sex VARCHAR2 (20), p_ birth DATE) AS BEGIN /* *插入学生信息 */ INSERT INTO t_student VALUES(p_ stuID, p_ stuName, p_age, p_ sex, p_ birth); END; FUNCTION select_student( p_ stuID VARCHAR2(15)) RETURN VARCHAR2; AS /* *查询学生信息 */ SELECT stuName INTO v_stuName FROM t_student WHERE stuID = v_ stuID; RETURN v_stuName; END; END;
18.1.2
匿名语句块
DECLARE v_ stuID VARCHAR2(15) := 's145203'; v_ stuName VARCHAR2(10):= '杜玉'; v_age NUMBER(2) :=22; v_ sex VARCHAR2 (20) :=’女’; v_ birth DATE :=’19870513’; BEGIN /*插入学生信息*/ INSERT INTO t_student VALUES(v_ stuID, v_ stuName, v_age, v_ sex, v_ birth); /*根据学生编号查询学生姓名*/ SELECT stuName INTO v_stuName FROM t_student WHERE stuID = v_ stuID; DBMS_OUTPUT.PUT_LINE (‘学生姓名为’|| v_stuName); END;
18.1.6
触发器
触发器可以认为是一种特殊类型的存储过程,它是由 数据库管理系统隐式执行的。在触发器中可以包含SQL语句 和PL/SQL语句,在定义触发器时,还需要指定触发事件, 常用的触发事件主要是数据操纵语言DML(例如,INSERT 、UPDATE和DELETE)。可以使用关键字CREATE [OR REPLACE] TRIGGER定义一个触发器。其中,关键字OR REPLACE是可选的。
18.1.4 子程序
1.过程 CREATE OR REPLACE PROCEDURE insert_student AS v_ stuID VARCHAR2(15) := 's145203'; v_ stuName VARCHAR2(10):= '杜玉'; v_age NUMBER(2) :=22; v_ sex VARCHAR2 (20) :=’女’; v_ birth DATE :=’19870513’; BEGIN /* *插入学生信息 */ INSERT INTO t_student VALUES(v_ stuID, v_ stuName, v_age, v_ sex, v_ birth); /* *根据学生编号查询学生姓名 */ SELECT stuName INTO v_stuName FROM t_student WHERE stuID = v_ stuID; END insert_student;
18.1.5 包
CREATE OR REPLACE PACKAGE selectStudentPackage AS PROCEDURE insert_student(p_ stuID VARCHAR2(15),p_ stuName VARCHAR2(10),p_age NUMBER(2), p_ sex VARCHAR2 (20,p_ birth DATE); FUNCTION select_student(p_ stuID VARCHAR2(15)) RETURN VARCHAR2;;
-- 显示学生姓
18.1.4 子程序
子程序包括过程、函数。子程序既可以应用在客户端 ,也可以应用在服务器端。子程序可以通过调用显式的执行 。子程序如果生成,就不可更改。PL/SQL的子程序可以在 应用程序中多次运行,通过使用子程序,可以提高程序的执 行效率,并有利于客户端程序的开发和维护。 1.过程 2.函数
18.1.1
基本语句块
3.包含执行部分和异常处理部分的语句块架构 BEGIN /*执行代码*/ EXCEPTION /*异常处理代码*/ END;
18.1.2
匿名语句块
所谓匿名语句块,顾名思义,就是没有名字的语句块 。匿名语句块只能执行一次,一般都是动态生成的,它既可 以嵌入到像proC/C++这样的程序中,也可以由客户端程序 产生,调用服务器中的一个子程序。
18.1.6
触发器
CREATE OR REPLACE TRIGGER student_resETE OF stuID ON t_student FOR EACH ROW BEGIN UPDATE t_result SET stuID = :new. stuID WHERE stuID =:old. stuID; END;
18.2.2
分割符
分隔符是在PL/SQL中含有特殊意义的符号,使用分隔 符可以将标识符分割开来。分隔符可以是单个符号(例如, +、-、*、/等),也可以是由多个符号组成的(例如,:=、 <<、>><>等)。
PL/SQL中的块结构; PL/SQL中的基本要素; 变量的声明和初始化; PL/SQL中的数据类型; 标量变量和复合变量的定义和使用; 用户自定义变量的使用; 变量的作用域; PL/SQL中数据类型之间的转换。
18.1
PL/SQL的块结构
语句块是PL/SQL的基本单元。PL/SQL程序就是由语 句块构成的。语句块之间可以相互嵌套。这一 节就来介绍 PL/SQL语句块中几种常用的块结构,包括基本语句块、匿 名语句块、命名语句块、子程序和触发器。