Oracle9i第6章PLSQL语言.ppt
《Oracle9i第6章PLSQL语言.ppt》由会员分享,可在线阅读,更多相关《Oracle9i第6章PLSQL语言.ppt(93页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、第五章第五章 PL/SQL PL/SQL语言语言nSQLSQL是一种结构化查询语言,它虽然功能强大,但对于有些复是一种结构化查询语言,它虽然功能强大,但对于有些复杂的带有过程化的操作,就不能用简单的杂的带有过程化的操作,就不能用简单的SQLSQL语句来描述。语句来描述。nOracleOracle公司对公司对SQLSQL作了扩展,建立了模块式的过程化作了扩展,建立了模块式的过程化SQLSQL,即,即PL/SQLPL/SQL。nSQLSQL是一种描述性的语言,一次只能处理一条语句,每次执行是一种描述性的语言,一次只能处理一条语句,每次执行都导致客户向服务器调用,从而在性能上产生很大的开销,都导致客
2、户向服务器调用,从而在性能上产生很大的开销,尤其是在网络操作中。尤其是在网络操作中。n使用使用PL/SQLPL/SQL,一个块中的语句作为一个组,一次调用,减少,一个块中的语句作为一个组,一次调用,减少网络传输。网络传输。nPL/SQLPL/SQL是是Procedure Language&Structured Query Procedure Language&Structured Query LanguageLanguage的缩写。的缩写。nOracleOracle的的SQLSQL是支持是支持ANSI(American national Standards ANSI(American nati
3、onal Standards Institute)Institute)和和ISO92(International Standards ISO92(International Standards Organization)Organization)标准的产品。标准的产品。n目前的目前的PL/SQLPL/SQL包括两部分,一部分是数据库引擎部分;另包括两部分,一部分是数据库引擎部分;另一部分是可嵌入到许多产品一部分是可嵌入到许多产品(如如C C语言,语言,JAVAJAVA语言等语言等)工具工具中的独立引擎。可以将这两部分称为:数据库中的独立引擎。可以将这两部分称为:数据库PL/SQLPL/SQL和
4、工和工具具PL/SQLPL/SQL。两者的编程非常相似。都具有编程结构、语法。两者的编程非常相似。都具有编程结构、语法和逻辑机制。工具和逻辑机制。工具PL/SQLPL/SQL另外还增加了用于支持工具另外还增加了用于支持工具(如如Oracle Forms)Oracle Forms)的句法,如:在窗体上设置按钮等。的句法,如:在窗体上设置按钮等。nPL/SQLPL/SQL是一种块结构的语言,组成是一种块结构的语言,组成PL/SQLPL/SQL程序的单元是逻程序的单元是逻辑块,一个辑块,一个PL/SQLPL/SQL程序包含了一个或多个逻辑块,每个块程序包含了一个或多个逻辑块,每个块都可以划分为三个部
5、分:声明部份、可执行部份以及例外都可以划分为三个部分:声明部份、可执行部份以及例外处理部份。处理部份。n声明部分声明部分(Declaration section)(Declaration section)声明部分包含了变量、常量、游标和用户自定义的异常处声明部分包含了变量、常量、游标和用户自定义的异常处理。这个部分是由关键字理。这个部分是由关键字DECLAREDECLARE开始,如果不需要声明开始,如果不需要声明变量、常量、游标和用户自定义的例外处理,那么可以忽变量、常量、游标和用户自定义的例外处理,那么可以忽略这一部分。略这一部分。n执行部分执行部分(Executable section)(
6、Executable section)执行部分是执行部分是PL/SQLPL/SQL块中的指令部分,包括一些对数据库操块中的指令部分,包括一些对数据库操作的作的SQLSQL语句,以及对块中语句进行组织、控制的语句,以及对块中语句进行组织、控制的PL/SQLPL/SQL语句。由关键字语句。由关键字BEGINBEGIN开始,所有的可执行语句都放在这开始,所有的可执行语句都放在这一部分,其他的一部分,其他的PL/SQLPL/SQL块也可以放在这一部分。块也可以放在这一部分。n异常处理部分异常处理部分(Exception section)(Exception section)对可执行部份中的语句,在执行
7、过程中出错或出现非正常对可执行部份中的语句,在执行过程中出错或出现非正常现象时所做的相应处理。在现象时所做的相应处理。在PL/SQLPL/SQL中,这一部分是可选的。中,这一部分是可选的。PL/SQLPL/SQL块语法结构如下:块语法结构如下:DECLAREDECLAREdeclaration statementsdeclaration statementsBEGINBEGINexecutable statementsexecutable statementsEXCEPTIONEXCEPTIONexception statementsexception statementsENDENDnPL/
8、SQLPL/SQL块中的每一条语句都必须以分号结束,块中的每一条语句都必须以分号结束,SQLSQL语句可语句可以多行,但分号表示该语句的结束。一行中可以有多条以多行,但分号表示该语句的结束。一行中可以有多条SQLSQL语句,他们之间以分号分隔。每一个语句,他们之间以分号分隔。每一个PL/SQLPL/SQL块由块由BEGINBEGIN或或DECLAREDECLARE开始,以开始,以ENDEND结束。注释由结束。注释由“-”标示。标示。declaredeclarepcon_value constant number:=211;pcon_value constant number:=211;begi
9、nbegininsert into emp(empno,ename,job)insert into emp(empno,ename,job)values(pcon_value,values(pcon_value,WangWang,XuanXuan););end;end;/declare declare v_ename varchar2(20):=v_ename varchar2(20):=赵元杰赵元杰;v_sal number(7,2):=1234.56;v_sal number(7,2):=1234.56;v_deptno number(2):=10;v_deptno number(2):=
10、10;v_empno number(4):=8888;v_empno number(4):=8888;beginbegininsert into emp(empno,ename,JOB,sal,deptno,hiredate)insert into emp(empno,ename,JOB,sal,deptno,hiredate)values(v_empno,v_ename,values(v_empno,v_ename,自由职业自由职业,v_sal,v_deptno,v_sal,v_deptno,to_date(to_date(,););commit;commit;end;end;/show e
11、rrorshow errordeclare declare v_ename varchar2(20):=v_ename varchar2(20):=赵元杰赵元杰;v_empno number(4):=8888;v_empno number(4):=8888;beginbegindelete from emp where empno=v_empno and ename=v_ename;delete from emp where empno=v_empno and ename=v_ename;commit;commit;end;end;/show errorshow error标识符标识符PL/S
12、QLPL/SQL程序设计中的标识符定义与程序设计中的标识符定义与SQLSQL的标识符定义的要的标识符定义的要求相同。要求和限制有:求相同。要求和限制有:n标识符名不能超过标识符名不能超过3030字符;字符;n第一个字符必须为字母;第一个字符必须为字母;n不分大小写;不分大小写;n不能用不能用-(减号减号););n不能是不能是SQLSQL保留字。保留字。合法的标识符:合法的标识符:declare declare v_name varchar2(20);/*v_name varchar2(20);/*存放存放name name 列的值列的值*/*/v_sal number(9,2);/*v_sal
13、 number(9,2);/*存放存放 sal sal 列的值列的值*/*/不合法的标识符:不合法的标识符:declare declare v-name varchar2(20);/*v-name varchar2(20);/*存放存放name name 列的值列的值*/*/2001_sal number(9,2);/*2001_sal number(9,2);/*存放存放 sal sal 列的值列的值*/*/mine&yours number;-mine&yours number;-非法的标识符非法的标识符debit-amount number(10,4);-debit-amount num
14、ber(10,4);-非法的标识符非法的标识符on/off char(1);-on/off char(1);-非法的标识符非法的标识符user id varchar2(20);-user id varchar2(20);-非法的标识符非法的标识符(不能用空格不能用空格)提示:提示:一般不要把变量名声明与表中字段名完全一样,如果这样一般不要把变量名声明与表中字段名完全一样,如果这样可能得到不正确的结果。可能得到不正确的结果。PL/SQLPL/SQL块在数据库中的使用块在数据库中的使用n由基本的由基本的PL/SQLPL/SQL块组成的块组成的PL/SQLPL/SQL程序,可以组成不同的程序程序,可
15、以组成不同的程序形式。程序形式大致有以下几种:形式。程序形式大致有以下几种:n无名块无名块就是没有命名的就是没有命名的PL/SQLPL/SQL块,它可以是一个嵌入某一个应用之块,它可以是一个嵌入某一个应用之中的一个中的一个PL/SQLPL/SQL块。无名块在所有的块。无名块在所有的PL/SQLPL/SQL环境中都适用。环境中都适用。n存储过程存储过程/函数函数指命名了的指命名了的PL/SQLPL/SQL块,它可以接收参数,并且可以重复地被块,它可以接收参数,并且可以重复地被调用。调用。n包包指由一组相关的过程、函数和标识符组成的命名了的指由一组相关的过程、函数和标识符组成的命名了的PL/SQL
16、PL/SQL模块。模块。n触发器触发器触发器是存储在数据库中的触发器是存储在数据库中的PL/SQLPL/SQL块。并且在数据库对表块。并且在数据库对表发出数据库操作行为发出数据库操作行为(update(update、insertinsert和和delete)delete)时,系统时,系统就自动执行相应的数据库触发器。就自动执行相应的数据库触发器。常量与变量常量与变量n在在PL/SQLPL/SQL块中引用的所有标识符都必需在块中引用的所有标识符都必需在PL/SQLPL/SQL块的定义部分声块的定义部分声明。常量和变量类似,但是常量的值在定义时已经被指定,不能明。常量和变量类似,但是常量的值在定义
17、时已经被指定,不能被改变。它的声明方式和变量一样,但必须指定关键字被改变。它的声明方式和变量一样,但必须指定关键字CONSTANTCONSTANT。变量与常量的声明语法如下:变量与常量的声明语法如下:Variable_name CONSTANT databyte NOT NULL:=|DEFAULT Variable_name CONSTANT databyte NOT NULL:=|DEFAULT expressionexpressionemp_id varchar2(10);emp_id varchar2(10);m number(6);m number(6);CON_VALUE CONS
18、TANT NUMBER:=40CON_VALUE CONSTANT NUMBER:=40;变量的属性变量的属性(1)%TYPE(1)%TYPE属性属性提供了变量和数据库列的数据类型。提供了变量和数据库列的数据类型。在表在表xsxs中包含中包含xhxh列,声明一个变量列,声明一个变量my_xhmy_xh与与xhxh列具有相同列具有相同的数据类型。的数据类型。my_xh xs.xh%type;my_xh xs.xh%type;优点:优点:不必知道不必知道xhxh列的确切数据类型。列的确切数据类型。xhxh列的数据类型的改变,列的数据类型的改变,my_xhmy_xh列的数据类型自动改变。列的数据类型
19、自动改变。(2)%ROWTYPE(2)%ROWTYPE属性属性声明表的行数据记录。声明表的行数据记录。声明一个记录名为声明一个记录名为cj_reccj_rec,与,与xs_kcxs_kc表具有相同的名称和表具有相同的名称和数据类型。数据类型。DECLAREDECLAREcj_rec XS_KC%ROWTYPE;cj_rec XS_KC%ROWTYPE;可以使用点引用域。可以使用点引用域。my_xh:=cj_rec.xh;my_xh:=cj_rec.xh;n如果声明了游标提取如果声明了游标提取xhxh、kchkch、cjcj和和xfxf列,则可以使用列,则可以使用%ROWTYPE%ROWTYPE
20、声明一个记录存储相同的信息。声明一个记录存储相同的信息。DECLAREDECLARECURSOR c1CURSOR c1ISISSELECT XH,KCH,CJSELECT XH,KCH,CJFROM XS_KC;FROM XS_KC;cj_rec c1%ROWTYPE;cj_rec c1%ROWTYPE;当执行当执行FETCH c1 INTO cj_rec;FETCH c1 INTO cj_rec;语句时,在语句时,在xs_kcxs_kc表的表的xhxh列列的值就赋予的值就赋予cj_reccj_rec的的xhxh域。域。赋值赋值n给变量赋值可用直接赋值法和间接赋值法。给变量赋值可用直接赋值法
21、和间接赋值法。n直接赋值是指将一个具体的值或表达式通过直接赋值是指将一个具体的值或表达式通过“:=:=”运算符号运算符号赋予变量赋予变量n间接赋值是指使用间接赋值是指使用SELECT INTOSELECT INTO或或FETCH INTOFETCH INTO来将查询结来将查询结果赋予变量果赋予变量select ename into emp_name from emp select ename into emp_name from emp where empno=211;where empno=211;作用域作用域n作用域是指引用变量的程序单元部分,可以是包或者子程作用域是指引用变量的程序单元部
22、分,可以是包或者子程序包等。序包等。n一个变量只有在其作用域中,被引用时才是可见的。一个变量只有在其作用域中,被引用时才是可见的。n对于对于PL/SQLPL/SQL来说,作用域就是从变量声明的开始一直到这来说,作用域就是从变量声明的开始一直到这个个PL/SQLPL/SQL块的结束。块的结束。set serverout onset serverout onSQL declareSQL declare 2 pEname varchar2(30):=Parent 2 pEname varchar2(30):=Parent pEname;pEname;3 pNo varchar2(30):=Paren
23、t pNo;3 pNo varchar2(30):=Parent pNo;4 begin 4 begin 5 declare 5 declare 6 pEname varchar2(30);6 pEname varchar2(30);7 begin 7 begin 8 pEname:=Child pEname;8 pEname:=Child pEname;9 pNo:=Child PL/SQL;9 pNo:=Child PL/SQL;10 dbms_output.put_line(pEname);10 dbms_output.put_line(pEname);11 end;11 end;12
24、dbms_output.put_line(pEname);12 dbms_output.put_line(pEname);13 dbms_output.put_line(pNo);13 dbms_output.put_line(pNo);14 end;14 end;15 /15 /用户自定义数据类型用户自定义数据类型利用命令定义数据类型利用命令定义数据类型语法:语法:TYPE typenameTYPE typenameIS system_data_typeIS system_data_type例:例:TYPE xs_rec IS RECORDTYPE xs_rec IS RECORD(xh n
25、umber(2)NOT NULL:=1,xh number(2)NOT NULL:=1,xm char(8)xm char(8););复合类型复合类型(记录和表记录和表)1.1.记录类型记录类型定义记录类型语法如下定义记录类型语法如下:TYPE record_type IS RECORD(TYPE record_type IS RECORD(Field1 type1 NOT NULL :=exp1,Field1 type1 NOT NULL :=exp1,Field2 type2 NOT NULL :=exp2,Field2 type2 NOT NULL :=exp2,.Fieldn type
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Oracle9i PLSQL 语言
限制150内