Oracle9i第6章PLSQL语言.ppt
《Oracle9i第6章PLSQL语言.ppt》由会员分享,可在线阅读,更多相关《Oracle9i第6章PLSQL语言.ppt(93页珍藏版)》请在三一办公上搜索。
1、第五章 PL/SQL语言,SQL是一种结构化查询语言,它虽然功能强大,但对于有些复杂的带有过程化的操作,就不能用简单的SQL语句来描述。Oracle公司对SQL作了扩展,建立了模块式的过程化SQL,即PL/SQL。SQL是一种描述性的语言,一次只能处理一条语句,每次执行都导致客户向服务器调用,从而在性能上产生很大的开销,尤其是在网络操作中。使用PL/SQL,一个块中的语句作为一个组,一次调用,减少网络传输。,PL/SQL是Procedure Language&Structured Query Language的缩写。Oracle的SQL是支持ANSI(American national Sta
2、ndards Institute)和ISO92(International Standards Organization)标准的产品。目前的PL/SQL包括两部分,一部分是数据库引擎部分;另一部分是可嵌入到许多产品(如C语言,JAVA语言等)工具中的独立引擎。可以将这两部分称为:数据库PL/SQL和工具PL/SQL。两者的编程非常相似。都具有编程结构、语法和逻辑机制。工具PL/SQL另外还增加了用于支持工具(如Oracle Forms)的句法,如:在窗体上设置按钮等。,PL/SQL是一种块结构的语言,组成PL/SQL程序的单元是逻辑块,一个PL/SQL程序包含了一个或多个逻辑块,每个块都可以划
3、分为三个部分:声明部份、可执行部份以及例外处理部份。,声明部分(Declaration section)声明部分包含了变量、常量、游标和用户自定义的异常处理。这个部分是由关键字DECLARE开始,如果不需要声明变量、常量、游标和用户自定义的例外处理,那么可以忽略这一部分。执行部分(Executable section)执行部分是PL/SQL块中的指令部分,包括一些对数据库操作的SQL语句,以及对块中语句进行组织、控制的PL/SQL语句。由关键字BEGIN开始,所有的可执行语句都放在这一部分,其他的PL/SQL块也可以放在这一部分。异常处理部分(Exception section)对可执行部份中
4、的语句,在执行过程中出错或出现非正常现象时所做的相应处理。在PL/SQL中,这一部分是可选的。,PL/SQL块语法结构如下:DECLAREdeclaration statementsBEGINexecutable statementsEXCEPTIONexception statementsEND,PL/SQL块中的每一条语句都必须以分号结束,SQL语句可以多行,但分号表示该语句的结束。一行中可以有多条SQL语句,他们之间以分号分隔。每一个PL/SQL块由BEGIN或DECLARE开始,以END结束。注释由“-”标示。declarepcon_value constant number:=211
5、;begininsert into emp(empno,ename,job)values(pcon_value,Wang,Xuan);end;/,declare v_ename varchar2(20):=赵元杰;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,自由职业,v_sal,v_deptno,to_date(,);commit;e
6、nd;/show error,declare v_ename varchar2(20):=赵元杰;v_empno number(4):=8888;begindelete from emp where empno=v_empno and ename=v_ename;commit;end;/show error,标识符,PL/SQL程序设计中的标识符定义与SQL的标识符定义的要求相同。要求和限制有:标识符名不能超过30字符;第一个字符必须为字母;不分大小写;不能用-(减号);不能是SQL保留字。,合法的标识符:declare v_name varchar2(20);/*存放name 列的值*/v_
7、sal number(9,2);/*存放 sal 列的值*/,不合法的标识符:declare v-name varchar2(20);/*存放name 列的值*/2001_sal number(9,2);/*存放 sal 列的值*/mine-非法的标识符(不能用空格)提示:一般不要把变量名声明与表中字段名完全一样,如果这样可能得到不正确的结果。,PL/SQL块在数据库中的使用,由基本的PL/SQL块组成的PL/SQL程序,可以组成不同的程序形式。程序形式大致有以下几种:无名块就是没有命名的PL/SQL块,它可以是一个嵌入某一个应用之中的一个PL/SQL块。无名块在所有的PL/SQL环境中都适用
8、。存储过程/函数指命名了的PL/SQL块,它可以接收参数,并且可以重复地被调用。,包指由一组相关的过程、函数和标识符组成的命名了的PL/SQL模块。触发器触发器是存储在数据库中的PL/SQL块。并且在数据库对表发出数据库操作行为(update、insert和delete)时,系统就自动执行相应的数据库触发器。,常量与变量,在PL/SQL块中引用的所有标识符都必需在PL/SQL块的定义部分声明。常量和变量类似,但是常量的值在定义时已经被指定,不能被改变。它的声明方式和变量一样,但必须指定关键字CONSTANT。变量与常量的声明语法如下:Variable_name CONSTANT databyt
9、e NOT NULL:=|DEFAULT expressionemp_id varchar2(10);m number(6);CON_VALUE CONSTANT NUMBER:=40;,变量的属性,(1)%TYPE属性提供了变量和数据库列的数据类型。在表xs中包含xh列,声明一个变量my_xh与xh列具有相同的数据类型。my_xh xs.xh%type;优点:不必知道xh列的确切数据类型。xh列的数据类型的改变,my_xh列的数据类型自动改变。,(2)%ROWTYPE属性声明表的行数据记录。声明一个记录名为cj_rec,与xs_kc表具有相同的名称和数据类型。DECLAREcj_rec XS
10、_KC%ROWTYPE;可以使用点引用域。my_xh:=cj_rec.xh;,如果声明了游标提取xh、kch、cj和xf列,则可以使用%ROWTYPE声明一个记录存储相同的信息。DECLARECURSOR c1ISSELECT XH,KCH,CJFROM XS_KC;cj_rec c1%ROWTYPE;当执行FETCH c1 INTO cj_rec;语句时,在xs_kc表的xh列的值就赋予cj_rec的xh域。,赋值,给变量赋值可用直接赋值法和间接赋值法。直接赋值是指将一个具体的值或表达式通过“:=”运算符号赋予变量间接赋值是指使用SELECT INTO或FETCH INTO来将查询结果赋予变
11、量select ename into emp_name from emp where empno=211;,作用域,作用域是指引用变量的程序单元部分,可以是包或者子程序包等。一个变量只有在其作用域中,被引用时才是可见的。对于PL/SQL来说,作用域就是从变量声明的开始一直到这个PL/SQL块的结束。,set serverout onSQL declare 2 pEname varchar2(30):=Parent pEname;3 pNo varchar2(30):=Parent pNo;4 begin 5 declare 6 pEname varchar2(30);7 begin 8 pEn
12、ame:=Child pEname;9 pNo:=Child PL/SQL;10 dbms_output.put_line(pEname);11 end;12 dbms_output.put_line(pEname);13 dbms_output.put_line(pNo);14 end;15/,用户自定义数据类型,利用命令定义数据类型,语法:TYPE typenameIS system_data_type例:TYPE xs_rec IS RECORD(xh number(2)NOT NULL:=1,xm char(8);,复合类型(记录和表),1.记录类型定义记录类型语法如下:TYPE re
13、cord_type IS RECORD(Field1 type1 NOT NULL:=exp1,Field2 type2 NOT NULL:=exp2,.Fieldn typen NOT NULL:=expn);,DECLARE TYPE t_rec1 is record(Field1 number,Field2 varchar2(5);TYPE t_rec2 IS RECORD(Field1 number,Field2 varchar2(5);V_Rec1 t_rec1 type;V_rec2 t_rec2 type;Beginv_rec1:=v_rec2;v_rec1.field1:=v_
14、rec2.field1;v_rec1.field2:=v_rec2.field2;end;,数据类型转换,CHAR转换为NUMBERT使用TO_NUMBER函数来完成字符到数字的转换,如:v_total:=to_number(100.0)+sal;NUMBERT转换为CHAR使用TO_CHAR函数可以实现数字到字符的转换,如:v_comm:=to_char(123.45)|元;,字符转换为日期使用TO_DATE函数可以实现字符到日期的转换,如:v_date:=to_date(2001.07.03,yyyy.mm.dd);日期转换为字符使用TO_CHAR函数可以实现日期到字符的转换,如:v_to
15、_day:=to_char(sysdate,yyyy.mm.dd hh24:mi:ss);,可以在SQL下输入下面命令来验证以上的语句:select to_char(sysdate,yyyy)|年|to_char(sysdate,mm)|月|to_char(sysdate,dd)|日 from dual;SQL alter session set nls_date_format=yyyy年mm月dd日;SQL select sysdate from dual;SQL select to_number(133)+200 from dual;SQL select to_char(321)|元 fr
16、om dual;SQL select to_date(2001.07.03,yyyy.mm.dd)from dual;,注释,在PL/SQL里,可以使用两种符号来写注释,即:使用双-(减号)加注释PL/SQL允许用双-(双减号)来写注释,它的作用范围是只能在1行有效。使用/*/来加一行或多行注释使用/*.*/在PL/SQL程序中加,可以对多行进行注释。,PL/SQL运算符,一般运算符用来进行加、减、乘、除等算术运算以及赋值、范围运算和字符连接等操作。,比较运算符用于将一个表达式和另外一个表达式进行比较,其结果总是TRUE、FALSE和NULL三种。,逻辑运算符就只有3个,分别是AND、OR和N
17、OT。其中AND和OR是二元运算符(即需要两个操作数进行运算的),NOT是一元运算符。,条件语句IFTHEN,表达式一IFTHENPL/SQL和SQL语句END IF;表达式二IFTHENPL/SQL和SQL语句ELSEPL/SQL和SQL语句END IF;,表达式三IFTHENPL/SQL和SQL语句ELSIFTHENPL/SQL和SQL语句ELSEPL/SQL和SQL语句END IF;,IFTHENPL/SQL和SQL语句IFTHENPL/SQL和SQL语句END IF;END IF;,Set serverout onDECLARE V_numberseats rooms.number_s
18、eats%TYPE;V_comment varchar2(35);Begin Select number_seats into v_numberseats From rooms where room_id=99999;IF v_numberseats50 then V_comment:=Fairly small;Elsif v_numberseats 100 then V_comment:=A little bigger;Else V_comment:=Lots of room;End if;dbms_output.put_line(v_comment);End;,查询总学分大于40的学生人数
19、。DECLAREv_num number(3);BEGINSELECT COUNT(*)INTO v_numFROM xsWHERE zxf40;IF v_num0 THENdbms_output.put_line(总学分40的人数为:|TO_CHAR(v_num);END IF;END;,判断计算机系总学分大于40的人数是否超过80人。DECLAREv_num number(3);BEGINSELECT COUNT(*)INTO v_numFROM xsWHERE zxf40 AND zym=计算机;IF v_num0 THENIF v_num80 THENdbms_output.put_l
20、ine(计算机系总学分40的人数超过80人);END IF;END;,如果“数据库原理”课程的平均成绩高于75分,则显示“平均成绩大于75”,否则显示“平均成绩小于75”。Declarev_avg number(4,2);Beginselect avg(cj)into v_avgfrom xs,xs_kc,kcwhere xs.xh=xs_kc.xh and xs_kc.kch=kc.kch andkc.kcm=数据库原理;If v_avg75 thendbms_output.put_line(平均成绩大于75);elsedbms_output.put_line(平均成绩小于75);End i
21、f;END;,LOOP循环,LOOPstatementsEND LOOP;,set serverout ondeclarex number:=0;beginloopx:=x+1;if x=100 thenexit;end if;end loop;dbms_output.put_line(x);end;,set serverout ondeclare x number;begin x:=0;loop x:=x+1;dbms_output.put_line(to_char(x);exit when x=10;end loop;end;,DECLARE V_counter INTEGER:=1;Be
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Oracle9i PLSQL 语言

链接地址:https://www.31ppt.com/p-6513386.html