一、PLSQL编程思维导图

二、PLSQL编程思维导图对应笔记

  1 PL/SQL编程    @Holly老师
  2 
  3 
  4 5.1 为什么学习PL/SQL编程?
  5 5.1.1 当我们要批量插入100万数据,怎么办?
  6 1、难道要写一百条insert into吗?不是,由于插入数据的操作是重复的,所以我们可以利用循环去实现,那怎么去实现呢?就用plsql编程去实现!
  7 
  8 5.2 什么是PL/SQL编程
  9 5.2.1 概念
 10 pl/sql是块结构语言,它将一组语句放在一个块中。
 11 PL/SQL程序结构是一种描述性很强、界限分明的块结构、嵌套块结构,被分成单独的过程、函数、触发器,且可以把它们组合为程序包,提高程序的模块化能力。
 12 
 13 5.2.2 组成
 14 1、声明部分
 15 declare
 16 2、执行部分
 17 begin
 18 3、异常处理部分
 19 exception
 20 
 21 5.2.3 PL/SQL块的结构
 22 DECLARE 
 23 --声明部分: 在此声明PL/SQL用到的变量,类型及游标,以及局部的存储过程和函数
 24 BEGIN
 25 -- 执行部分: 过程及SQL 语句 , 即程序的主要部分
 26 EXCEPTION
 27 -- 执行异常部分: 错误处理
 28 END;
 29 其中:执行部分不能省略
 30 
 31 5.2.4 PL/SQL块可以分类
 32 1. 无名块或匿名块(anonymous):动态构造,只能执行一次,可调用其它程序,但不能被其它程序调用。
 33 2. 命名块(named):是带有名称的匿名块,这个名称就是标签。
 34 3. 子程序(subprogram):存储在数据库中的存储过程、函数等。当在数据库上建立好后可以在其它程序中调用它们。
 35 4. 触发器 (Trigger):当数据库发生操作时,会触发一些事件,从而自动执行相应的程序。
 36 5. 程序包(package):存储在数据库 中的一组子程序、变量定义。在包中的子程序可以被其它程序包或子程序调用。但如果声明的是局部子程序,则只能在定义该局部子程序的块中调用该局部子程序。
 37 
 38 5.2.5 PL/SQL结构
 39 1、 PL/SQL块中可以包含子块;
 40 
 41 2、子块可以位于 PL/SQL中的任何部分;
 42 
 43 3、子块也即PL/SQL中的一条命令;
 44 
 45 5.2.6 运算符
 46 关系运算符 
 47 
 48 一般运算符 
 49 
 50 逻辑运算符 
 51 
 52 5.2.7 数据类型
 53 5.2.7.1 LOB数据类型
 54 1、BFILE (Movie)
 55 存放大的二进制数据对象,这些数据文件不放在数据库里,而是放在操作系统的某个目录里,数据库的表里只存放文件的目录。
 56 2、 BLOB(Photo)
 57 存储大的二进制数据类型。变量存储大的二进制对象的位置。大二进制对象的大小<=4GB。
 58 3、 CLOB(Book)
 59 存储大的字符数据类型。每个变量存储大字符对象的位置,该位置指到大字符数据块。大字符对象的大小<=4GB。
 60 4、 NCLOB
 61 存储大的NCHAR字符数据类型。每个变量存储大字符对象的位置,该位置指到大字符数据块。大字符对象的大小<=4GB。 
 62 
 63 5.2.7.2 属性类型
 64 1、使用%TYPE
 651)概念:
 66 定义一个变量,其数据类型与已经定义的某个数据变量(尤其是表的某一列)的数据类型相一致,这时可以使用%TYPE
 672)优点:
 68 使用%TYPE特性的优点在于:
 69 
 70 1. 所引用的数据库列的数据类型可以不必知道;
 71 
 72 2. 所引用的数据库列的数据类型可以实时改变,容易保持一致,也不用修改PL/SQL程序。 
 733)示例1:
 74 例7: 
 75 set serverout on
 76 DECLARE
 77 -- 用%TYPE 类型定义与表相配的字段
 78 TYPE T_Record IS RECORD(
 79 T_no emp.empno%TYPE,
 80 T_name emp.ename%TYPE,
 81 T_sal emp.sal%TYPE );
 82 -- 声明接收数据的变量
 83 v_emp T_Record;
 84 BEGIN
 85 SELECT empno, ename, sal INTO v_emp FROM emp WHERE empno=7788;
 86 DBMS_OUTPUT.PUT_LINE
 87 (TO_CHAR(v_emp.t_no)||' '||v_emp.t_name||' ' || TO_CHAR(v_emp.t_sal));
 88 END;
 89 
 90 /
 91 示例2:
 92 例8:
 93 set serverout on
 94 DECLARE
 95 v_empno emp.empno%TYPE :=&no;
 96 Type t_record is record (
 97 v_name emp.ename%TYPE,
 98 v_sal emp.sal%TYPE,
 99 v_date emp.hiredate%TYPE);
100 Rec t_record;
101 BEGIN
102 SELECT ename, sal, hiredate INTO Rec FROM emp WHERE empno=v_empno;
103 DBMS_OUTPUT.PUT_LINE(Rec.v_name||'---'||Rec.v_sal||'--'||Rec.v_date);
104 END;
105 /
106 2、使用%ROWTYPE
1071)概念
108 PL/SQL 提供%ROWTYPE操作符, 返回一个记录类型, 其数据类型和数据库表的数据结构相一致。
1092)优点
110 使用%ROWTYPE特性的优点在于:
111 
112 1. 所引用的数据库中列的个数和数据类型可以不必知道;
113 
114 2. 所引用的数据库中列的个数和数据类型可以实时改变,容易保持一致,也不用修改PL/SQL程序。 
1153)示例
116 例9: 
117 set serverout on
118 DECLARE
119 v_empno emp.empno%TYPE :=&no;
120 rec emp%ROWTYPE;
121 BEGIN
122 SELECT * INTO rec FROM emp WHERE empno=v_empno;
123 DBMS_OUTPUT.PUT_LINE('姓名:'||rec.ename||'工资:'||rec.sal||'工作时间:'||rec.hiredate); 
124 END;
125 /
126 
127 5.2.7 变量
128 5.2.6.1 变量的定义 
129 1、 定义变量
130 语法:变量名 数据类型[(大小)] [:=变量的初始值] ;
131 2、定义常量
132 语法:常量名 constant 数据类 := 常量值 ;
133 
134 5.2.6.2 命名要求
135 PL/SQL程序设计中的标识符定义与SQL 的标识符定义的要求相同。要求和限制有:
136 
137 1. 标识符名不能超过30字符;
138 
139 2. 第一个字符必须为字母;
140 
141 3. 不分大小写;
142 
143 4. 不能用"-"(减号);
144 
145 5. 不能是SQL保留字。
146 
147 提示: 一般不要把变量名声明与表中字段名完全一样,如果这样可能得到不正确的结果.
148 
149 5.2.6.3 命名规则
150 变量命名规则
151 
152 5.2.7.1 变量类型
153 变量类型
154 
155 5.2.6.3 案例1:
156 例如:下面的例子将会删除所有的纪录,而不是’EricHu’的记录;
157 
158 DECLARE
159 ename varchar2(20) :='EricHu';
160 BEGIN
161 DELETE FROM scott.emp WHERE ename=ename;
162 END;
163 
164 5.2.8 变量增删改示例
165 1. 示例:插入
166 例1. 插入一条记录并显示;
167 set serverout on
168 DECLARE
169 Row_id ROWID;
170 info VARCHAR2(40);
171 BEGIN
172 INSERT INTO scott.dept VALUES (90, '财务室', '海口')
173 RETURNING rowid, dname||':'||to_char(deptno)||':'||loc
174 INTO row_id, info;
175 DBMS_OUTPUT.PUT_LINE('ROWID:'||row_id);
176 DBMS_OUTPUT.PUT_LINE(info);
177 END;
178 /
179 其中:
180 
181 RETURNING子句用于检索INSERT语句中所影响的数据行数,当INSERT语句使用VALUES 子句插入数据 时,RETURNING 字句还可将列表达式、ROWID和REF值返回到输出变量中。在使用RETURNING 子句是应注意以下 几点限制:
182 
183 1.不能与DML语句和远程对象一起使用;
184 
185 2.不能检索LONG 类型信息;
186 
187 3.当通过视图向基表中插入数据时,只能与单基表视图一起使用。
188 2.示例:修改
189 例2. 修改一条记录并显示
190 set serverout on
191 DECLARE
192 Row_id ROWID;
193 info VARCHAR2(40);
194 BEGIN
195 UPDATE dept SET deptno=100 WHERE DNAME='财务室'
196 RETURNING rowid, dname||':'||to_char(deptno)||':'||loc
197 INTO row_id, info;
198 DBMS_OUTPUT.PUT_LINE('ROWID:'||row_id);
199 DBMS_OUTPUT.PUT_LINE(info);
200 END;
201 /
202 其中:
203 
204 RETURNING子句用于检索被修改行的信息。当UPDATE语句修改单行数据时,RETURNING 子句可以检索被修改行的 ROWID和REF值,以及行中被修改列的列表达式,并可将他们存储到PL/SQL变量或复合变量中;当UPDATE语句修改多行数据 时,RETURNING 子句可以将被修改行的ROWID和REF值,以及列表达式值返回到复合变量数组中。在UPDATE中使用 RETURNING 子句的限制与INSERT语句中对RETURNING子句的限制相同。
205 3.删除
206 例3. 删除一条记录并显示
207 set serverout on
208 DECLARE
209 Row_id ROWID;
210 info VARCHAR2(40);
211 BEGIN
212 DELETE dept WHERE DNAME='办公室'
213 RETURNING rowid, dname||':'||to_char(deptno)||':'||loc
214 INTO row_id, info;
215 DBMS_OUTPUT.PUT_LINE('ROWID:'||row_id);
216 DBMS_OUTPUT.PUT_LINE(info);
217 END; 
218 /
219 其中:
220 
221 RETURNING子句用于检索被删除行的信息:当DELETE语句删除单行数据时,RETURNING 子句可以检索被删除行的 ROWID和REF值,以及被删除列的列表达式,并可将他们存储到PL/SQL变量或复合变量中;当DELETE语句删除多行数据 时,RETURNING 子句可以将被删除行的ROWID和REF值,以及列表达式值返回到复合变量数组中。在DELETE中使用 RETURNING 子句的限制与INSERT语句中对RETURNING子句的限制相同。 
222 
223 5.3 如何使PL/SQL编程
224 大家有没有发现我们每天sql语句后面都有什么呀?都有分号!如果在java中
225 
226 5.4 在什么时候使用PL/SQL编程
PLSQL编程思维导图对应笔记

相关文章:

  • 2021-04-06
  • 2021-11-04
  • 2021-08-22
  • 2021-11-30
  • 2021-09-06
  • 2021-06-07
  • 2021-07-29
  • 2021-09-09
猜你喜欢
  • 2021-12-26
  • 2022-01-19
  • 2021-12-21
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-07-06
相关资源
相似解决方案