PLSQL经典教程PPT_第1页
PLSQL经典教程PPT_第2页
PLSQL经典教程PPT_第3页
PLSQL经典教程PPT_第4页
PLSQL经典教程PPT_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PL/SQL程序设计简介,什么是PL/SQL,PL/SQL是ProcedureLanguage其中执行部分是必须的。,PL/SQL块结构和组成元素,PL/SQL块可以分成三类:匿名块:动态构造,只能执行一次子程序:存储在数据库中的存储过程、函数及包等。当在数据库上建立好后可以在其它程序中调用它们触发器:当数据库发生操作时,会触发一些事件,从而自动执行相应的程序,PL/SQL中的标识符,PL/SQL程序设计中的标识符定义与SQL的标识符定义的要求相同标识符名不能超过30字符第一个字符必须为字母不能用-(减号)不分大小写不能是SQL保留字,PL/SQL中的标识符,一般不要把变量名声明与表中字段名完全一样,如果这样可能得到不正确的结果,例:DECLAREEnamevarchar2(20):=KING;BEGINDELETEFROMempWHEREename=ename;END;,PL/SQL中的标识符,下面是建议使用的变量命名方法,练习:给KING的工资涨10%,PL/SQL中的变量类型,PL/SQL中声明变量,在语句块的声明部分对变量声明,声明一个变量的语法是:variable_nameconstanttypenotnull:=value其中:variable_name为变量名type为类型value为变量的初值,PL/SQL中声明变量,例:DECLAREV_DescriptionVARCHAR2(50);V_NumberNUMBER:=45;V_CounterBINARY_INTEGER:=0;注意:如果变量在声明时使用了NOTNULL选项则必须为变量指定初值。如果变量在声明时使用了CONSTANT选项则必须为变量指定初值,并且该初值不能被改变。练习:查询员工号为7788的员工姓名,并显示在控制台。,PL/SQL中的复合类型,记录类型:记录类型是把逻辑相关的数据作为一个单元存储起来,定义记录类型语法如下:TYPErecord_typeISRECORD(Field1type1NOTNULL:=exp1,Field2type2NOTNULL:=exp2,.FieldntypenNOTNULL:=expn);,练习1:创建一个图书记录类型(书号,书名),显示结果为:书号:1100书名:VB.Net练习2:显示7788号员工的员工号,姓名,工资,PL/SQL中的复合类型,%TYPE:定义一个变量,其数据类型与已经定义的某个数据变量的类型相同,或者与数据库表的某个列的数据类型相同,这时可以使用%TYPE,例:DECLARE-用%TYPE类型定义与表相配的字段TYPEt_RecordISRECORD(T_noemp.empno%TYPE,T_nameemp.ename%TYPE,T_salemp.sal%TYPE);-声明接收数据的变量v_empt_Record;,PL/SQL中的复合类型,%ROWTYPE:返回一个记录类型,其数据类型和数据库表的数据结构相一致。,例:DECLAREv_empnoemp.empno%TYPE:=,PL/SQL表,PL/SQL表或者称为索引表(index-table),是可以在PL/SQL程序中引用、能够模仿数组的非永久表。用户可以定义一个表类型,然后声明这种类型的变量。接下来,用户就可以将记录添加到用户的PL/SQL表中,并且采用与引用数组元素大体相同的方法引用他们,表包括两个基本成分:数据处理类型为BINARY_INTEGER主键标量或记录数据类型的列,PL/SQL表,定义一个表:TYPEtype_nameISTABLEOFcolumn_type|variable%TYPE|table.column%TYPENOTNULL|table%ROWTYPEINDEXBYBINARY_INTEGER;,例:DECLARETYPEdept_table_typeISTABLEOFdept%ROWTYPEINDEXBYBINARY_INTEGER;my_dname_tabledept_table_type;,引用表元素,例:DECLAREtypedept_table_typeistableofdept%ROWTYPEindexbybinary_integer;my_dname_tabledept_table_type;intnumber(3);BEGINint:=-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;,PL/SQL表,注意:Index-by表中的元素不一定要按任何特定的顺序排序用于Index-by表的关键字没有必要是顺序的关键字唯一允许的类型是BINARY_INTERGER,练习:定义数组元素为部门表的记录的数组,保存10号,20号部门的信息并显示。,PL/SQL中的可变数组,一般格式为:,TYPEtype_nameISVARRAY(maximum_size)OFelement_typeNOTNULL,其中:type_name是新可变长数组类型的类型名。maximum_size是一个指定可变数组中元素最大数目的整数。element_type是一个PL/SQL标量、记录或对象类型。NOTNULL子串表示集合中的每一个元素都必须有值。,一般格式为:DECLAREtypenumberlistisvarray(10)ofnumber(5);typerecordlistisvarray(5)ofdept%rowtype;,引用数组元素,例:DECLAREtypestringsisvarray(5)ofvarchar2(10);-Declareavarraywithfourelementv_liststrings:=strings(scott,peter,smith,tom);intnumber;BEGINint:=1;dbms_output.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表的下标可以有间隔,VARRAY集合的下标之间没有间隔。Index_by表不能存储在数据库中,但嵌套表和VARRAY可以被存储在数据库中。Index_by表初始化是自动进行的,VARRAY就必须使用内建的构造函数,构造函数和集合的名字相同。,表和数组属性,表和数组属性,例:DECLAREtypestrings_tableistableofvarchar2(10)indexbybinary_integer;stringsstrings_table;intnumber;BEGINint:=1;strings(int):=element1;ifstrings.exists(int)thendbms_output.put_line(strings(int);elsedbms_output.put_line(nodata!);return;endif;,表和数组属性,例: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(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变量,expression是一个PL/SQL表达式.BOOLEAN型变量赋值:布尔值只有TRUE,FALSE及NULL三个值。空值加数字仍是空值:NULL+=NULL。空值加(连接)字符,结果为字符:NULL|=,PL/SQL中的变量赋值,例:DECLAREdoneBOOLEAN;/*thefollowingstatementsarelegal:*/BEGINdone:=FALSE;WHILENOTdoneLOOPNull;ENDLOOP;END;,PL/SQL中的变量作用范围及可见性,PL/SQL的变量作用范围特点是:变量的作用范围是在所引用的程序单元(块、子程序、包)内。即从声明变量开始到该块的结束一个变量(标识)只能在所引用的块内是可见的当一个变量超出了作用范围,PL/SQL引擎就释放用来存放该变量的空间(因为它可能不用了)在子块中重新定义该变量后,它的作用仅在该块内,PL/SQL中的变量作用范围及可见性,例:DECLAREv_NumberNUMBER(3,2);BEGINDECLAREv_CharacterVARCHAR2(10);BEGINEND;END;,v_Number的作用域,v_Character的作用域,PL/SQL中的注释,在PL/SQL里,可以使用两种符号来写注释:PL/SQL允许用双来写注释,它的作用范围是只能在一行有效。例:V_SalNUMBER(12,2);-工资变量使用/*/来加一行或多行注释。例:/*/*文件名:department_salary.sql*/*/,PL/SQL简介,例:简单数据查询例子DECLAREemp_idemp.empno%TYPE:=7788;emp_nameemp.ename%TYPE;wagesemp.sal%TYPE;BEGINSELECTename,NVL(sal,0)+NVL(comm,0)INTOemp_name,wagesFROMempWHEREempno=emp_id;DBMS_OUTPUT.PUT_LINE(emp_name|-|to_char(wages);END;,PL/SQL简介,例:简单数据插入例子/*本例子仅是一个简单的插入,不是实际应用。*/DECLAREv_enameVARCHAR2(20):=Bill;v_salNUMBER(7,2):=1234.56;v_deptnoNUMBER(2):=10;v_empnoNUMBER(4):=8888;BEGININSERT

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论