PLSQL程序设计(基础篇)
第18章 PLSQL基础
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;
PLSQL程序设计
包括数值型(如NUMBER)、字符型(如VARCHAR2)、 日期型(如DATE)等。
01
集合数据类型
包括表、数组和集合,用于存储多个值。
02
03
自定义数据类型
使用COMMIT语句可以提交事务,将所有未提交的更改永久保存到数据库中。
感谢您的观看
THANKS
循环读取
使用循环结构(如WHILE循环)逐行读取游标中的数据。
异常处理
在读取游标数据时,应处理可能出现的异常,以确保程序的健壮 性。
游标的关闭
关闭游标
使用CLOSE语句关闭游标,释放与 游标相关的资源。
清理资源
关闭游标后,应释放所有与游标相关 的变量和资源,以避免内存泄漏。
06
PL/SQL事务处理
BEFORE触发器
在指定的事件(如INSERT、UPDATE或DELETE)之前执行的操作。
AFTER触发器
在指定的事件之后执行的操作。
INSTEAD OF触发器
用于视图,当对视图进行修改操作时,触发器中的操作替代了原本 的修改操作。
触发器的应用场景
数据完整性维护
触发器可用于确保数据的完整性,例如, 在更新员工工资时自动计算并更新员工
的总收入。
条件约束
触发器可用于实现复杂的业务规则, 例如,限制某些用户不能删除其他用
户的记录。
自动日志记录
触发器可以在数据修改时自动记录操 作日志,便于跟踪数据变更历史。
数据转换
触发器可以在数据修改时自动进行数 据转换或格式化,例如,将日期字段 自动转换为特定的格式。
05
第章PLSQL编程基础
DATE; NUMBER(2) NOT NULL := 10; VARCHAR2(13) := 'Atlanta'; CONSTANT NUMBER := 1400;
13
声明PL/SQL Variables
规则
¯ 遵循命名的惯例。 ¯ 初始化NOT NULL型变量。 ¯ 用赋值操作符(:=) 或用DEFAULT关键字给
END;
6
匿名块
应用程序 触发器
数据库 触发器
程序结构
DECLARE BEGIN EXCEPTION END;
已存储的 过程/函数
应用程序中的 过程/函数
打包的 过程/函数
7
程序结构
描述
适用性
匿名块 已存储的 过程/函数 应用程序中的 过程/函数
包
数据库 触发器
未被命名的PL/SQL块;可嵌入到应 用程序中亦可交互使用。
256120.08to the proposition that all men are created equal.”
Atlanta
12
声明 PL/SQL 变量
语法
identifier [CONSTANT] datatype [NOT NULL] [:= | DEFAULT expr];
举例
Declare v_hiredate v_deptno v_location c_ comm
使用TO_DATE 转换函数可改正错误。
v_date := TO_DATE ('January 13, 1998', 'Month DD, YYYY');
36
嵌套块和变量的作用域
只要可执行的语句能运行,其所在的 块就能被嵌套。
PL SQL 程序设计
使用 SELECT INTO 进行赋值
还可以按如下方法使用 SELECT INTO 对变量赋值
SELECT <列名> INTO <变量名> FROM <表名> WHERE <条件>;
示例
SELECT first_fare INTO oldfare FROM fare WHERE route_code = ‘SAN-LOU’;
PL/SQL中的逻辑操作符
operator AND operation 两个条件都必须满足
OR
NOT
只要满足两个条件中的一个
取反
注释的使用
添加注释可以提高程序的可读性并帮助
理解
PL/SQL 支持两种注释样式
–
单行注释
可以在行中的任何地方以双分号 (--) 开始 可以扩展到行尾
–
多行注释
PL/SQL 结构
一个标准 PL/SQL 代码段称作程序块 一个程序块是由三个部分或节构成的
–
声明部分
可执行部分
–
–
异常处理部分
PL/SQL 结构
DECLARE 声明 BEGIN 可执行语句 EXCEPTION 例外处理程序 END; PL/SQL 程序块的一部分
PL/SQL 结构
声明部分
操作符
与其他程序设计语言相同,PL/SQL有一系列操 作符。操作符分为下面几类: 1)算术操作符 2)关系操作符 3)比较操作符 4)逻辑操作符
PL/SQL中的算术操作符如下表
operator operation 加 减 除 乘
+ / *
**
乘方
PL/SQL中的关系操作符
第13章 PLSQL程序设计
内容提要
pl/sql 过程化的语言进行程序设计的基础 知识。
13.1 PL/SQL 基础知识
PL/SQL是过程化语言/sql的缩写,是 Oracle在SQL的基础上扩展开发的一种数 据库编程语言,在兼容标准SQL的基础上, 扩充了许多新的功能,是面向过程化的 语言与SQL语言的结合,特点如下:
(1) PL/SQL除了基本的SQL语句之外,还 包括了控制结构和异常处理,从而具有 SQL语言的简洁性和过程化的灵活性。 (2) 每个SQL语句的处理请求都将引起一 次网络传输,容易导致网络拥塞。而 PL/SQL是以整个语句块发给服务器的, 从而减少了网络通信流量,提高了应用 程序的执行速度。
(5) PL/SQL 是一种块结构语言,即构成 一个PL/SQL程序的基本单位是块。
13.1.1 PL/SQL块
1.基本结构 PL/SQL程序的基本单位是块,块分匿名 块、命名块两种。匿名块指未命名的块, 只能执行一次,不能存储在数据库中。 命名块指过程、函数、触发器和包等数 据库对象,它们存储在数据库中,可以 被多次调用执行。
匿名块的基本结构: [DECLARE] BEGIN [EXCEPTION] END;
以被命名和存储在Oracle 服务器中,同时也能被其他的PL/SQL程 序或SQL语句调用,任何客户、服务器工 具都能访问PL/SQL程序,具有很好的可 重用性。
(4)通过授予用户执行PL/SQL块的权限, 而不是直接授予用户对数据库对象的操 作权限,提供了数据库的安全性。
PLSQL编程基础
PLSQL编程基础--PL/SQL PROCEDURAL LANGUAGE /SQL/*块结构变量和类型条件循环游标过程函数包*/--块结构/*pl/sql程序的基本单元是语句块。
所有pl/sql程序都是由语句块组成的:顺序或嵌套。
语句块的两种类型:匿名的和命名的。
匿名语句块:通常是动态⽣成的,它只能执⾏⼀次。
命名语句块:是指具有名字的语句块。
声明部分:变量声明 delcare执⾏部分:begin异常处理部分:exceptionend命名语句块包括:1)标号语句块,⼀种带有标号的匿名语句块,该标号为该语句块指定了⼀个名字。
动态⽣成,只能执⾏⼀次。
2)⼦程序,包括过程和函数。
3)触发器。
*/--匿名语句块DECLAREv_print INT := 1;BEGINdbms_output.put_line('v_print = '||v_print); 打印END lbl_1;/--带有标号的命名语句块,放在DELARE前⾯<>DECLAREv_print INT := 1;BEGINdbms_output.put_line('v_print = '||v_print);END lbl_1;/--存储过程CREATE OR REPLACE PROCEDURE p_1 ASv_print INT := 1;BEGINdbms_output.put_line('v_print = '||v_print);END p_1;/--基本块结构/*三个基本的部分:声明部分、执⾏部分和异常处理部分。
执⾏部分是必须的,其他部分可选。
declare_statements包含在声明块中,它负责该声明块其他部分将会使⽤的变量。
executable_statements是块中实际可以执⾏的语句,包括条件、循环等语句exception_handle_statements 负责处理可执⾏语句中可能发⽣的任何错误。
第6章 PLSQL 编程基础
6.2
声明及变量
• 声明:声明部分用来声明变量、常量、异常处 理、游标等,以declare开始。
变量声明
• 变量的作用是用来存储数据,可以在过程语句中 使用。变量在声明部分可以进行初始化,即赋予 初值。变量在定义的同时也可以将其说明成常量 并赋予固定的值。
变量的命名规则
• 以字母开头,后跟其他的字符序列,字符序列中 可以包含字母、数值、下划线等符号,最大长度 为30个字符,不区分大小写。 • 不能使用Oracle的保留字作为变量名。 • 变量名不要和在程序中引用的字段名相重,如果 相重,变量名会被当作列名来使用
PL/SQL 的优点
• • • • • 代码可以使用任何文本编辑器编写,方便 更佳性能、可移植性、模块化结构 整个语句块发送,提高了效率,避免了网络拥挤 过程化语言的控制结构(顺序、分支、循环)。 能进行错误处理。
本章学习目标:
• • • • • • • 学习PL/SQL程序块的结构 PL/SQL程序中使用的数据类型 如何在PL/SQL中使用各种变量和常量 PL/SQL程序的条件判断语句 PL/SQL程序的循环控制语句 在PL/SQL程序使用游标处理表中的信息 了解PL/SQL程序中的Oracle异常处理
• END;
• 执行结果:
MANAGER 0 18-4月 -03 8.25
• PL/SQL 过程已成功完成。 • 说明:本训练共定义了 6 个变量,分别用“ := ”赋值运算符 或 DEFAULT 关键字对变量进行了初始化或赋值。其中: c_tax_rate为常量,在数据类型前加了 “CONSTANT” 关 键字; v_valid 变量在赋值运算符前面加了关键字“ NOT NULL ”,强制不能为空。如果变量是布尔型,它的值只能 是“TRUE ”、“ FALSE ”或“ NULL ”。本练习中的变量 v_valid布尔变量的值只能取“TRUE”或“FALSE”。
《PLSQL基础》课件
掌握函数的创建和使用,以便在SQL查询中返回计算结果。
3 区别和联系
比较存储过程和函数的差异,了解它们在不同场景下的应用。
游标和触发器
1 游标的概念和用法
了解如何使用游标在PLSQL中处理查询结果集。
2 触发器的概念和应用
学习如何创建和使用触发器来自动触发数据库操作。
3 难点分析
1 条件判断语句
掌握IF-THEN、IF-THEN-ELSE和CASE语句,用于根据条件执行不同的代码块。
2 循环语句
学习FOR、WHILE和LOOP语句,以便重复执行代码块。
3 例外处理语句
了解如何处理异常情况,确保代码的可靠性和稳定性。
存储过程和函数
1 存储过程的定义和应用
学习如何创建和调用存储过程,以实现具有复杂逻辑的数据库操作。
了解在哪些场景下使用PLSQL可以极大地提升开发效率和数据处理能力。
2 知识点回顾
复习本课程的核心知识点,加深对PLSQL的理解和掌握。
3 后续学习建议
给出一些建议,帮助学员继续深入学习和应用PLSQL。
PLSQL具有高性能、可扩展性和安全性,它可以有效地处理大量数据和复杂的业务逻辑。
变量与数据类型
1 变量的定义
学习如何声明和使用变量,以存储和操作数据。
2 数据类型的分类和应用
了解各种数据类型的特性和用法,包括数字、字符、日期等类型。
3 常量的定义和应用
学习如何定义和使用常量,以存储不可变的值。
控制语句
探讨使用游标和触发器时可能遇到的常见问题和解决方法。
高级技巧
1 包的定义和使用
了解包的概念和结构,学习如何使用包来组织和管理PLSQL代码。
第15章 PLSQL程序设计
说明 每行只能定义一个标识符。 如果加上关键字CONSTANT,则表示所定义的标识符为 一个常量,必须为它赋初值。 如果定义的标识符不能为空,则必须加上关键字NOT NULL,并赋初值。 为标识符赋值时,使用赋值符号‘:=’,默认值为空。
24
2007
Oracle 数据库基础教程
25
2007
Oracle 数据库基础教程
声明一个变量,使它的类型与某个变量或
数据库基本表中某个列的数据类型一致, 可以使用%TYPE。 示例
v_empno1 emp.empno%TYPE; v_empno2 v_empno1%TYPE;
26
2007
Oracle 数据库基础教程
变量的作用域
匿名块 命名块
函数
存储过程 包 触发器
14
2007
Oracle 数据库基础教程
15.5.2词法单元
字符集 标识符 分隔符
常量值
注释
15
2007
Oracle 数据库基础教程
字符集
大小写字母:A~Z,a~z 数字:0~9 空白:制表符、空格和回车 数字符号:+ - * / 〈 〉 = 标点符号:~ ! @ # $ % ^&* ()_ | { } [ ] ? ; :, . ‚ ‘
22
2007
Oracle 数据库基础教程
15.2.4变量与常量
变量与常量的定义 变量的作用域
23
2007
Oracle 数据库基础教程
变量声明 变量与常量的定义
变量定义的一般格式:
<variablename> [CONSTANT]<datatype> [[NOT NULL] {DEFAULT|:=} <expression>];
PLSQL程序设计(基础篇)
PL/SQL的基本结构如下:
Declare
在这里可以定义变量、常量、异常等。
Begin
在这儿可以写一些执行SQL或PL/SQL语句。
源码:
说明:源码都是由PL/SQL Developer 8开发,于Oracle10g测试
-- Created on 2010-4-27 by Quasar
/*
这就是
你的第一个程序了,也是我的,哈哈
*/
declare
msg varchar2(15);--定义变量
begin
msg := 'Hello World';--赋值
from emp left outer join dept-- 1确定表
using(deptno)
where deptno > 0-- 2确定行(记录)
group by dname-- 3将行分组
having max(comm) is null or max(comm) > 0-- 4对组筛选
order by dname-- 6对结果集排序
dbms_output.put_line('Oracle第一个员工的信息:');
dbms_output.put_line('员工号:'||eno);
dbms_output.put_line('员工姓名:'||empname);
dbms_output.put_line('职位:'||empjob);
实验5 SQL PL编程基础
实验5PL/SQL编程基础【实验目的与要求】⏹掌握PL/SQL基本语法⏹掌握PL/SQL流程控制方法及相关语句的编写【实验内容与步骤】5.0.实验准备工作1.测试用表的创建与数据添加(1).创建测试表Create Table TESTTABLE(RECORDNUMBER number(4)Not Null,CURRENTDATE Date Not Null)Tablespace"USER";--这里的表空间其实可以省去,这样它就会在当前用户的表空间中创建一个表(2).使用for语句在测试表中加入测试数据Declaremaxrecords Constant Int:=20;i Int:=1;BeginFor i In1..maxrecords LoopInsert Into scott.TESTTABLE(recordnumber,currentdate)--scott 为模式名,应根据实际改动Values(i,Sysdate);dbms_output.put_line('现在输入的内容是:'||i||''||Sysdate);Commit;--这里要commit否则将不会将数据提交到表中End Loop;dbms_output.put_line('记录已经按照计划全部插入,请查看!');End;//注:scott为登录用户名,需根据情况改动.(3).查询表中数据,给出查询结果截图:5.1.最简单的PL/SQL程序1.输出"Hello,World"/***************************************第一个例子:输出"Hello,World"***************************************/set serverout on--设置SQL*Plus将服务器所返回的写出来begin--块开始DBMS_OUTPUT.put_line('Hello,World');--在控制台输出信息,类似C语言的Printf或者java语言中的System.out.print end;--块结束运行结果为:2.接收数据并输出/***************************************在此基础上,完成Hello,某某,某某从客户端得到***************************************/declarev_name varchar2(20);begin--块开始v_name:='&v_name';--与“客户端”交互,类似C语言的scanf语句DBMS_OUTPUT.put_line('测试结果为:Hello,'||v_name);end;--块结束运行结果为:5.2.简单变量的使用1.变量的声明与引用set serveroutput on;--PL/SQL变量之简单类型declarev_dept_id number(5):=1111;v_age binary_integer:=12;v_dept_name varchar2(20):='人事部';v_rate constant number(4,2):=22.12;v_valid boolean not null:=TRUE;v_hire_date date not null:=sysdate+7;beginv_dept_id:=2222;dbms_output.put_line(v_dept_id);end;/运行结果为:2.Into子句赋值的使用:declarev_deptno number(2);v_loc varchar2(15);beginselect deptno,locinto v_deptno,v_locfrom deptwhere dname='SALES';--这要求结果有且仅有一条记录DBMS_OUTPUT.PUT_LINE(V_deptno||'and'||v_loc);--输出end;运行结果为:实验练习:编写一PL/SQL程序,实现依次从客户端(键盘)接收各字段的值,并放于变量中,输完一条记录的所有字段值后,将值写到数据库表Emp中。
PLSQL基础(一)
Error-Reporting Functions
在PL/SQL中有两个方法SQLCODE和 SQLERRM通过这两个方法,我们可以得到 SQL语句执行后的相关信息。
Expressions - 2
条件表达式 AND,OR和NOT的用法基本上同其他的变成语言。 对于有NULL参与的逻辑判断 DECLARE x NUMBER := 1; y NUMBER := NULL; BEGIN IF x = y THEN DBMS_OUTPUT.PUT_LINE(‘x = y’); ELSIF x != y THEN DBMS_OUTPUT.PUT_LINE(‘x != y’); ELSE DBMS_OUTPUT.PUT_LINE(‘I DO NOT KNOW’); END IF; END; Result : I DO NOT KNOW
BETWEEN和IN的判断操作 (x BETWEEN a AND b)就相当于(x>=a) AND (x<=b) x IN (set) 就是判断x是否是这个set的成 员
Expressions - 5
CASE WHEN判断式 DECLARE grade CHAR(1); result VARCHAR(10); BEGIN result := CASE WHEN grade IS NULL THEN ‘NOTHING’ WHEN grade = ‘A’ THEN ‘GOOD’ WHEN grade = ‘B’ THEN ‘BAD’ ELSE ‘DANGER’ END; END;
Lexical Units - 2
变量名的定义方法 必须要以英文字母开头 变量中可以有[$] [#]和[_] 声明的变量名的长度不能超过30byte 如果需要用数字,其他符号或者是日文来命 名的情况下,请一定要使用[” ”]将变量括起 来。
PLSQL基础教程 (1)
PL/SQL程序设计目录第一章PL/SQL 程序设计简介 (4)§1.2SQL与PL/SQL (4)§1.2.1 什么是PL/SQL? (4)§1.2.1 PL/SQL的好处 (4)§1.2.2 PL/SQL 可用的SQL语句 (5)§1.3运行PL/SQL程序 (5)第二章PL/SQL块结构和组成元素 (6)§2.1PL/SQL块 (6)§2.2PL/SQL结构 (6)§2.3标识符 (6)§2.4PL/SQL变量类型 (7)§2.4.1 变量类型 (7)§2.4.2 复合类型 (9)§2.4.3 使用%ROWTYPE (11)§2.4.4 LOB类型* (11)§2.4.5 Bind 变量 (12)§2.4.6 INDEX BY TABLES (12)§2.4.7 数据类型的转换* (14)§2.5运算符和表达式(数据定义) (14)§2.5.1 关系运算符 (14)§2.5.2 一般运算符 (14)§2.5.3 逻辑运算符 (14)§2.6变量赋值 (15)§2.6.1 字符及数字运算特点 (15)§2.6.2 BOOLEAN 赋值 (15)§2.6.3 数据库赋值 (15)§2.6.4 可转换的类型赋值 (16)§2.7变量作用范围及可见性 (16)§2.8注释 (17)§2.9简单例子 (18)§2.9.1 简单数据插入例子 (18)§2.9.2 简单数据删除例子 (18)第三章PL/SQL流程控制语句 (19)§3.1条件语句 (19)§3.2CASE表达式 (20)§3.3循环 (20)§3.3标号和GOTO (22)§3.4NULL语句 (23)第四章游标的使用 (24)§4.1游标概念 (24)§4.1.1 处理显式游标 (24)§4.1.2 处理隐式游标 (27)§4.1.3 游标修改和删除操作 (28)第五章异常错误处理 (30)§5.1异常处理概念 (30)§5.1.1 预定义的异常处理 (30)§5.1.2 非预定义的异常处理 (31)§5.1.3 用户自定义的异常处理 (32)§5.1.4 用户定义的异常处理 (33)§5.2异常错误传播 (35)§5.2.1 在执行部分引发异常错误 (35)§5.2.2 在声明部分引发异常错误 (35)§5.3异常错误处理编程 (36)§5.4在PL/SQL中使用SQLCODE,SQLERRM (36)第六章存储函数和过程 (38)§6.1引言 (38)§6.2创建函数 (38)§6.3存储过程 (41)§6.3.1 创建过程 (41)§6.3.2 调用存储过程 (42)§6.3.3 开发存储过程步骤 (44)§6.3.4 与过程相关数据字典 (45)第七章包的创建和应用 (46)§7.1引言 (46)§7.2包的定义 (46)§7.3包的开发步骤 (47)§7.4包定义的说明 (47)§7.5子程序重载 (50)§7.6删除过程、函数和包 (52)§7.7包的管理 (52)第八章触发器 (53)§8.1触发器类型 (53)§8.1.1 DML触发器 (53)§8.1.2 替代触发器 (53)§8.1.3 系统触发器 (53)§8.2创建触发器 (53)§8.2.1 触发器触发次序 (55)§8.2.2 创建DML触发器 (55)§8.2.3 创建替代(Instead_of)触发器 (56)§8.2.3 创建系统事件触发器 (57)§8.2.4 系统触发器事件属性 (57)§8.2.5 使用触发器谓词 (58)§8.2.6 重新编译触发器 (59)§8.3删除和使能触发器 (59)§8.4触发器和数据字典 (59)§8.5数据库触发器的应用举例 (60)第一章PL/SQL 程序设计简介PL /SQL是一种高级数据库程序设计语言,该语言专门用于在各种环境下对ORACLE数据库进行访问。
第7章 PLSQL编程基础
8.3 条件语句
8.3.1 IF条件语句
在PL/SQL块中,IF 条件语句的结构如下: IF <条件表达式> THEN <执行语句> …… <执行语句n> [ELSIF <条件表达式> THEN <执行语句> …… <执行语句n> …… ELSE <执行语句>] END IF;
8.3 条件语句
【例8.8】 在PL/SQL语句中,使用IF条件语句判断 成绩的不同等级,如下:
8.2 PL/SQL常量和变量定义
6、记录类型和表类型
(2)表类型 使用记录类型只能保存一行数据,这就限制了 查询语句返回行数。如果需要返回多行数据,就可 以使用表类型,其允许处理多行数据,和表类似。 创建表类型的语法如下: TYPE table_name is table of data_type index by binary_integer
8.1 PL/SQL概述
8.1.3 PL/SQL程序注释
1.单行注释 单行注释由两个连字符(--)开始,其注释范围从 连字符开始,到行的末尾结束。 2.多行注释 单行注释时,如果注释超过一行,就必须在每 一行的开头使用两个连字符。这时就采用多行注释 的方式。多行注释由/*开头,由*/结尾。
8.2 PL/SQL常量和变量定义
8.3 条件语句
【例8.9】在PL/SQL语句中,使用CASE条件语句判断成绩的 不同等级,如下:
SET SERVEROUTPUT ON DECLARE v_grade VARCHAR2(20):='良好'; BEGIN CASE v_grade WHEN '不及格' THEN DBMS_OUTPUT.PUT_LINE ('成绩 < 60'); WHEN '及格' THEN DBMS_OUTPUT.PUT_LINE ('60 <= 成绩 < 70'); WHEN '中等' THEN DBMS_OUTPUT.PUT_LINE ('70 <= 成绩 < 80'); WHEN '良好' THEN DBMS_OUTPUT.PUT_LINE ('80 <= 成绩 < 90'); WHEN '优秀' THEN DBMS_OUTPUT.PUT_LINE ('90 <= 成绩 <= 100'); ELSE DBMS_OUTPUT.PUT_LINE ('输入有误'); END case; END; /8 Nhomakorabea3 条件语句
第二章 PL-SQL基础 - PL-SQL用户指南与参考
第二章PL/SQL基础第二章PL/SQL基础一、字符集在PL/SQL程序中,允许出现的字符集包括:1.大小写字母(A-Z和a-z)2.数字(0-9)3.符号( ) + - * / < > = ! ~ ^ ; : . ’ @ % , " # $ & _ | { } ? [ ]4.制表符、空格和回车符PL/SQL对大小写不敏感,所以,除了在字符串和字符中,小写字母和它对应的大写字母是等价的。
二、词法单元PL/SQL 包含很多词法单元(lexical unit),大致可以分为以下几类:1. 分隔符(简单符号和复合符号)2. 标识符,其中包括关键字3. 文字4. 注释为改善可读性,我们可以用空格将词法单元分隔开。
实际上,我们必须将相邻的两个标识符用空格或标点符号隔开。
下面这样的写法是不允许的,因为关键字END 和IF 连到一起了:IF x > y tdEN high := x; ENDIF; -- not allowed还有,除了字符串和注释以外,我们不可以在词法单元中嵌入空格。
例如,像下面的赋值符号中间就不用被分开: count : = count + 1; -- not allowed为了让层次结构清楚,我们可以用回车符来换行,空格或制表符来进行缩进。
比较一下下面两段IF 语句的可读性:IF x>y tdEN max:=x;ELSE max:=y;END IF ; IF x > y tdENMAX := x;ELSEMAX := y;END IF ;1、分隔符分隔符是对PL/SQL 有着特殊意义的简单或复合的符号。
例如,我们使用加号和减号这样的分隔符来表现数学运算。
简单分隔符只有一个字符。
符号含义 + 加法操作符% 属性指示符’字符串分隔符 .组件选择器 /触法操作符 (表达式或列表分隔符 )表达式或列表分隔符 :主变量指示符 ,分隔符 * 多应用程序操作符" 引用标识符分隔符= 关系操作符< 关系操作符> 关系操作符@ 远程访问指示符; 语句终结符- 减号/负号操作符复合分割符由两个字符组成。
第7章 PLSQL编程基础
常量或变量 名称
用于指定常常量或变量 量 的数据类型
为变量指定不 能取空值,同 时就必须为变
量赋初值
使用赋值运算符为 常量或变量赋初值
常量或变量 的默认值
例7.5 通过PL/SQL程序块定义下列的变量和常量
END;
其中serveroutput为环境变量,该命令表示 将环境变量的值设为on状态,目的是保证 pl/sql程序的输出能在sqlplus环境中显示,
例7.1 一个只包含适执应范行围部为分当前的会P话L窗/S口Q。L程序块。
SET SERVEROUTPUT ON
BEGIN
dbms_output.put_line('hello,everyone!');
例7.8 以下示例演示了SELECT语句在 PL/SQL程序块中的应用。
DECLARE
v_ename VARCHAR2(10);
BEGIN
SELECT ename INTO v_ename FROM scott.emp WHERE empno=7369;
dbms_output.put_line('employee name :'||v_ename);
• BINARY_INTEGER、PLS_INTEGER是PL/SQL专用的 数据类型,它们不能在定义表结构时使用。
字符类型:用于存储字符串或字符数据。包括: CHAR、VARCHAR2、LONG、RAW、LONG RAW。
• PL/SQL的数据类型与SQL数据类型的长度有所不同 ,如表7-1所示。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
PL/SQL程序设计(上册)1
第一章认识PL/SQL3
第二章SQL回顾5
第三章PL/SQL的基本结构7
第四章PL/SQL的数据类型及使用10
第五章流程控制29
第六章游标35
第七章异常处理46
第八章下册预知49
这一章主要记录了两个问题:1什么是PL/SQL?2 PL/SQL有什么优势?下面从这两个问题展开论述。
dbms_output.put_line('Oracle第一个员工的信息:');
dbms_output.put_line('员工号:'||eno);
dbms_output.put_line('员工姓名:'||empname);
dbms_output.put_line('职位:'||empjob);
end;
binary_float和binary_double是Oracle 10g的新数据类型,注意在赋值时格式分别如下:223.4323f和23423.4545d,像Java吧,可能都遵循IEEE-754的浮点数标准吧。
布尔:Boolean
布尔值分别为:TRUE、FALSE、NULL
日期:Date和Timestamp
按照形式,可分为命名的PL/SQL和匿名的PL/SQL,其中,命名的,又可以分为子程序和触发器,而子程序又可以分为包、函数、过程。是不是有点儿 ?不过不要紧,等你看过整个文章,再回来看就是很简单了。
PL/SQL的基本结构如下:
Declare
在这里可以定义变量、常量、异常等。
Begin
在这儿可以写一些执行SQL或PL/SQL语句。
本章将从PL/SQL的分类、PL/SQL的基本结构以及第一个PL/SQL程序展开。
PL/SQL的分类:
按照PL/SQL的运行环境,可以分为客户端PL/SQL和服务器端PL/SQL。通常,我们(指开发者)接触到的PL/SQL都是存储在服务器Oracle数据库中的,所以主要学习这一种就可以了,至于客户端的PL/SQL,我也不太了解啊…,o(︶︿︶)o唉希望大虾在与我联系,加上啊!
所以在使用时一定注意,带有group by后,having和select中只能有-分组字段和聚集函数
DML:
insert into values就不再重复了,不过听说现在可以一次性向多个表中插入呢,使用insert into all和insert into first,具体用法如下:
insert into all/first
Date默认只显示日期,而Timestamp默认情况下会显示时间信息,还有上下午标志呢,Timestamp是Oracle 9i新加入的数据类型。
标量的定义格式:
vname DATATYPE [CONSTANT][NOT NULL] [:= / DEFAULT exp]
例如:
name varchar2(30);
PL/SQL的变量类型可以分为标量、复合类型、参照类型和LOB类型四类,下面就分别介绍给大家。
标量,就是单值变量,这么说应该可以理解吧。常用的类型如下:
字符串:varchar2(n)、char(n)、long、long raw
在程序设计中,常常用到字符串的处理,在PL/SQL中,有很好的支持,不但有字符串函数,还有对正则表达式的支持。我们最常用的数据类型就是varchar2(n)了,n用于最大字符长度。其中,char和long、long raw不推荐使用,原因是:前者浪费资源后者不够灵活。
dbms_output.put_line(msg);--内置包使用
end;
运行结果:
Hello World
PL/SQL的注释可以通过这个程序看出来啊,自己看吧,不多说了…
本章将介绍PL/SQL的数据类型,有些数据类型很“简单”,有些很难理解,不过都是因为这些数据类型你没有使用过,用几次就知道了,在这里,先认识认识它们,不熟也没关系。
from emp left outer join dept-- 1确定表
using(deptno)
where deptno > 0-- 2确定行(记录)
group by dname-- 3将行分组
having max(comm) is null or max(comm) > 0-- 4对组筛选
order by dname-- 6对结果集排序
如上的源码表示了SQL语句的执行顺序,这个一定要理解好啊!
思考题:
问题:为什么带有group by的select和having只能含有分组字段和聚集函数呢?
答:因为group by分组后,只能对组进行操作了。也就是说,无论你是筛选行having还是列select,都要以组为单位进行,所以只能使用组共有的属性,除了分组字段外,只有像什么每组的最大值啊、最小值啊、平均值啊等等这些组的特性或叫组员共有的特性。
Exception
这儿可以捕获并处理异常
怎样在发生异常后让程序继续执行其他语句呢?
答:写在这块儿不就得了,呵呵
End;结束了,别忘了“;”啊,呵呵
你的第一个程序?也是我的,“hello, world!”
有人说hello world太老套了,boring,有什么,在你什么都不懂时还能开发出更高级的么,我们就hello world呵呵。
什么是PL/SQL?
PL/SQL即procedural language/standard query language, PL/SQL是具备程序设计语言特性(如:定义变量、流程控制、面向对象等)的、关系数据库标准查询语言SQL的过程性拓展(procedural extension)。
SQL是非过程语言,非过程,让我理解,就是不用你了解语句的处理过程,而直接达到开发者的目的。如:select name from student这条语句,就是向数据库说:“我要学生的姓名”,然后数据库就会返回相应的字段值而我们并不知道它是如何处理的也基本无法控制。而PL/SQL语言,则具备程序设计语言甚至高级程序设计语言的特点,更好地满足我们对数据的操作。
PL/SQL有什么优势?
PL/SQL的优势可以概括为以下五点(待补充):
1具备程序设计语言的特性(模块化、信息隐藏、面向对象等);
2异常处理,PL/SQL具备异常处理的机制;
3可移植,想想Java吧,看看两者有什么共同之处?PL/SQL的JVM就是Oracle Server,呵呵
4改善性能,一方面,通过PL/SQL语句块(Block)可以一次性向Oracle Server发送多个SQL语句,减少网络的传输;另一方面,有些PL/SQL可以在客户端执行(前提是某些客户端含有PL/SQL引擎),可以有效的减少与Oracle Server的交互;再有,PL/SQL通常会存储在Oracle数据库中,这对于网络程序来说真是天降福音,因为,这样一系列的处理交互,都可以以一个调用数据库本身存在的程序而完成,大大提高了性能。
when条件then into表1
when条件then into表2
when条件then into表3
else into表4
select from表源
至于ALL和FIRST的区别就是:如果是ALL,就会插入所有满足条件的表,而如果是FIRST直插入第一个满足条件的表。
TCL:
commit;
rollback to A;
savepoint A;
不多写了,因为我也只知道这点儿了,呵呵,不过听说SQL有个优化hint挺好玩,如:insert /+append+/ into table values XXX;还有对Group by的拓展rollup和cube,还有grouping函数、group set等,以后再研究把,谁让俺是菜鸟呢?
5可以与SQL交互,在PL/SQL中可以嵌入SQL的DML、DQL、TCL(事务控制语言)语句。
你都开始对PL/SQL感性趣了,那么SQL肯定是多多少少听说过的,呵呵,就回顾一些基础吧,那些拓展的内容,建议是遇见了再研究吧。
DQL:
源码dql.sql:
select dname, max(sal)-- 5对列筛选(分组字段或聚集函数)
光说不练犯晕啊,呵呵,下面就看一些记录的应用吧。
源码record.tst:
-- Created on 2010-4-27 by Quasar
declare
--通过自定义和%ROWTYPE属性定义变量
REAL_NAME varchar2(30) constant default ‘魏照哲’;
name varchar2(10) := ‘hello’;
下面是一个标量使用的例子程序:
源码:scalar.tst
例子程序来自scott/scott用户或hr/hr用户(alter user scott account unlock解锁)
数字:number(m, n)、binary_integer、binary_float、binary_double
对于数字类型,number是不错的选择,那么m, n代表什么呢?如果定义为number(6, 2)则代表整数位最大长度是4,小数位最大长度是2,你猜猜吧,m和n的含义。
其中,binary_integer在定义表时是很常用的。
由于是学习笔记么,说是教程,其实是在吸引大家的注意,呵呵,主要是想在方便大家查阅和入门者入门外,希望大家多多指教,多多提出意见,共同把这块知识学熟、学通、学透。
Quasar Wei’s Email:quasarbrave@
Quasar Wei’s QQ: 734089783
Quasar Wei’s Real Name: WeiZhaozhe of NEU
源码:
说明:源码都是由PL/SQL Developer 8开发,于Oracle10g测试