




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、PL/SQL 程序设计简介,什么是PL/SQL,PL/SQL是 Procedure Language 其中 执行部分是必须的。,PL/SQL块结构和组成元素,PL/SQL块可以分成三类: 匿名块:动态构造,只能执行一次 子程序:存储在数据库中的存储过程、函数及包等。当在数据库上建立好后可以在其它程序中调用它们 触发器:当数据库发生操作时,会触发一些事件,从而自动执行相应的程序,PL/SQL中的标识符,PL/SQL程序设计中的标识符定义与SQL的标识符定义的要求相同 标识符名不能超过30字符 第一个字符必须为字母 不能用-(减号) 不分大小写 不能是SQL保留字,PL/SQL中的标识符,一般不要
2、把变量名声明与表中字段名完全一样,如果这样可能得到不正确的结果,例: DECLARE Ename varchar2(20) :=KING; BEGIN DELETE FROM emp WHERE ename=ename; END;,PL/SQL中的标识符,下面是建议使用的变量命名方法,练习:给KING的工资涨10%,PL/SQL中的变量类型,PL/SQL中声明变量,在语句块的声明部分对变量声明,声明一个变量的语法是: variable_name constant type not null :=value 其中: variable_name 为变量名 type 为类型 value 为变量的初值
3、,PL/SQL中声明变量,例: DECLARE V_Description VARCHAR2(50); V_Number NUMBER := 45; V_Counter BINARY_INTEGER := 0; 注意:如果变量在声明时使用了NOT NULL选项则必须为变量指定初值。 如果变量在声明时使用了CONSTANT选项则必须为变量指定初值, 并且该初值不能被改变。 练习:查询员工号为7788的员工姓名,并显示在控制台。,PL/SQL中的复合类型,记录类型 :记录类型是把逻辑相关的数据作为一个单元存储起来,定义记录类型语法如下: TYPE record_type IS RECORD( Fi
4、eld1 type1 NOT NULL := exp1 , Field2 type2 NOT NULL := exp2 , . . . . . . Fieldn typen NOT NULL := expn ) ;,练习1:创建一个图书记录类型(书号,书名),显示结果为: 书号:1100 书名:VB.Net 练习2:显示7788号员工的员工号,姓名,工资,PL/SQL中的复合类型,%TYPE:定义一个变量,其数据类型与已经定义的某个数据变量的类型相同,或者与数据库表的某个列的数据类型相同 ,这时可以使用%TYPE,例:DECLARE - 用 %TYPE 类型定义与表相配的字段 TYPE t_R
5、ecord IS RECORD( T_no emp.empno%TYPE, T_name emp.ename%TYPE, T_sal emp.sal%TYPE ); - 声明接收数据的变量 v_emp t_Record;,PL/SQL中的复合类型,%ROWTYPE:返回一个记录类型, 其数据类型和数据库表的数据结构相 一致。,例:DECLARE v_empno emp.empno%TYPE :=,PL/SQL表,PL/SQL表或者称为索引表(index-table),是可以在PL/SQL 程序中引用、能够模仿数组的非永久表。用户可以定义一个表类型,然后声明这种类型的变量。接下来,用户就可以将记
6、录添加到用户的PL/SQL 表中,并且采用与引用数组元素大体相同的方法引用他们,表包括两个基本成分: 数据处理类型为BINARY_INTEGER主键 标量或记录数据类型的列,PL/SQL表,定义一个表: TYPE type_name IS TABLE OF column_type | variable%TYPE | table.column%TYPE NOT NULL | table%ROWTYPE INDEX BY BINARY_INTEGER;,例: DECLARE TYPE dept_table_type IS TABLE OF dept%ROWTYPE INDEX BY BINARY_
7、INTEGER; my_dname_table dept_table_type;,引用表元素,例: DECLARE type dept_table_type is table of dept%ROWTYPE index by binary_integer; my_dname_table dept_table_type; int number(3); BEGIN int := -10; my_dname_table(int).dname := searching; dbms_output.put_line(my_dname_table(int).dname); int := 0; my_dnam
8、e_table(int).dname := market; dbms_output.put_line(my_dname_table(int).dname); int := 10; my_dname_table(int).dname := finance; dbms_output.put_line(my_dname_table(int).dname); END;,PL/SQL表,注意: Index-by表中的元素不一定要按任何特定的顺序排序 用于Index-by表的关键字没有必要是顺序的 关键字唯一允许的类型是BINARY_INTERGER,练习:定义数组元素为部门表的记录的数组, 保存10号,
9、20号部门的信息并显示。,PL/SQL中的可变数组,一般格式为:,TYPE type_name IS VARRAY (maximum_size) OF element_type NOT NULL,其中:type_name是新可变长数组类型的类型名。 maximum_size是一个指定可变数组中元素最大数目的整数。 element_type是一个PL/SQL标量、记录或对象类型。 NOT NULL子串表示集合中的每一个元素都必须有值。,一般格式为:DECLARE type numberlist is varray(10) of number(5); type recordlist is varr
10、ay(5) of dept%rowtype;,引用数组元素,例: DECLARE type strings is varray(5) of varchar2(10); - Declare a varray with four element v_list strings := strings(scott,peter,smith,tom); int number; BEGIN int := 1; dbms_output.put_line(v_list(int); v_list(int) := urman; dbms_output.put_line(v_list(int); int := 3; d
11、bms_output.put_line(v_list(int); v_list(int) := jackson; dbms_output.put_line(v_list(int); v_list.extend; v_list(5):=oracle; dbms_output.put_line(v_list(5); END;,PL/SQL表和可变数组的区别,VARRAY集合中的元素的数量是有限的,Index_by则是没有限制的。 Index_by表的下标可以有间隔, VARRAY集合的下标之间没有间隔。 Index_by表不能存储在数据库中,但嵌套表和VARRAY可以被存储在数据库中。 Index
12、_by表初始化是自动进行的,VARRAY就必须使用内建的构造函数,构造函数和集合的名字相同 。,表和数组属性,表和数组属性,例: DECLARE type strings_table is table of varchar2(10) index by binary_integer; strings strings_table; int number; BEGIN int := 1; strings(int) := element1; if strings.exists(int) then dbms_output.put_line(strings(int); else dbms_output.p
13、ut_line(no data!); return; end if;,表和数组属性,例: strings(2) := element2; strings(3) := element3; strings(4) := element4; strings(5) := element5; strings(6) := element6; dbms_output.put_line(strings.count); dbms_output.put_line(strings.first); dbms_output.put_line(strings.last); dbms_output.put_line(stri
14、ngs.next(2); dbms_output.put_line(strings.prior(4); strings.delete(1,3); -dbms_output.put_line(strings(2); END;,PL/SQL运算符和表达式,关系运算符,PL/SQL运算符和表达式,一般运算符,PL/SQL运算符和表达式,逻辑运算符,PL/SQL中的变量赋值,在PL/SQL编程中,变量赋值是一个值得注意的地方,它的语法如下: variable := expression ; variable 是一个PL/SQL变量, expression 是一个PL/SQL 表达式. BOOLEAN
15、型变量赋值: 布尔值只有TRUE, FALSE及 NULL 三个值。 空值加数字仍是空值:NULL + = NULL 。 空值加(连接)字符,结果为字符:NULL | = ,PL/SQL中的变量赋值,例:DECLARE done BOOLEAN; /* the following statements are legal: */ BEGIN done := FALSE; WHILE NOT done LOOP Null; END LOOP; END;,PL/SQL中的变量作用范围及可见性,PL/SQL的变量作用范围特点是: 变量的作用范围是在所引用的程序单元(块、子程序、包)内。即从声明变量开
16、始到该块的结束 一个变量(标识)只能在所引用的块内是可见的 当一个变量超出了作用范围,PL/SQL引擎就释放用来存放该变量的空间(因为它可能不用了) 在子块中重新定义该变量后,它的作用仅在该块内,PL/SQL中的变量作用范围及可见性,例: DECLARE v_Number NUMBER(3 , 2); BEGIN DECLARE v_Character VARCHAR2(10); BEGIN END; END;,v_Number的作用域,v_Character的作用域,PL/SQL中的注释,在PL/SQL里,可以使用两种符号来写注释: PL/SQL允许用双来写注释,它的作用范围是只能在一行有效
17、。 例: V_Sal NUMBER(12,2); - 工资变量 使用 /* */ 来加一行或多行注释。 例: /*/ /* 文件名: department_salary.sql */ /*/,PL/SQL简介,例:简单数据查询例子 DECLARE emp_id emp.empno%TYPE :=7788; emp_name emp.ename%TYPE; wages emp.sal%TYPE; BEGIN SELECT ename, NVL(sal,0) + NVL(comm,0) INTO emp_name, wages FROM emp WHERE empno = emp_id; DBMS_OUTPUT.PUT_LINE(emp_name|-|to_char(wages); END;,PL/SQL简介,例:简单数据插入例子 /* 本例子仅是一个简单的插入,不是实际应用。 */ DECLARE v_ename VARCHAR2(20) := Bill; v_sal NUMBER(7,2) :=1234.56; v_deptno NUMBER(2) := 10; v_empno NUMBER(4) := 8888; BEGIN INSERT INTO emp ( emp
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 江苏省盐城市亭湖初级中学2025届七上数学期末质量跟踪监视试题含解析
- 贵州黔西南州望谟三中学2024年数学七上期末学业水平测试模拟试题含解析
- 贵州省黔西南州、黔东南州、黔南州2024-2025学年七年级数学第一学期期末预测试题含解析
- 北美教育体制解析与结构特征
- 造口病人的护理诊断及措施
- 辽宁省辽阳市二中学教育协作2025届数学八年级第一学期期末预测试题含解析
- 山西省朔州市第三中学2024年八上物理期末质量检测试题含解析
- 小学一年级培优辅差多元评价计划
- 三年级数学上册课题研究计划
- 残障学生交通安全辅助计划
- 水电设备安装合同
- 北京民政局离婚协议书范本示例
- 教育培训分期付款协议
- T-CCSAS 023-2022 危险化学品企业紧急切断阀设置和使用规范
- 弱电工程招标文件样本模板
- 抖音发展历程介绍
- 评茶员(高级)试题(含答案)
- HGT20615-2009整体法兰尺寸及公差
- TSHSPS 001-2024 临床试验协调员管理及能力评估规范上海
- 寒假作业一年级上册《数学每日一练》30次打卡
- 人教版八年级物理下册期末复习试题及答案
评论
0/150
提交评论