PLSQL经典教学

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第14章PL/SQL语言基础一、例子DECLARENCHAR(8);SALNUMBER(5);INUMBER(2);BEGINSELECTSALARYINTOSALFROMEMPLOYEESWHEREEMPLOYEE_ID='201';IFSAL10000THENDBMS_OUTPUT.PUT_LINE(TO_CHAR(SAL)||'太少');ELSEDBMS_OUTPUT.PUT_LINE(TO_CHAR(SAL)||'还可以');ENDIF;END;二、PL/SQL简述1.PL/SQL块及程序PL/SQL是一种过程化编程语言。用PL/SQL定义块可将多个SQL编制成程序(程序过程、函数触发器等)。程序是由若干PL/SQL块组成。2.PL/SQL块结构与用途PL/SQL块由三部分组成:定义部分:定义所处理的变量、常量、游标等。可执行部分:SQL语句及控制结构的PL/SQL语句异常处理部分:对执行过程中的错误进行处理。块可以嵌套。块结构:[DECLARE说明部分]BEGIN语句(SQL或PL/SQL语句)[EXCEPTION错误处理程序]END3.PL/SQL程序分类由基本PL/SQL块组成PL/SQL程序。程序有:无名块:它嵌入在某个应用中的PL/SQL块。存储过程或函数:命名了的PL/SQL块,可以带参数,并重复调用,是数据库对象。包:是命名PL/SQL块,由一组相关的过程、函数和标识符组成。是数据库对象。触发器:与表相关联的存储过程。一表最多12个。4.PL/SQL程序运行环境可以有多个:SQLPlusWorksheet,SQLPLUS等。在SQLPLUS环境中,第一句是DECLARE或BEGIN就识别为是PL/SQL程序。它只能以“/”表示程序结束。三、PL/SQL基础1.标识符标识符是用户定义的符号串,用来命名变量、常量、过程等。标识符以字母开头,后跟数字(0-9)或特殊字符$、#和_。长度不超过30,不能是PL/SQL的保留字,不能有空格。例1:合法标识符:A34、BB#,D_123DF不合法标识符:5A$、#ABC、END。2.变量及变量说明变量是表示要处理数据项的名称。变量名用标识符来表示。变量在使用之前必须用DECLARE进行说明。变量说明:变量名[CONSTANT]类型[NOTNULL][:=值][DEFAULTSQL表达式];例1:DECLAREaachar(5)notnull:=‘TEST’;bbnumber(3)default5;ccchar(4):='THIS';ddconstantchar(4):=‘SWJ’;--不能赋值beginDBMS_OUTPUT.PUT_LINE(aa||''||to_char(bb)||''||cc||''||DD);end;说明:非空时要有初始值,NOTNULL在前,缺省值在后;每个变量说明占一行,且以分号“;”结束。变量说明要在DECLARE以后,BEGIN之前。3.变量或常量类型数值型:NUMBER(p,s),INTEGER,FLOAT,DEC字符型:CHAR(n),VARCHAR2(n),RAW(n)日期型:DATE布尔型:BOOLEAN(TRUE或FALSE)大数据类型:BFILE,BLOB,CLOB,NCLOB4.数据类型转换显示转换:TO_CHAR(),TO_NUMBER(),RAWTOHEX(),,HEXTORAW(),ROWIDTOCHAR(),TO_DATE()5.函数6.表达式表达式是由变量、常量、列名、函数和运算符结合的有意义式子。数值表达式:数值运算符、变量、常量、函数等数值运算符:+、-、*、/、**、()例2:DECLAREAINT:=4;BFLOAT:=4.324;XFLOAT;BEGINX:=SIN(3)*10+2**8-A*10*(10-B**2);DBMS_OUTPUT.PUT_LINE(TO_CHAR(X));END;字符表达式:字符运算符:||(合并)关系表达式:关系表达式的结果是TRUE和FALSE关系运算符:!====LIKEINBETWEEN…AND…表达式关系运算符表达式例3:ABC‘123’123345‘THIS’LIKE‘T%’XBETWEEN10AND20‘A’IN(‘SS’,’DD’,’AD’)FALSESIN(X)+10A**2+B逻辑表达式逻辑运算符:NOTANDOR关系表达式逻辑表达式关系表达式例4:NOT(A10ANDB10)A+10100ANDCCCLIKE‘C%’例5:DECLAREAINT:=4;BFLOAT:=4.324;XFLOAT;CBOOLEAN;BEGINX:=SIN(3)*10+2**8-A*10*(10-B**2);C:='A'IN('SS','DD','AD');IFCORABTHENDBMS_OUTPUT.PUT_LINE(TO_CHAR(X));ENDIF;END;7.变量赋值变量名:=与变量同类型的表达式;例6:DECLAREC1CHAR(34);--赋给C1的字符串不能大于34N1NUMBER(3);N2NUMBER(2);B1BOOLEAN;BEGINN1:=10;N2:=SIN(N1)**2+20.30;C1:=TO_CHAR(N2)||’TEST’;B1:=C1LIKE‘%T’;END;8.注释行单行注释:在一行的任何位置以“--字符串”多行注释:/*注释内容*/例7:DECLAREC1CHAR(34);--字符变量,长度不超过34N1NUMBER(3);--数字型变量BEGIN/*赋值语句范例:变量类型要与表达式类型一致*/N1:=10;C1:=TO_CHAR(N1)||'TEST';END;9.PL/SQL中的语句PL/SQL块中每一行一条语句,并且必须以分号“;”结束。变量或常量说明语句、变量赋值语句、CASE语句和IF语句、各种循环语句、数据处理语句SIDU、事务处理语句、DBMS_OUTPUT.PUT_LINE(字符串)、游标语句等。COMMIT、ROLLBACKEXECUTEIMMEDIATE动态串SELECT…INTO变量名表|记录名FROM…每个块由若干语句组成。若干块组成程序。四、PL/SQL控制结构三种程序结构:顺序、选择和循环1.顺序结构顺序结构是指执行过程按所写程序的顺序执行。例1:DECLAREVVCHAR(20);SALNUMBER(4);BEGINSELECTLAST_NAMEINTOVVFROMEMPLOYEESWHEREEMPLOYEE_ID=201;DBMS_OUTPUT.PUT_LINE(VV);SAL:=10;END;例2:DECLAREJIDVARCHAR2(10):='AD_VP';JTITCHAR(30);BEGINSELECTJOB_TITLEINTOJTITFROMJOBSWHEREJOB_ID=JID;DBMS_OUTPUT.PUT_LINE(JTIT);END;说明:JID的类型与JOB_ID的类型要完全一致,且长度要一样。改为JIDCHAR(10)将出错。可改为:JIDJOBS.JOB_ID%TYPE:=‘AD_VP’;2.IF选择结构条件语句1语句2IF条件THEN语句序列;ENDIF;“条件”为逻辑表达式或关系表达式,“条件”为TRUE时执行“语句序列”,为FALSE时执行ENDIF后面的语句。IF条件THEN语句序列1ELSE语句序列2ENDIF;IF条件1THEN语句序列1ELSIF条件2THEN语句序列2ELSE语句序列3ENDIF;例1:DECLAREN1NUMBER:=11;N2NUMBER;BEGINIFN110THENN2:=N1+10;DBMS_OUTPUT.PUT_LINE(TO_CHAR(N2));ENDIF;END;例2:嵌套选择结构DECLAREN1NUMBER:=11;N2NUMBERDEFAULT10;BEGINIFN110THENIFN2N1THENN2:=N1+10;DBMS_OUTPUT.PUT_LINE(TO_CHAR(N2));ENDIF;ENDIF;END;说明:嵌套必须是完全嵌套,可以是任何选择结构IF_ENDIF、IF_ELSE_ENDIF等。例3:IF…THEN…ELSE结构DECLAREN1NUMBER:=9;N2NUMBER:=19;BEGINIFN110THENN2:=N2+10;ELSEN2:=N1*N1;ENDIF;DBMS_OUTPUT.PUT_LINE(TO_CHAR(n2));END;例4:IF…THEN…ELSIF…ENDIF结构DECLAREN1NUMBER:=10;N2NUMBER:=20;CCCHAR(20);C2DATE:=TO_DATE('1999-1-1','YYYY-MM-DD');BEGINDBMS_OUTPUT.PUT_LINE(TO_CHAR(C2));IFN110THENN2:=N1+10;ELSIFN1BETWEEN7AND12THENN2:=SQRT(N1)*2;ELSIFC2=DATE'1998-1-1'THENCC:=TO_CHAR(SYSDATE);ELSECC:='NORESULT';ENDIF;DBMS_OUTPUT.PUT_LINE(CC||''||TO_CHAR(N2));END;3.CASE选择结构CASE变量WHEN表达式1THEN语句序列1;WHEN表达式2THEN语句序列2;……WHEN表达式NTHEN语句序列N;[ELSE语句序列N+1;]ENDCASE说明:1.当“变量”的值与某个表达式值相同时,将执行相应的语句序列2.当变量与所有表达式不等时执行序列N+13.语句序列1到语句序列N+1中只能执行一个语句序列。例1:DECLAREC1CHAR(1):='F';N1NUMBER:=2;N2NUMBER:=35;NCNUMBER;BEGINNC:=ASCII(C1);CASENCWHENN2*N2THENN1:=N2*N2;DBMS_OUTPUT.PUT_LINE('N1='||TO_CHAR(N1));WHENN2+N2THENN1:=N2+N2;DBMS_OUTPUT.PUT_LINE('N1='||TO_CHAR(N1));ELSEDBMS_OUTPUT.PUT_LINE('N1='||TO_CHAR(N1));DBMS_OUTPUT.PUT_LINE('NC='||TO_CHAR(NC));ENDCASE;END;4.循环结构循环结构是指按照指定的逻辑条件循环执行一组命令。有三种循环:LOOP-EXIT-END;LOOP-EXIT-WHEN-END;WHILE-LOOP-END和FOR-IN-LOOP-END。条件语句序列当条件为真时,执行语句序列,直到条件为假。条件是任何合法的逻辑表达式或关系表达式。4.1LOOP-EXIT-END循环LOOP语句序列[EXIT]ENDLOOP说明:执行EXIT时从循环中退出,在条件语句中执行EXIT。该循环中,必须有EXIT,否则就会成为“死循环”。EXIT只能在循环。例1:计算1+2+3…+100DECLAREIINT:=1;SINT:=0;BEGINLOOPS:=S+I;IFI=100THENEXIT;ENDIF;I:=I+1;ENDLOOP;DBMS_OUTPUT.PUT_LINE(TO_CHAR(S));END;4.2LOOP-EXITWHEN-END循环LOOP语句序列EXITWITH条件--等价IF条件THENEXIT,可用在其它循环ENDLOOP例2:计算10!DECLAREIINT:=1;SINT:=1;BEGINLOOPS:=S*I;EXITWHENI=10;I:=I+1;ENDLOOP;DBMS_OUTPUT.PUT_LINE(TO_CHAR(S));END;4.3WHILE-LOOP-END循环WHILE条件LOOP每次循环前计算条语句序列;件,为TR

1 / 99
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功