PLSQL经典教程.ppt

上传人:牧羊曲112 文档编号:5444137 上传时间:2023-07-07 格式:PPT 页数:36 大小:324.50KB
返回 下载 相关 举报
PLSQL经典教程.ppt_第1页
第1页 / 共36页
PLSQL经典教程.ppt_第2页
第2页 / 共36页
PLSQL经典教程.ppt_第3页
第3页 / 共36页
PLSQL经典教程.ppt_第4页
第4页 / 共36页
PLSQL经典教程.ppt_第5页
第5页 / 共36页
点击查看更多>>
资源描述

《PLSQL经典教程.ppt》由会员分享,可在线阅读,更多相关《PLSQL经典教程.ppt(36页珍藏版)》请在三一办公上搜索。

1、PL/SQL 程序设计简介,什么是PL/SQL,PL/SQL是 Procedure Language&Structured Query Language(过程化SQL语言)的缩写PL/SQL是对SQL语言存储过程语言的扩展,PL/SQL的优点,它最大的优点是提供了一种服务器端存储过程语言,可以对数据进行快速高效的处理。任何客户/服务器工具都能访问PL/SQL程序,具有很好的可重用性。可以使用ORACLE数据工具管理存储在服务器中的PL/SQL程序的安全性。可以授权或撤销数据库其他用户访问PL/SQL程序的能力。对于SQL,ORACLE必须在同一时间处理每一条SQL语句,在网络环境下这就意味着每

2、一个独立的调用都必须被oracle服务器处理,这就占用大量的服务器时间,同时导致网络拥挤。而PL/SQL是以整个语句块发给服务器,这就降低了网络拥挤。,PL/SQL块结构和组成元素,PL/SQL程序由三个块组成,即声明部分、执行部分、异常处理部分。,PL/SQL块,PL/SQL块结构和组成元素,PL/SQL块的结构如下:DECLARE/*声明部分:在此声明PL/SQL用到的变量,类型及游标,以及局部的存储过程和函数*/BEGIN/*执行部分:过程及SQL 语句,即程序的主要部分*/EXCEPTION/*执行异常部分:错误处理*/END;其中 执行部分是必须的。,PL/SQL块结构和组成元素,P

3、L/SQL块可以分成三类:匿名块:动态构造,只能执行一次 子程序:存储在数据库中的存储过程、函数及包等。当在数据库上建立好后可以在其它程序中调用它们 触发器:当数据库发生操作时,会触发一些事件,从而自动执行相应的程序,PL/SQL中的标识符,PL/SQL程序设计中的标识符定义与SQL的标识符定义的要求相同标识符名不能超过30字符 第一个字符必须为字母 不能用-(减号)不分大小写 不能是SQL保留字,PL/SQL中的标识符,一般不要把变量名声明与表中字段名完全一样,如果这样可能得到不正确的结果,例:DECLARE Ename varchar2(20):=KING;BEGINDELETE FROM

4、 emp WHERE ename=ename;END;,PL/SQL中的标识符,下面是建议使用的变量命名方法,练习:给KING的工资涨10%,PL/SQL中的变量类型,PL/SQL中声明变量,在语句块的声明部分对变量声明,声明一个变量的语法是:variable_name constant type not null:=value其中:variable_name 为变量名 type 为类型 value 为变量的初值,PL/SQL中声明变量,例:DECLAREV_Description VARCHAR2(50);V_Number NUMBER:=45;V_Counter BINARY_INTEGE

5、R:=0;注意:如果变量在声明时使用了NOT NULL选项则必须为变量指定初值。如果变量在声明时使用了CONSTANT选项则必须为变量指定初值,并且该初值不能被改变。练习:查询员工号为7788的员工姓名,并显示在控制台。,PL/SQL中的复合类型,记录类型:记录类型是把逻辑相关的数据作为一个单元存储起来,定义记录类型语法如下:TYPE record_type IS RECORD(Field1 type1 NOT NULL:=exp1,Field2 type2 NOT NULL:=exp2,.Fieldn typen NOT NULL:=expn);,练习1:创建一个图书记录类型(书号,书名),

6、显示结果为:书号:1100 书名:VB.Net练习2:显示7788号员工的员工号,姓名,工资,PL/SQL中的复合类型,%TYPE:定义一个变量,其数据类型与已经定义的某个数据变量的类型相同,或者与数据库表的某个列的数据类型相同,这时可以使用%TYPE,例:DECLARE-用%TYPE 类型定义与表相配的字段 TYPE t_Record IS RECORD(T_no emp.empno%TYPE,T_name emp.ename%TYPE,T_sal emp.sal%TYPE);-声明接收数据的变量 v_emp t_Record;,PL/SQL中的复合类型,%ROWTYPE:返回一个记录类型,

7、其数据类型和数据库表的数据结构相 一致。,例:DECLARE v_empno emp.empno%TYPE:=,PL/SQL表,PL/SQL表或者称为索引表(index-table),是可以在PL/SQL 程序中引用、能够模仿数组的非永久表。用户可以定义一个表类型,然后声明这种类型的变量。接下来,用户就可以将记录添加到用户的PL/SQL 表中,并且采用与引用数组元素大体相同的方法引用他们,表包括两个基本成分:数据处理类型为BINARY_INTEGER主键 标量或记录数据类型的列,PL/SQL表,定义一个表:TYPE type_name IS TABLE OFcolumn_type|variab

8、le%TYPE|table.column%TYPE NOT NULL|table%ROWTYPEINDEX BY BINARY_INTEGER;,例:DECLARETYPE dept_table_type IS TABLE OF dept%ROWTYPE INDEX BY BINARY_INTEGER;my_dname_table dept_table_type;,引用表元素,例:DECLAREtype dept_table_type is table of dept%ROWTYPE index by binary_integer;my_dname_table dept_table_type;

9、int number(3);BEGIN int:=-10;my_dname_table(int).dname:=searching;dbms_output.put_line(my_dname_table(int).dname);int:=0;my_dname_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;,P

10、L/SQL表,注意:Index-by表中的元素不一定要按任何特定的顺序排序 用于Index-by表的关键字没有必要是顺序的 关键字唯一允许的类型是BINARY_INTERGER,练习:定义数组元素为部门表的记录的数组,保存10号,20号部门的信息并显示。,PL/SQL中的可变数组,一般格式为:,TYPE type_name IS VARRAY(maximum_size)OF element_type NOT NULL,其中:type_name是新可变长数组类型的类型名。maximum_size是一个指定可变数组中元素最大数目的整数。element_type是一个PL/SQL标量、记录或对象类型

11、。NOT NULL子串表示集合中的每一个元素都必须有值。,一般格式为:DECLAREtype numberlist is varray(10)of number(5);type recordlist is varray(5)of dept%rowtype;,引用数组元素,例:DECLAREtype 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_ou

12、tput.put_line(v_list(int);v_list(int):=urman;dbms_output.put_line(v_list(int);int:=3;dbms_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

13、表的下标可以有间隔,VARRAY集合的下标之间没有间隔。Index_by表不能存储在数据库中,但嵌套表和VARRAY可以被存储在数据库中。Index_by表初始化是自动进行的,VARRAY就必须使用内建的构造函数,构造函数和集合的名字相同。,表和数组属性,表和数组属性,例:DECLAREtype 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(in

14、t)then dbms_output.put_line(strings(int);else dbms_output.put_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(s

15、trings.last);dbms_output.put_line(strings.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变量,expres

16、sion 是一个PL/SQL 表达式.BOOLEAN 型变量赋值:布尔值只有TRUE,FALSE及 NULL 三个值。空值加数字仍是空值:NULL+=NULL。空值加(连接)字符,结果为字符:NULL|=,PL/SQL中的变量赋值,例:DECLAREdone BOOLEAN;/*the following statements are legal:*/BEGINdone:=FALSE;WHILE NOT done LOOPNull;END LOOP;END;,PL/SQL中的变量作用范围及可见性,PL/SQL的变量作用范围特点是:变量的作用范围是在所引用的程序单元(块、子程序、包)内。即从声明

17、变量开始到该块的结束 一个变量(标识)只能在所引用的块内是可见的 当一个变量超出了作用范围,PL/SQL引擎就释放用来存放该变量的空间(因为它可能不用了)在子块中重新定义该变量后,它的作用仅在该块内,PL/SQL中的变量作用范围及可见性,例:DECLAREv_Number NUMBER(3,2);BEGINDECLAREv_Character VARCHAR2(10);BEGIN END;END;,v_Number的作用域,v_Character的作用域,PL/SQL中的注释,在PL/SQL里,可以使用两种符号来写注释:PL/SQL允许用双来写注释,它的作用范围是只能在一行有效。例:V_Sal

18、 NUMBER(12,2);-工资变量 使用/*/来加一行或多行注释。例:/*/*文件名:department_salary.sql*/*/,PL/SQL简介,例:简单数据查询例子 DECLARE emp_id emp.empno%TYPE:=7788;emp_name emp.ename%TYPE;wages emp.sal%TYPE;BEGINSELECT 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(wa

19、ges);END;,PL/SQL简介,例:简单数据插入例子/*本例子仅是一个简单的插入,不是实际应用。*/DECLAREv_ename VARCHAR2(20):=Bill;v_sal NUMBER(7,2):=1234.56;v_deptno NUMBER(2):=10;v_empno NUMBER(4):=8888;BEGININSERT INTO emp(empno,ename,JOB,sal,deptno,hiredate)VALUES(v_empno,v_ename,Manager,v_sal,v_deptno,TO_DATE(1954.06.09,yyyy.mm.dd);COMMIT;END;,PL/SQL简介,例:简单数据删除例子/*本例子仅是一个简单的删除例子,不是实际应用。*/DECLAREv_empno number(4):=8888;BEGINDELETE FROM emp WHERE empno=v_empno;COMMIT;END;,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号