![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
plsql
文章平均质量分 64
码三狼
孤独的旅行
展开
-
PLSQL入门与精通(第74章:视图的更新-监听器)
上次介绍了通过视图更新数据的通常的方式和限制条件。一般来说,通过视图进行数据更新(INSERT、UPDATE、DELETE),只要该视图是单纯的SELECT语句定义的视图即可。也就是说,如果是不汇总或数据被加工过而是直接显示数据的视图,一般可以通过该视图来更新数据。在这种情况下,在数据库侧,将针对视图的DML语句(INSERT、UPDATE、DELETE)自动转换成表的DML语句,来更新数据。但是,对于定义的复杂视图,DML语句无法在数据库侧转换成表的DML语句,因此会发生错误。这种情况下如果在数原创 2021-03-28 16:40:04 · 365 阅读 · 1 评论 -
PLSQL入门与精通(第73章:视图的更新)
本次我们讲解通过视图来更新数据的相关内容。视图本来是一个查询询的。假如通过视图可以直接对查询对象的数据进行的话,那么查询的对象和更新的对象都在一个视图里边的话,构建应用程序就变得简单了。Oracle就可以实现这个我们想要的功能。通过视图更新数据,有的时候是可以更新的,有的时候不能更新数据。通过视图更新数据是有前提条件的。如果不符合这个条件,原则上无法通过视图更新数据。但是,即使在这种情况下,我们也可以通过“INSTEADOF触发”的触发器,通过视图进行数据更新,这个是我们下一节要说明的内容。这原创 2021-03-28 11:12:31 · 679 阅读 · 1 评论 -
PLSQL入门与精通(第72章:LOGOFF触发器)
上一次我们介绍了登录触发器,本次我们介绍注销触发器。我们这里的注销指的是退出回话或者退出回话的意思。注销触发器是用户退出回话或者数据库数据库时启动的触发器。他是会话结束前的最后一步处理。登录触发器和注销触发器都是属于同一类别的触发器,他们有以下2个最大的差别:1.登录触发器在SYS用户下是不能被启动的,注销触发器在SYS用户下是可以被启动的。2.在登录触发器中,如果发生例外,例外没有处理的话,则无法登录,但是在注销触发器中发生未处理的例外的话,用户照样能够退出回话。首先,关于1.的部分,登原创 2021-03-28 00:35:09 · 208 阅读 · 1 评论 -
PLSQL入门与精通(第71章:数据库登录触发器)
上一次我们介绍了DDL触发器。使用DDL触发器,不管操作什么样的对象类型(表,视图等),都可以在CREATE、ALTER、DROP的时机执行某些处理。例如,执行的操作可以是保留DDL操作的历史记录、限制特定对象的删除等。从这次开始,我们介绍一下另外类型的的触发器:登录(Login)触发器和注销触发器。我么先介绍一下登录触发器。正如名字所示,这是登录数据库时启动的触发器。触发器的一般结构已经解说完毕,下面就以例子,解说一下登录触发器特有的部分。SQL> show user用户是“SYST原创 2021-03-27 10:54:55 · 194 阅读 · 0 评论 -
PLSQL入门与精通(第70章:复合触发器的例子:操作其他表)
上次解说了DDL触发器。DDL触发器是通过DDL文(CREATE、ALTER、DROP)启动的触发器,在触发器中,可以使用事件属性函数(ora_xxxx)获取DDL的事件和DDL操作的对象的信息的详细内容。上次介绍的例子是:为了防止误删除SCOTT.EMP表DDL触发器的例子。如果存在该触发器,SCOTT.EMP表就不会被删除。这次介绍一下DDL触发器的另外一个例子。这次在DDL触发器中可以操作其他的一张表。具体来说,就是在日志表中插入 DDL操作的历史记录。例如,谁、什么时候、哪个用户、操原创 2021-03-26 21:46:21 · 117 阅读 · 1 评论 -
PLSQL入门与精通(第69章:DDL触发器)
前两次我们解说了“复合触发器”。总结一下,复合触发器简单来说是将4种DML触发器(BEFORE的SQL文、BEFORE的行、AFTER的行、AFTER的SQL文)整理一块的东西。这些都属于DML触发器,是最常见的触发器,是DML语句(INSERT、UPDATE、DELETE)执行的时候自动启动的PL/SQL程序。但是,除了DML触发器之外其他种类的触发器也有很多。例如,“DDL语句”启动的触发器、在“登录”或“注销”数据库时启动的触发器、在某个“错误发生的时候”启动的触发器、在“启动”数据库、“停原创 2021-03-26 11:20:18 · 482 阅读 · 1 评论 -
PLSQL入门与精通(第68章:复合触发器的例子)
上一次介绍了复合触发器的语法。今天介绍一下复合触发器的应用例子。首先,简单的复习一下上次的内容。如果不是复合触发器,而是使用普通的触发器定义,如果在触发器之间共享变量,则需要使用使用包变量。这种情况下,需要在包里边定义变量,变量的使用要在各个触发器内用各自的形式去使用用的,代码比较分散,系统变得非常难以理解。这时候,如果使用复合触发器的话,无论是变量定义还是多个触发器定义,代码都在一个复合触发器内部,非常容易理解。我们介绍复合触发器的例子,分为2部分。一部分是简单例子,第二部分是实践的例子。★原创 2021-03-25 23:48:34 · 185 阅读 · 0 评论 -
PLSQL入门与精通(第67章:复合触发器的语法)
从这次开始介绍新课题:“复合触发器”。之前我们介绍过触发器了。触发器是在发生某个事件时自动启动的PL/SQL程序。根据事件的种类和触发器的时机有好几种触发器。一般来说,对于数据库的表的操作一般是DML文(INSERT,UPDATE,DELETE),DML文执行的时候自动启动的触发器最具有代表性。表的DML触发器可以分为以下4种・BEFORE的SQL文触发器・BEFORE的行触发器・AFTER的行触发器・AFTER的SQL文触发器“BEFORE”、“AFTER”的意思是触发器启动时机是DM原创 2021-03-25 21:14:00 · 171 阅读 · 0 评论 -
PLSQL入门与精通(第57章:自治事务结合触发器保留历史的操作记录)
上次介绍了“自治事务管理”的基本概念和例子:简单回顾一下吧。该功能可以从主事务中调用自主事务的子程序,该子程序内的处理的事务式独立进行的(COMMIT)。即使主事务被取消(ROLLBACK),自治性事务处理独自提交,不会因为主程序的取消而被取消。这个功能在需要保留所有记录,以备审计的时候很方便。我们用自治事务和数据库触发器结合来举例说明。一个测试用的表,在对该表进行UPDATE的时候,需要将“何时、谁、哪一列、做了怎样的操作”等详细情报,要记录到审计表里。让我们开始吧:首先,制作测试用表(T原创 2021-03-14 18:17:09 · 180 阅读 · 0 评论 -
PLSQL入门与精通(第56章:子程序里的自治事务处理)
这次介绍一下“自治事物”相关内容。所谓“自治事物”,就是自己的子程序内部自行管理事务,和调用方的事务无关。也就是在一系列长处理中一部分处理进行自己的独立的事务管理。即使主交易被回滚,子处理的部分是作为独立的处理进行管理的,与原来的处理是分开的。我们用简单的例子来演示一下吧。首先要准备一张名为“TEST01表”的简单的表。针对这个表进行4行INSERT处理,其中途中的2行用自治事务来进行插入。并且,进行ROLLBACK的话,4行中只有自治事务的那2行INSERT的有效,其他2行处理可以取消。S原创 2021-03-14 17:23:39 · 266 阅读 · 0 评论 -
PLSQL入门与精通(第55章:通过包和角色简化权限管理流程)
上次说了,执行者权限过程需要很细的权限管理,这样有对系统安全是有小的。但是也很复杂,本次在简化安全管理方面,进行详细说明。这个可以使用包的特性,简化管理。首先让我们看一下不使用PL/SQL包的例子:例如,如果有如下安全管理的要求:用户1(SELECT USER):只拥有对SCOTT.EMP表的SELECT权限用户2(UPDATE USER):拥有对SCOTT.EMP表的SELECT权限,也需要UPDATE权限。–例子开始–SQL> show userSYSTEM --需要管理员用户–原创 2021-03-14 16:36:47 · 248 阅读 · 0 评论 -
PLSQL入门与精通(第54章:执行者权限的细节问题)
这次,我们继续关注执行者权限过程的另一个细节,即“执行者的权限”所执行的内容,进行进一步解释。例如,如果在执行权限的过程中引用的表中明确指定了模式(用户),会是什么情况呢?具体来说,在程序内不是“EMP”,而是“SCOTT.EMP”的时候,会怎么样呢。这种情况下,即使存储过程是执行者权限,该过程制定了明确的用户的前提下,该表不是执行者的模式,而是SCOTT模式的EMP表。但是,与定义者权限不同,执行者需要对该表的特定的权限。因为执行者权限过程是由执行者的权限执行的。“EMP”表没有指定用户的话,没有原创 2021-03-14 15:34:58 · 136 阅读 · 0 评论 -
PLSQL入门与精通(第53章:执行者权限)
上次解说了定义者权限(默认状态)。总结一下:定义者权限的程序在定义者的权限和模式中执行的。上次的例子,用户ALLEN执行用户SCOTT的过程(PROC1)时,在那个过程中参照的EMP表不是作为执行者的ALLEN的EMP表,而是定义者的SCOTT的EMP表。如果想要让用户ALLEN执行户SCOTT的过程(PROC1),参照的是执行者ALLEN的EMP表的话,可以将那个程序设为“执行者权限”。以下就是队一行的方法:(决定执行者权限的方法)。首先,PROC1过程的定义者和上次一样都是SCOTT,所以在SC原创 2021-03-14 14:47:04 · 124 阅读 · 0 评论 -
PLSQL入门与精通(第52章:定义者权限)
今天介绍一下关于定义者权限和执行者权限的一些知识内容。PL/SQL的程序、函数、包有“定义者权限”或“执行者权限”两种权限的区别。默认为“定义权限”。“定义者权限”(默认)的定义的存储过程,不管是哪个用户去执行那个存储过程,都会在“定义者的权限和模式”中执行的(即与执行者无关)。例如,SCOTT数据库用户有一个PROC1程序程序,这个程序对EMP表和EMP表进行SELECT查询。下边是具体的例子内容,因为这个过程没有做任何特殊的设置,所以这个存储过程默认的是“定义者权限”。–例子开始–SQL&g原创 2021-03-14 12:35:06 · 166 阅读 · 0 评论 -
PLSQL入门与精通(第51章:用PLSQL定制小工具脚本)
我们在调查和开发中,如何挺高开发效率,是经常遇到的问题。本次我们关于使用plsql制作自己想要的工具,从而提高作业效率,举例说明。假如,写程序时,必须事先掌握表中的键(主键、外部键)等的情报。如果手头没有表定义的文档,或者没有什么方便的工具,需要自己查询数据,这很麻烦。例如,在USER_CONSTRAINTS这个系统提供的视图中,可以知道表名称和类型。通过USER_CONS_COLUMNS这个系统视图,可以知道列的名称和情报。假如有外键约束的话,还想知道知道外键所参照的父表的名字和父键,必须按照如原创 2021-03-14 12:04:06 · 419 阅读 · 0 评论 -
PLSQL入门与精通(第50章:读文件)
接着上次,我们针对文件读进行详细解释。假如,我们用上次的文件test.txt(DATA_PUMP_DIR目录),把里边的内容读入并在显示到画面上,这里我们还要用到使用UTL_FILE包。代码如下:SQL>SET SERVEROUT ON --SQL*Plus的画面输出有效SQL> DECLARE2 /文件句柄的声明/3 FH UTL_FILE.FILE_TYPE;4 /声明变量,以存储已读取行的内容/5 V_LINE VARCHAR2(32767);6 –原创 2021-03-14 09:59:12 · 215 阅读 · 0 评论 -
PLSQL入门与精通(第49章:写文件)
本次接着上次文件写入的例子,进行详细解释。我们需要往test.txt这个文件里边写入2行:--------------------你好。您好吗?--------------------代码如下:SQL> DECLARE2 /文件句柄的声明/3 FH UTL_FILE.FILE_TYPE;4 –5 BEGIN6 /文件打开⇒获取文件句柄/7 FH := UTL_FILE.FOPEN(‘DATA_PUMP_DIR’,‘test.txt’,‘W’);8原创 2021-03-14 09:30:57 · 184 阅读 · 0 评论 -
PLSQL入门与精通(第48章:文件读写的包UTL_FILE的简介)
从本次开始为大家解说文件的读写方法,PLSQL中文的读写用的是UTL FILE包。PLSQL中把普通的plsql逻辑实现比较麻烦的地方,并且需要 经常用到的功能,做成一个公共包,以供大家使用,非常方便。UTL FILE包是Oracle数据库中标准的包。这种包装叫做内部包。通过使用内部包,可以很简单的实现通常PL/SQL不容易实现的功能。以下是写文件的简单例子(目前还无法执行)SQL> DECLARE2 FH UTL_FILE.FILE_TYPE;3 BEGIN4 FH := UTL_F原创 2021-03-14 09:02:01 · 234 阅读 · 0 评论 -
PLSQL入门与精通(第47章:动态SQL的变量绑定)
这次就动态SQL中的绑定变量的使用进行说明。这次内容和性能相关。首先,让我们看一个不使用绑定变量的动态SQL的例子:<情况1:动态的SQL的变量值作为连续字符串的情况>SQL> CREATE OR REPLACE PROCEDURE GET_ENAME ( P_ID IN NUMBER,2 P_NAME OUT VARCHAR2)3 IS4 V_NAME EMP.ENAME%TYPE;5 BEGIN6 //7 --动态SQL:获取指定员工编号的员工名称8原创 2021-03-13 15:23:47 · 806 阅读 · 0 评论 -
PLSQL入门与精通(第38章:DMLSQL语句触发器和行触发器的语法和例子)
上次简单的解释了一下DML触发器的特点:DML触发器有全表触发器和行触发器,全表触发器针对的是整个DML语句,行触发器对DML操作的每一行数据。这次详细说明一下DML触发器的语法。首先是“全表触发器”最低限度的语法:<全表触发器定义语法>1 CREATE OR REPLACE TRIGGER 触发名2 时机3 事件4 ON 表名称5 无名PL/SQL块解释如下:・第2行的时机指定“BEFORE”或“AFTER”。如果是BEFORE,则在DML处理之前启动触发器,如果是AFTER,则在原创 2021-03-05 13:28:39 · 247 阅读 · 1 评论 -
PLSQL入门与精通(第37章:触发器分类以及DML触发器)
上次就触发器进行了简答解释:触发器是指通过某些事件自动启动或者触发的程序。本次针对触发器种类进行简单的说明,并对其中最常用的一种进行详细说明。首先触发器大体分为3大类:1.DML触发2.DDL触发器3.其他最常用的的是“DML触发器”:就是对特定表进行DML操作(INSERT、UPDATE、DELETE等)时启动的触发器。接下来是“DDL触发器”:这是针对DDL操作(CREATE、ALTER、DROP等)启动的触发器。另外,作为“其他”:以上2类以外的归为一类:譬如:・登录或注销数据库时启原创 2021-03-04 19:12:38 · 298 阅读 · 1 评论 -
PLSQL入门与精通(第35章:包实体部分的初始化)
在第33回中,虽然包装的构造只有规格部,但是例外的是,执行部可以在包装主体的最后记述,那个话将成为其他的机会。我这次想说那个。包实体部分的执行部,同一个会话中第一次调用包时会自动执行一次的执行部,后边再调用改包不会继续执行该执行部。请看例子:<1.包申明部>SQL> CREATE OR REPLACE PACKAGE PAC12 IS3 —第一次调用此包的日期和时间存放的变量45 FirstCall DATE;6 END;7 /包已创建。【上原创 2021-03-03 19:14:22 · 343 阅读 · 1 评论 -
PLSQL入门与精通(第32章:在包里边自定义异常)
这次说明PL/SQL包的异常定义。在PL/SQL中,为了处理错误,经常使用异常(例外)名记述例外处理程序。对于常见的错误,例外名是预先定义好的(这被称为预定义例外),程序里边会使用这个定义好的例外名。但是,有些错误是事先未定义的例外,这时候可以在申明部中自行定义例外名称,同时需要定义一个系统错误编号与之相对应。这是所谓的用户定义异常(例外)。自定义异常语法<<声明部>>–例外名称声明例外名 EXCEPTION;–例外名与系统错误编号的对应PRAGMA EXCEPT原创 2021-03-03 09:23:59 · 223 阅读 · 0 评论 -
PLSQL入门与精通(第31章:包常量)
我们在开发中经常会用到常量。常量表示不变的定值,他与变量不同不能更改。plsql中通过包,来定义常量。把不变的值作为常量定义,程序中直接使用。如果需要修改只需要修改定义的地方既可以。程序维护就容易了。譬如:费率通常是固定的一个值,譬如是5%。SQL>CREATE OR REPLACE FUCTION FUNK_税收(P_SUISHOU NUMBER)2 RETURN NUMBER3 IS4 SUILV CONSTANT NUMBER:=5;–在本地声明部声明常量5 BEG原创 2021-03-03 09:05:22 · 217 阅读 · 0 评论 -
PLSQL入门与精通(第30章,包变量,会话级别的变量)
上次介绍了使用包进行过程或者函数的重载:也就是参数不同,可以定义名字相同的子程序(程序、函数)。本章继续介绍包的例外的可以实现的功能:“包变量的持久性”功能。简单来首就是,在包中声明的变量,赋给他的值将在会话期间一致保持。例如,向PAC1包装的申明部定义A这个变量。CREATE OR REPLACE PACKAGE PAC1ISA NUMBER;END;这里的变量A在PAC1包装的申明部已声明,用户或外部应用程序可以直接参照使用这个变量PAC1.A。如果在无名的PL/SQL块中,把10赋给原创 2021-03-02 09:48:09 · 229 阅读 · 0 评论 -
PLSQL入门与精通(第29章:利用包进行函数的重载)
包装不仅仅具有把过程和函数打包的功能,还有其他只有通过包能实现的功能:首先解释第一个功能:制作多个同名的过程函数。例如,有些函数,内容相同,但是参数的类型和数量不同,就可以用包来实现。这个定义称为重载。名字相同,参数的数量或者参数数据类型的不同,或者函数返回的数据类型不同来区分不同的函数。系统根据这些不同的参数,在实际调用时的时候根据设计参数,自动判断具体调用了哪个函数,然后执行对应的代码。以下是简单的例子:<包申明部>SQL> CREATE OR REPLACE PACKA原创 2021-03-02 09:20:12 · 166 阅读 · 0 评论 -
PLSQL入门与精通(第28章:包的申明和定义详细解释)
上次针对包进行了简单的说明,这次进行深入介绍。正如上回解说的那样,包是将过程、函数、变量等打包一块的内容,分为申明和定义两个部分。(实际上只有申明没有定义的包存在,其他时间介绍。)申明部是“总结了用户和应用程序可以使用的东西或者接口”。与此相对,定义中记述的内容不能由用户或应用程序直接使用的内容。实现了接口与实现分离的作用。申明部中记述的过程和函数的接口,对于用户或者调用者来看所需的接口的信息。因此,申明部不会写把程序和功能实现逻辑完全写出来。申明部记述的过程和函数的接口的信息,也就是说,程序原创 2021-03-01 20:16:54 · 213 阅读 · 0 评论 -
PLSQL入门与精通(第27章:包)
从这章开始,我们针对package(包)进行说明。从此进入高级篇。我们的高级篇将对包、触发器、其他函数等进行解说。首先是包:包是指吧一些东西总结在一起的意思。PL/SQL的包可以包含过程和函数,甚至变量。好处:包会装入存储器中,所以如果将相关的过程、函数放到包里,性能上会好些。例子:创建PAC1包,包里边包含PROC1的程序,吧一个P1的参数打印到SQL*Plus画面上。<首先创建包体,或者叫包的申明>SQL> CREATE PACKAGE PAC12 IS3 PROC原创 2021-03-01 10:21:13 · 373 阅读 · 0 评论 -
PLSQL入门与精通(第25章:利用函数分类统计)
上次说明了SQL调用存储函数的条件,实际上,在什么情况下会从SQL中调用存储函数呢?一言以蔽之,可以说是为了简化复杂的查询(SELECT),从SELECT文中调用存储函数的情况。与DML(INSERT,UPDATE,DELETE)不同,SELECT文多为复杂的语句,有时难以写出符合要求的SELECT文。这种时候,如果使用函数的功能的话,根据情况,可以简单地写SELECT文。例如,将销售额表的销售额按“区分”进行合计的情况。销售表上没有“区分”这一列,这一分类是根据每个销售内容的不同而决定的。在这原创 2021-03-01 09:51:29 · 527 阅读 · 0 评论 -
PLSQL入门与精通(第24章,SQL中使用函数的前提)
上次,我们看到了存储函数可以像SQL函数那样在SQL语句中使用(呼出)。但是,上一个函数在INSERT语句中是正常使用的,但在SELECT语句中使用时出错了。像这样,从SQL语句调用用户定义的函数时,其函数定义有很多条件。这个条件是这次的主题。详细内容记载在PL/SQL语言的手册中,将简单易懂地说明其精髓。【条件1】首先,函数参数的数据类型和RETURN数据类型必须是表列的数据类型。也就是说,需要NUMBER、VARCHAR2、DATE等非常普通的表列的数据类型。该函数不能是特殊数据类型:原创 2021-02-28 11:33:48 · 170 阅读 · 0 评论 -
PLSQL入门与精通(第22章:函数语法)
上次就存储和函数的概要进行了解说。函数是有返回值,呼叫的方法直接可以作为变量带入,这2点和过程有很大的不同。从这次开始,我们就来解说函数的基本语法构成。首先是存储函数的制作语法,与过程的制作语法没有太大的变化。以下主要说明与过程的不同之处:<<存储函数的创建语法>>1 CERATE OR REPLACE FUCTION 功能名称(临时参数名称 模式 数据型,…)2 RETURNN 数据型3 IS4 宣言部5 BEGIN6 执行部7 RETURN原创 2021-02-28 10:34:37 · 281 阅读 · 0 评论 -
PLSQL入门与精通(第21章:函数的基本概念)
从这次开始以存储函数为主题。首先先说概要。详细的语法说明下次进行。存储过程和函数都是程序,有的时候有本质上的区别。最大的差别就是:函数有返回值要返回到调用方的值,在存储过程中也可以使用OUT的参数,但如果是函数,则不通过参数直接返回数值。使用函数直接可以在语句中记述值的地方使用,譬如写在代入句(:=)的右边。或者,IF语句等条件式的值、SELECT语句的SELECT句、WERE句、INSERT语句的VALES句、UPDATE语句的SET句、过程的参数等,可以记述数值的地方有很多,但都可以直接用函原创 2021-02-28 10:06:07 · 128 阅读 · 0 评论 -
PLSQL入门与精通(第19章,Sequence的不连续性)
第19回“存储过程事例2(保证连续性的发番处理)”前篇 2012.05.07 推特 这次与其说是过程的事例,不如说主要介绍连续号码的发号方法的定式,介绍将其存储过程化的方法。实际上,这是常见的过程事例。 暂且从上次的话开始继续着,不过,没有读上一次的人也只读这一次也没关系。上次,作为存储过程的例子,说明了订单登记处理(PROC订单受理过程)。内容是,检查该产品的库存数,如果不是库存不足的话就登记订单,原创 2021-02-27 17:40:16 · 327 阅读 · 0 评论 -
PLSqL入门与精通(第18章:存储过程具体例子)
这次解说一下存储过程的具体例子。存储过程是描述一系列处理的命名的PL/SQL块。可以用在各种场合。本次简介一个具体例子:例如,在某个公司的业务中,管理着产品的库存。因此,有“库存”的表。SQL CREATE TABLE库存(2 产品名称 VARCHAR2(20)PRIMARY KEY,3 库存数 NUMBER);表创建成功。数据登记:电视的库存数为10,收音机的库存数为5。SQL>INSERT INTO 库存 VALUES('电视’,10);创建了一行。SQL>INSER原创 2021-02-27 11:29:31 · 479 阅读 · 0 评论 -
PLSQL入门与精通(第17章:存储过程的基本语法结构)
上次解说了存储过程的基本概念:在无名PL/SQL块上命名并存储在数据库中就是存储过程。从这次开始,我将对存储过程的语法进行解说。首先整体结构。<<存储过程创建的基本语法>>1 CERATE OR REPLACE PROCEDURE 过程名称(临时参数名称模式数据类型,…)2 IS3 宣言部4 BEGIN5 执行部6 EXCEPTION7 例外处理部8 END;解释:●过程创建的关键字第1行,要创建存储过程,请使用CREATE PROC原创 2021-02-27 11:02:32 · 497 阅读 · 0 评论 -
PLSQL入门到精通(第16章:存储过程基本概念)
到现在为止(第1章~第15章)使用了的PL/SQL的例子程序,全部是「无名块」的形式。“无名块”是指从客户端程序向Oracle数据库服务器发送的PL/SQL块。客户端程序是用户开发的应用程序。总之,从客户端向Oracle数据库服务器发送的PL/SQL块是“无名块”。正如无名方块这个词一样,这个块没有名字。当Oracle数据库从客户端接收到块时,将执行块内的处理,并将结果返回给客户端。在这一系列过程中,该PL/SQL块不需要有名称。因此,从客户发送到服务器的PL/SQL块没有起到名字,在这个意义原创 2021-02-27 10:50:03 · 473 阅读 · 0 评论 -
PLSQL入门于精通(第15章:键值数组的键值存在性检查)
这次就标号数组(或者叫键值数组)的键的是否存在的检查,进行说明。标号数组可以新增加键,并给予赋值,同时将该键的区域分配给存储器。也就是说,通过新增加键值,可以轻松扩展领域保存数值。那么,用新的键代入来扩展区域的话,如果使用不存在的的键,会发生错误。例子:<使用不存在的键访问而导致错误的示例>SQL> connect scott/tiger已连接。SQL> SET SERVEROUTPUT ONSQL> DECLARE2 TYPE A_TYPE IS TABL原创 2021-02-27 10:37:27 · 230 阅读 · 0 评论 -
PLSQL入门到精通(第14章,标号数组的排序)
本次就联合组合(PL/SQL表、索引附表)的属性进行说明。下面介绍使用这些属性,按键值顺序排序并取出值的方法。请看下面的例子:SQL> SET SERVEROUTPUT ONSQL> L1 DECLARE2 TYPE A_TYPE IS TABLE OF VARCHAR2(20) INDEX BY BINARY_INTEGER;3 A A_TYPE;4 I BINARY_INTEGER;5 BEGIN6 A(5):=‘五’;7 A(-3):=“负原创 2021-02-27 09:51:57 · 574 阅读 · 0 评论 -
PLSQL入门到精通(第13章:集合类型和变量)
这次就和上次的记录变量一样,作为构造复杂的变量,对集合变量进行说明。集合变量是可以存储多个数据类型值的变量。数据类型可以是基本简单的数据类型,如NUMBER,也可以是用户定义的记录类型等复杂的数据类型。作为集合变量的一个应用示例,游表关闭后,无法再次提取游标得值的时候,可以在游标处理中使用集合变量保存数据。否则的话,反复使用游标数据的话,就需要把游标暂时关闭,然后重新打开,反复读到需要的数据为止,这是非常不合理的逻辑。这种时候,如果使用集合鼻梁的话,可以优雅地解决该问题。也就是说,如果将提原创 2021-02-23 18:06:24 · 537 阅读 · 0 评论 -
PLSQL入门与精通(第12章:自定义记录类型)
前边简单解释了一下记录变量,这次详细解说一下记录变量。到上次为止,已经详细解说了6次明示光标的处理。回顾之前的内容:・第3章:基本变量的声明・第4章:使用%TYPE进行变量声明・第8章:游标处理,使用%ROWTYPE进行记录变量的声明如上所述,在第8章中,我们对使用%ROWTYPE的记录变量的定义方法进行了说明,这次将更详细地说明记录变量。也就是说,不使用%ROWTYPE,而是自己声明记录类型,然后再声明记录变量的方法。%ROWTYPE是根据游标和表的定义,定义与该行相同的记录类型时使用的原创 2021-02-23 13:19:39 · 334 阅读 · 1 评论