PLSQL基础.docx

上传人:b****1 文档编号:14554301 上传时间:2023-06-24 格式:DOCX 页数:41 大小:43.71KB
下载 相关 举报
PLSQL基础.docx_第1页
第1页 / 共41页
PLSQL基础.docx_第2页
第2页 / 共41页
PLSQL基础.docx_第3页
第3页 / 共41页
PLSQL基础.docx_第4页
第4页 / 共41页
PLSQL基础.docx_第5页
第5页 / 共41页
PLSQL基础.docx_第6页
第6页 / 共41页
PLSQL基础.docx_第7页
第7页 / 共41页
PLSQL基础.docx_第8页
第8页 / 共41页
PLSQL基础.docx_第9页
第9页 / 共41页
PLSQL基础.docx_第10页
第10页 / 共41页
PLSQL基础.docx_第11页
第11页 / 共41页
PLSQL基础.docx_第12页
第12页 / 共41页
PLSQL基础.docx_第13页
第13页 / 共41页
PLSQL基础.docx_第14页
第14页 / 共41页
PLSQL基础.docx_第15页
第15页 / 共41页
PLSQL基础.docx_第16页
第16页 / 共41页
PLSQL基础.docx_第17页
第17页 / 共41页
PLSQL基础.docx_第18页
第18页 / 共41页
PLSQL基础.docx_第19页
第19页 / 共41页
PLSQL基础.docx_第20页
第20页 / 共41页
亲,该文档总共41页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

PLSQL基础.docx

《PLSQL基础.docx》由会员分享,可在线阅读,更多相关《PLSQL基础.docx(41页珍藏版)》请在冰点文库上搜索。

PLSQL基础.docx

PLSQL基础

----第一章PL/SQL简介----

1.Oracle应用编辑方法概览

   1)Pro*C/C++/...:

C语言和数据库打交道的方法,比OCI更常用;

   2)ODBC

   3)OCI:

C语言和数据库打交道的方法,和Pro*C很相似,更底层,很少用只适合ORACLE;

   4)SQLJ:

很新的一种用Java访问Oracle数据库的方法,会的人不多;

   5)JDBC

   6)PL/SQL:

存储在数据库内运行,其他方法为在数据库外对数据库访问,只适合ORACLE;

2.PL/SQL

   1)PL/SQL(Proceduallanguage/SQL)是在标准SQL的基础上增加了过程化处理的语言;

   2)Oracle客户端工具访问Oracle服务器的操作语言;

   3)Oracle对SQL的扩充;

4.PL/SQL的优缺点

   优点:

1)结构化模块化编程,不是面向对象;

      2)良好的可移植性(不管Oracle运行在何种操作系统);

      3)良好的可维护性(编译通过后存储在数据库里);

      4)提升系统性能;

   缺点1)不便于向异构数据库移植应用程序(只能用于Oracle);

5.SQL与PL/SQL的区别

   SQL:

1)第四代语言(智能语言);

      2)做什么,不管怎么做;

      3)缺少过程与控制语句;

      4)无算法

   PL/SQL:

(相对SQL扩展部分)

      1)扩展变量和类型;

      2)扩展控制结构;

      3)扩展过程与函数;

      4)扩展对象类型与方法

----第二章PL/SQL程序结构----

1.PL/SQL块

   1)申明部分,DECLARE(如果语句不需要声明任何变量,可以不写);

   2)执行部分,BEGIN<--------->END;

   3)异常处理,EXCEPTION(可以没有);

2.PL/SQL开发环境

   可以运用任何纯文本的编辑器编辑,例如:

VI

3.PL/SQL字符集

   字母:

A-Z,a-z;

   数字:

0-9;

   空白:

TAB,SPACE,回车;

   符号:

+_)(*&^%$#@!

~;

   PL/SQL对大小写不敏感(注意)

   

4.标识符命名规则答:

   1)字母开头;

   2)后跟任意的非空格字符 数字 货币符号($) 下划线(_)或#;

   3)最大长度为30个字符(八个字符左右最合适);

    用来给对象命名(潜规则):

   变量:

以v_开头

   游标:

以c_开头

   类型:

   子程序:

   

5.分界符

   1)运算符 +-*/**(指数操作符)

   2)关系  =(相当于JAVA中的==) > < <> !

= ~= ^= <= >= 

   3)赋值  :

=例子a:

=2   

   4)连接   ||例:

'abc'||123

   5)标号    <<需要的标记>>

   6)注释    --(单行)  /*  */(段落)

   7)替代   

6.文字

   1)字符型文字(字符串)

      'tom'(单引号)

      'tom''spen' ''为2个单引号(标识转义)为tom'spen

   2)数字型

      123-4+5609.01.23E59.8e-3

   3)布尔型

      TRUEFALSENULL

7.变量声明

   语法Var_name[CONSTANT](标识常量,可选)type[NOTNULL](标识为not-null后必须在后面初始化)[:

=value](赋值,初始化);

      Var_name[CONSTANT](标识常量,可选)type[NOTNULL][defaultvalue](赋值,初始化)等同于上面的语句;

   注:

1)申明时可以有默认值也可以没有;

      2)如有[CONSTANT][NOTNULL],变量一定要有一个初始值;

      3)赋值语句为“:

=”;

      4)变量可以认为是数据库里一个字段;

      5)规定没有初始化的变量为NULL;

----第三章变量与数据类型----

1.数据类型

   1)标量型:

数字型(BINARY_INTEGER,NUMBER)(DEC,FLOAT,REAL...NUMBER的子类型)、

               NUMBER(P,S)P:

精度:

整个的有效数位(从左边开始第一个不为0的数字起)   

                        S:

刻度,可选(小数点后面的保留位数)

               BINARY_INTEGER:

保存整数.和NUMBER的底层的保存方式不同,

                  BINARY_INTEGER为2进制保存,NUMBER需要考虑其他东西不是2进制方式

                  BINARY_INTEGER之间做加法效率快而NUMBER要先转换2进制再计算

               单纯的计算---->BINARY_INTEGER考虑和表中其他数据的交互的话一般------->NUMBER

         字符型、CHARVARCHARVARCHAR2STRING

               LONG

               一般CHARVARCHAR2就够了

               CHAR定长(例子:

CHAR(5)如果不够5个字符的话就会用空白填充),可以不带长度规定(默认为1)

               VARCHAR2变长((VARCHAR2(5)标识最长可以保存5个字符)后面的长度规定必须要有

         布尔型、BOOLEAN

         日期型;DATE(后增加TIMESTAMP(比DATE更精细点(精确到秒) INTERVAL)一般用DATE

   2)组合型:

RECORD(常用)、TABLE(常用)、VARRAY(较少用)

   3)参考型:

REFCURSOR(游标)、REFobject_type

   4)LOB(LargeObject)

2.%TYPE

   [变量名][表名.字段名][%TYPE]

   表示变量具有与数据库的表中某一字段相同的类型

   例:

v_FirstNames_emp.first_name%TYPE;

3.RECORD类型

   TYPEt_empISRECORD(            /*其中TYPE,IS,RECORD为关键字,record_name为变量名称*/

      field1type[NOTNULL][:

=expr1],      /*每个等价的成员间用逗号分隔*/

      field2type[NOTNULL][:

=expr2],      /*如果一个字段限定NOTNULL,那么它必须拥有一个初始值*/

      ...                        /*所有没有初始化的字段都会初始为NULL*/

      fieldntype[NOTNULL][:

=exprn]

   );

4.%ROWTYPE

   返回一个基于数据库定义的类型

   DECLAREv_emps_emp%ROWTYPE;      /*s_emp为表的名字*/

   注:

与RECORD类型中定一个record相比,一步就完成,

         而RECORD类型中定义分二步:

a.所有的成员变量都要申明;b.实例化变量;

   可以代替RECORD类型.

5.TABLE类型

   TYPEtabletypeISTABLEOFtype(类型名,要保存成的数据类型)INDEXBYBINARY_INTEGER;

   例:

DECLARE

         TYPEt_empISTABLEOFs_emp%ROWTYPEINDEXBYBINARY_INTERGER;

         v_empt_emp;

      BEGIN

         SELECT*INTOv_emp(100)FROMs_empWHEREid=1;

         SELECT*INTOv_emp(200)FROMs_empWHEREid=2;

            DBMS_OUTPUT.PUT_LINE(v_emp(200).id||''||v_emp(200).lastname||''||v_emp(200).salary);

      END;

   注:

1)id(索引)的数目的限制由BINARY_INTEGER的范围决定(-2147483647<----->2147483647);

      2)TABLE类型与map类似;

      3)表中的元素可以是复合类型;

      4)KEY没有必要是顺序的;

      5)当数据被插入表中的时候,表所需的空间就被分配了;

6.变量的作用域和可见性   <>

   1)执行块里可以嵌入执行块;

   2)里层执行块的变量对外层不可见;

   3)里层执行块对外层执行块变量的修改会影响外层块变量的值

      (在此里层,对其他里层则不影响,想要不影响此里层的话可以使用标号标注外层);

----第四章PL/SQL控制语句----

1.条件语句

   IFboolean_expression1(条件1)THEN

      ...

      ELSIFboolean_expression2(条件2)THEN   /*注意是ELSIF,而不是ELSEIF*/

         ...                        /*ELSE语句(ELSIF)不是必须的,但ENDIF;是必须的*/

      ELSE

         ...

   ENDIF;

   

   注意:

1)有多个BOOLEAN表达式时候 AND(与),OR(或),NOT(非)

      2)条件为FALSE与TRUE相同;

2.循环语句

   1)Loop循环

      Loop

          ...(循环体)

          IFboolean_expr(条件)THEN      /*加条件语句,当满足条件时候退出循环*/

            EXIT;               /*EXITWHENboolean_expr*/

         ENDIF;             

      ENDLOOP;

   2)WHILE循环

      WHILEboolean_expr(条件)LOOP      /*boolean_expr循环条件*/

         ...(循环体)

        ENDLOOP;

   3)FOR循环

      FORloop_counterIN[REVERSE]low_bound..high_boundLOOP      

         /*范围中间用2个点表示从low_blound到high_bound*/

         ...(循环体)

      ENDLOOP;

      例:

   FORv_cntIN1..5LOOP

            SELECT*INTOv_empFROMs_empWHEREid=v_cnt;

      注:

a.加上REVERSE关键字表示递减,从结束边界到起始边界,递减步长为一;

          不加为递增,从起始边界到结束边界,递减步长为一;

         b.low_blound起始边界;high_bound结束边界;

3.GOTO语句

   GOTOlabel_name;

   1)只能由内部块跳往外部块;

   2)设置标签:

<<>> 

   3)示例:

LOOP

            ...

            IFD%ROWCOUNT=50THEN

               GOTOl_close;

            ENDIF;

            ...

         ENDLOOP;

         <>:

...

4.NULL语句

   在语句块中加空语句,用于补充语句的完整性。

   例:

IFboolean_exprTHEN

         ...

         ELSENULL;

      ENDIF;

5.SQLinPL/SQL

   1)只有DMLSQL和transactionControlSQL可以直接在PL/SQL中使用;

   2)PL/SQL中的动态SQL可以使用所有有效的SQL语句,包括DDL;

   3)动态SQL在运行时动态生成SQL语句,然后分析语句并执行;

   4)PL/SQL中的动态SQL有两种:

本地动态SQL和DBMS_SQL包;

----第五章PL/SQL游标----

1.游标(CURSOR)

   游标是从数据表中提取出来的数据,以临时表的形式存放在内存中,在游标中有一个数

   据指针,在初始状态下指向的是首记录,利用fetch语句可以移动该指针,从而对游标中的数

   据进行各种操作,然后将操作结果写回数据表中。

   1)分类:

   a)显式游标:

程序员可以操作控制,是针对select语句的,指向select语句的结束集

         b)隐式游标:

程序员不可控制,但可以有限制的应用

   2)作用:

用于处理查询语句的结果,提取多行数据集;

   3)使用步骤:

      a)声明游标:

         a.普通声明:

   DELCARE

                     v_emps_emp%ROWTYPE;

                     v_dids_dept.id%TYPE;

                     CURSORcur_empISselect*FROMs_empWHEREdept_id=v_did;    

                     /*CURSOR的内容必须是一条查询语句*/

         b.带参数声明明:

DELCARE         

                      CURSORc_emp(v_dids_emp.ID%TYPE)SELECT*FROMs_empWHEREdept_id=v_did;

      b)为查询打开游标:

         OPENcur_emp;   /*相当于执行select语句,且把执行结果存入CURSOR;

      c)从游标中取结果,存入PL/SQL变量中:

         a.FETCHcur_empINTOvar1,var2,...(变量名1,变量名2,.......);   /*变量的数量、类型、顺序要和Table中字段一致;*/

         b.FETCHcur_empINTOrecord_var(记录型变量名);

         注:

将值从CURSOR取出放入变量中,每FETCH一次取一条记录;

      d)关闭游标:

         CLOSEcur_emp;

      注:

a.游标使用后应该关闭;

         b.关闭后的游标不能FETCH和再次CLOSE;

         c.关闭游标相当于将内存中CURSOR的内容清空;

2.游标的属性

   游标名%属性名

   1)%FOUND:

是否有值;有则返回TRUE,否则返回FALSE;

   2)%NOTFOUND:

是否没有值;如果没有值则返回TRUE,否则返回FALSE;

   3)%ISOPEN:

是否是处于打开状态;处于打开状态就返回TRUE,否则返回FALSE;

   4)%ROWCOUNT:

CURSOR当前的记录号(当前游标的指针位移量,表示在此之前,游标所处理的数据量(多少条记录));

3.游标的FETCH循环

   1)   LOOPFETCH游标名INTO定义的变量

         EXITWHEN游标名%NOTFOUND;/*当游标没取道记录后退出要及时的做出判断*/

      ENDLOOP;

   2)   WHILE游标名%FOUNDLOOPFETCH游标名INTO定义的变量;

      ENDLOOP;

   3)   FOR保存数据的变量(不用事先定义,是根据游标声明的时候SELECT的类型来确定)

      IN游标名LOOP(FETCH游标名INTO...)

      (可以不用FETCH语句)

      ENDLOOP;

4.带参数的游标CURSOR

   DECLARE

      v_emps_emp%ROWTYPE

      CURSORcur_emp(p_did s_emp.dept_id%TYPE)IS   /*定义参数p_did的类型*/

         SELECT*FROMs_empWHEREdept_id=p_did

         FORUPDATEOFsalary;   /*FORUPDATEOFsalary;加行级锁,在我修改这些数据的时候,

                           *其他人无法修改数据,直到游标被CLOSE后*/

   BEGIN

      OPENcur_emp(31);      /*带的参数值31就是赋给参数p_did的*/   

      LOOP

         FETCHcur_empINTOv_emp;

         EXITWHENcur_emp%NOTFOUND;

         DBMS_OUTPUT.PUT_LINE(v_emp.id||' '||v_emp.first_name);

      ENDLOOP;

      CLOSEcur_emp;

   END

5.显式游标主要是用于对查询语句的处理,尤其是在查询结果为多条记录的情况下;

而对于非查询语句,如修改、删除操作,则由ORACLE系统自动地为这些操作设置游标并创建其工作区,这些由系统隐含创建的游标称为隐式游标,隐式游标的名字为SQL,这是由ORACLE系统定义的。

对于隐式游标的操作,如定义、打开、取值及关闭操作,都由ORACLE系统自动地完成,无需用户进行处理。

用户只能通过隐式游标的相关属性,来完成相应的操作。

在隐式游标的工作区中,所存放的数据是与用户自定义的显示游标无关的、最新处理的一条SQL语句所包含的数据。

格式调用为:

SQL%

 

注:

INSERT,UPDATE,DELETE,SELECT语句中不必明确定义游标。

 

隐式游标属性

 SQL%FOUND      布尔型属性,当最近一次读记录时成功返回,则值为true;

 SQL%NOTFOUND  布尔型属性,与%found相反;

 SQL%ROWCOUNT数字型属性,返回已从游标中读取得记录数;

 SQL%ISOPEN   布尔型属性,取值总是FALSE。

SQL命令执行完毕立即关闭隐式游标。

==========day2==========

----第六章HANDLEEXCEPTION----

1.异常

   分类:

1)ORACLE预定义,ORACLE公司对常见的异常都做了预定义

      2)自定义异常

2.用户自定义异常

   DECLARE

      ...

      e_TooManyStudentsEXCEPTION;      /*申明异常EXCEPTION关键字*/

      ...

   BEGIN

      ...

      RAISEe_TooManyStudents;         /*触发异常,抛出异常RAISE关键字*/

      ...

   EXCEPTION

      WHENe_TooManyStudentsTHEN      /*捕捉和处理异常*/

         ...(异常处理代码块)

  

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

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2