
plsql入门与精通
文章平均质量分 65
码三狼
孤独的旅行
展开
-
PLSQL入门与精通(第78章:递归调用)
大家知道“递归调用”吗?所谓递归调用,是指在程序中“自己调用自己”。递归调用有很多语言支持,但并不是所有语言都可以使用。例如,COBOL语言不能实现递归调用。当然PL/SQL语言是可以的实现递归调用的。一般情况下,重复(循环)相同的处理内部要进行相同某个处理时,可以进行递归调用,例如,作为例子,一个函数:求1到N的和。通常在程序中定义一个变量,循环使用该变量进行加算,直到N为止。例子如下:CREATE OR REPLACE FUNCTION FUNC1 ( N IN NUMBER) RETU原创 2021-04-04 12:31:39 · 647 阅读 · 0 评论 -
PLSQL入门与精通(第71章:数据库登录触发器)
上一次我们介绍了DDL触发器。使用DDL触发器,不管操作什么样的对象类型(表,视图等),都可以在CREATE、ALTER、DROP的时机执行某些处理。例如,执行的操作可以是保留DDL操作的历史记录、限制特定对象的删除等。从这次开始,我们介绍一下另外类型的的触发器:登录(Login)触发器和注销触发器。我么先介绍一下登录触发器。正如名字所示,这是登录数据库时启动的触发器。触发器的一般结构已经解说完毕,下面就以例子,解说一下登录触发器特有的部分。SQL> show user用户是“SYST原创 2021-03-27 10:54:55 · 240 阅读 · 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 · 148 阅读 · 1 评论 -
PLSQL入门与精通(第66章:批量绑定异常处理)
本次介绍一下“批量绑定”发生异常的时候的处理。使用数组数据对DML进行FORALL统一处理时,数据内容可能会违反制约等而导致的执行错误。这种情况下,FORALL处理失败后会全部被回滚。但是,发生错误的时候提示了一个简单的错误信息,具体时间数组中的哪个数据发生了什么样的错误是无法判断的。但是,实际上我们调查异常的时候,需要知道是哪条数据出什么样的错误了,系统也提供了相应的方法。我们准备一个出错的FORALL的例子:TEST01表中设定一些限制。先删除TEST01表。SQL> DROP TA原创 2021-03-25 09:17:25 · 384 阅读 · 0 评论 -
PLSQL入门与精通(第64章:批量绑定FORALL 不连续数组的用法)
我们继续解说批量绑定相关内容。本章针对是“FORALL语句中批量绑定变量的配列索引值是不连续做法”进行解释。在批量绑定中处理DML(INSERT、UPDAATE、DELETE)时,之前已经说明了FORALL的语法结构。但是之前介绍的FORALL句法只能使用配列的索引值是连续的情况。如果配列的索引不连续就会出错。FORALL语法中,配列不连续的时候语法结构如下:–配列索引是连续的时候—FORALL 索引变量 IN 下限值…上限值使用配列数组的一个DML语句;–配列索引是不连续的时候—FORAL原创 2021-03-24 22:09:25 · 225 阅读 · 0 评论 -
PLSQL入门与精通(第62章:批量绑定FETCH INTO COLLECT INTO)
上一次,我们说明了一下用SELECT BULK COLLECCT INTO的语句进行批量绑定的方式进行取得数据。本章节说明一下显示游标的FETCH INTO文的批量绑定方式:FETCH BULK COLLEC INTO。使用FETCH BULK COLLECCT INTO语句的话,可以把FETCH到的所有行一起放到结果集中,也成为了批量绑定方式。因此,比一行一行地FETCH,性能要好得多。接下来,我们分别就普通FETCH INTO文的处理和FETCH BULK COLLECCT INTO文的处理进行原创 2021-03-24 17:18:10 · 797 阅读 · 0 评论 -
PLSQL入门与精通(第61章:批量绑定SELECT BULK COLLECT INTO)
上次我们验证了批量绑定的速度非常快。用循环处理的话,50万行INSERT需要15秒,用批量绑定的方式仅仅是0.6秒的,快了20多倍,效果惊人。上一章说的是DML文的INSERT语句,如果是SELECT INTO和FETCH INTO该怎么做呢。今天我们解释一下SELECT INTO的批量绑定的用法。(下次解说FETCH INTO的批量绑定用法)如前所述,SELECT INTO文,只能返回1行结果,想将多行保存成数组时,如果使用SELECT INTO语句,必须对每一行的SELECT INTO语句进原创 2021-03-24 14:18:33 · 1015 阅读 · 0 评论 -
PLSQL入门与精通(第58章:外键约束错误触发的After行触发器)
本次介绍外键约束错误的时候,触发器执行的情况。大家都知道,操作数据库的时候,会发生外键约束错误,如果我们定义了AFTER行触发器的话,改行触发器在发生外键约束错误也会被触发执行的。这个细节需要注意。让我们回忆一下,触发器触发触发的过程:在一个DML文(例UPDATE)中更新多行时首先在第一行上启动BEFORE的行触发,接着更新行数据,,如果该行更新成功,则在该行上启动AFTER的行触发器,如果该行行触发器执行成功,则再启动下一个行的更新处理。以上处理反复执行。如果上述处理过程中,不管是原创 2021-03-23 19:12:00 · 465 阅读 · 0 评论 -
PLSQL入门与精通(第52章:定义者权限)
今天介绍一下关于定义者权限和执行者权限的一些知识内容。PL/SQL的程序、函数、包有“定义者权限”或“执行者权限”两种权限的区别。默认为“定义权限”。“定义者权限”(默认)的定义的存储过程,不管是哪个用户去执行那个存储过程,都会在“定义者的权限和模式”中执行的(即与执行者无关)。例如,SCOTT数据库用户有一个PROC1程序程序,这个程序对EMP表和EMP表进行SELECT查询。下边是具体的例子内容,因为这个过程没有做任何特殊的设置,所以这个存储过程默认的是“定义者权限”。–例子开始–SQL&g原创 2021-03-14 12:35:06 · 209 阅读 · 0 评论 -
PLSQL入门与精通(第46章:动态SQL返回回多行数据)
上一次介绍了动态SQL返回一行结果的语法结构。本次解说用动态SQL返回复数行的语法结构。首先动态SQL如果返回多行的时候,是不能用EXECUTE IMMEDIATE的,会发生异常。相反,通过使用光标变量,可以实现动态SQL。那么,在复习的意义上,确认通常嵌入的SQL方法,而不是动态SQL,然后说明动态SQL的情况。首先,使用显式光标可在普通嵌入的SQL中返回多行。(关于明示光标,在第7回~第11回中进行说明)请看以下情况1的例子。<外壳1嵌入的SQL显式光标处理>SQL>原创 2021-03-11 20:01:57 · 760 阅读 · 0 评论 -
PLSQL入门与精通(第46章:动态SQL返回多行的语法)
上一次介绍了动态SQL返回一行结果的语法结构。本次解说用动态SQL返回复数行的语法结构。首先动态SQL如果返回多行的时候,是不能用EXECUTE IMMEDIATE的,否则会发生异常。可以使用游标变量,实现动态SQL多行数据的接收。首先,我们回忆一下使用显式游标在普通嵌入式SQL中返回多行的例子:<嵌入式SQL+多行+游标例子>SQL> SET SERVEROUTPUT ONSQL> DECLARE2 /*******************************原创 2021-03-11 11:57:25 · 414 阅读 · 0 评论 -
PLSQL入门与精通(第45章:查询用动态SQL结果的存放1)
上次介绍了动态SQL(字符串的SQL)的基本语法:<动态SQL的执行基本语法>EXECUTE IMMEDIATE 动态SQL;但是有个问题,如果动态SQL是查询的时候,无论结果是一行还是多行,查询的结果怎么放到变量里边呢。之前介绍的时候后,查询结果只有一行的时候,可以使用使用SELECT INTO语句,如果结果是多行的时候,则需要使用光标。这一章,针对动态SQL只返回一行的结果进行说明。首先,复习一下不要动态SQL的例子和语法:也就是SELECT INTO文。以下的例子是在SQL原创 2021-03-08 19:37:32 · 519 阅读 · 1 评论 -
PLSQL入门与精通(第44章:动态SQL的执行语法)
春雨贵如油,新的一天又开始了。骑着自行车在大马路上,没有农村那种纯粹新鲜的泥土芬芳味道,有的只是喧嚣的汽笛声和浓烈的尾气味道,偶尔会传来刺鼻的尿骚味。希望不影响大家的心情,祝大家3/8快乐。这次我们详细介绍一下动态SQL。动态SQL是指执行的SQL是个字符串,这个字符串是在执行时连接成SQL语句再实行的。例子:SQL>SET SERVEROUT ON←设定SQL*Plus画面显示有效SQL> DECLARE2 V1 VARCHAR2(10) := ‘DEPT’;3 V2原创 2021-03-08 09:21:03 · 327 阅读 · 1 评论 -
PLSQL入门与精通(第43章:动态SQL)
前几次我们把触发器做了深入的解释。从这次开始我们解释动态SQL相关内容。动态SQL是指又一系列动态的字符串而组合的SQL语句。例如,执行PL/SQL程序时,可以吧表名和列名作为参数来接收的字符串,将该字符串作为SQL语句组装后执行。因此,动态SQL就是:“SQL语句在程序执行前是不知道语法结构是啥的,而是在执行的时候才知道执行的SQL语法的。”与此相对应,前边我们介绍的PL/SQL块内的SQL文都属于“嵌入的SQL文”。嵌入的SQL语句的关键语法是明确的,不是可变的字符串。进一步说,那个SQL文是直原创 2021-03-07 10:44:09 · 179 阅读 · 0 评论 -
PLSQL入门与精通(第42章:利用触发器随时保持导出列的值的同步)
周六,开了一下午会。晚上闲暇继续。前几次我们对触发器进行了深入的学习,这次我们学习触发器另外一个例子:“使用触发器及时更新导出列的值”。导出列是指可以从其他数据表总导出的列,这个列可以使另外一张表的合计值,平均值。这个合计值、平均值要始终和原表数据保持一直。例如,有2张表,部门表、员工表,如果员工表有部门和工资列,部门表中有该部门员工的工资合计列,则该列为员工表的导出列。如果是设置导出列的时候,如果原数据被更新,导出列也需要相应地更新。也就是说,员工表变动的情况下,部门工资合计也会发生变化的,部门原创 2021-03-06 22:01:25 · 208 阅读 · 1 评论 -
PLSQL入门与精通(第41章:Before行触发器“:对NEW.列名”进行赋值)
你好。是教练蓑岛。 上次,行触发在DML操作的对象行上启动,解说了“可以参照该行的列值”。 具体来说 :OLD.列名称←DML操作前的列值 :NEW.列名←DML操作后的列值 这样的记述可以参照该行的列值。 如果该触发在UPDAATE中启动 《:OLD.列名》是UPATE前的值,《:NEW.列名》是UPATE后的值,所以很容易理原创 2021-03-06 14:58:16 · 536 阅读 · 1 评论 -
PLSQL入门与精通(第40章:触发器使用的前提条件)
截止到目前针对触发器介绍了很多。但是我们是不是任何处理都可以使用触发器呢?肯定不是的。有的时候即使语法上正确(即使编译正常),也不能作为触发处理(执行时出错)。代表性的有以下两个情况是不行的:1.COMMIT, ROLLBACK, SAVEPOINT2.行触发器对象表进行SELECT、INSERT、DELETE、UPDAATE处理(但是关于行触发)首先,关于上述1.我觉得可以理解:触发器是自动在后台执行的,如果擅自终止处理的话就乱了。关于2.,对于行触发器,对于该触发器所设定的表(称变更表),触原创 2021-03-06 14:13:37 · 239 阅读 · 0 评论 -
PLSQL入门与精通(第39章,行触发器列的值)
上次我们提到了DML操作行触发器,它是在操作对象数据行上触发的,同时“可以参照该行的列值”。具体来说::OLD.列名称←DML操作前的列值:NEW.列名←DML操作后的列值如果触发动作是UPDATE中化《:OLD.列名》是UPDATE前的值,《:NEW.列名》是UPDATE后的值。如果触发动作是DELETE的话,『:OLD.列名』是在DELETE发生之前的该行的该列的值,《:NEW.列名》是DELETE后该行该列的值。可是,如果DELETE的话就不存在该行了,值是啥呢?告诉大家,“:NEW.列名”原创 2021-03-06 13:28:49 · 191 阅读 · 2 评论 -
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 · 382 阅读 · 1 评论 -
PLSQL入门与精通(第34章:包里边的自定义类型)
在上一次,针对包的本质发表了一下个人看法:PL/SQL包的本质是全局内容的定义部。在真实环境我们会经常用自定义的类型。用户自定义的类型有:记录类型(第12章)、集合类型(第13章)等。同理,如果这些自定义类型在包申明部进行申明的话,也是可以作为全局变量其他程序可以饮用的。这样在程序、函数之间作为值来回传递,就是非常高效简洁的做法。例如,在记录变量中存储处理事务中的数据集合是很常见的。例如,在过程1中,接收来自用户的请求,将请求参数的值存储在记录类型变量中,并且将该记录类型变量传递给事务处理过程原创 2021-03-03 13:19:54 · 193 阅读 · 0 评论 -
PLSQL入门与精通(第33章:包的本质)
我们一直在列举说明PL/SQL的包的用途。但是包的本质是什么的?个人理解,PL/SQL包的本质就是“全局部”。换句话来讲全局使用的东西,需要在包来定义。一般来说,在无名块、或者过程和函数的本地定义部中定义的内容只能在本PL/SQL块中使用。从这个意义上来说,这是一个本地(局部)的定义部。所谓本地的定义部,无名块是在DECLARE和BEGIN之间进行定义的;在过程和函数的情况下,是在IS和BEGIN之间定义的。作为复习,简单的列出下面的例子:<无名块>DELCARE本地声明部分BEGIN原创 2021-03-03 13:01:05 · 142 阅读 · 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 · 287 阅读 · 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 · 277 阅读 · 0 评论 -
PLSQL入门与精通(第29章:利用包进行函数的重载)
包装不仅仅具有把过程和函数打包的功能,还有其他只有通过包能实现的功能:首先解释第一个功能:制作多个同名的过程函数。例如,有些函数,内容相同,但是参数的类型和数量不同,就可以用包来实现。这个定义称为重载。名字相同,参数的数量或者参数数据类型的不同,或者函数返回的数据类型不同来区分不同的函数。系统根据这些不同的参数,在实际调用时的时候根据设计参数,自动判断具体调用了哪个函数,然后执行对应的代码。以下是简单的例子:<包申明部>SQL> CREATE OR REPLACE PACKA原创 2021-03-02 09:20:12 · 195 阅读 · 0 评论 -
PLSQL入门与精通(第28章:包的申明和定义详细解释)
上次针对包进行了简单的说明,这次进行深入介绍。正如上回解说的那样,包是将过程、函数、变量等打包一块的内容,分为申明和定义两个部分。(实际上只有申明没有定义的包存在,其他时间介绍。)申明部是“总结了用户和应用程序可以使用的东西或者接口”。与此相对,定义中记述的内容不能由用户或应用程序直接使用的内容。实现了接口与实现分离的作用。申明部中记述的过程和函数的接口,对于用户或者调用者来看所需的接口的信息。因此,申明部不会写把程序和功能实现逻辑完全写出来。申明部记述的过程和函数的接口的信息,也就是说,程序原创 2021-03-01 20:16:54 · 247 阅读 · 0 评论 -
PLSQL入门与精通(第27章:包)
从这章开始,我们针对package(包)进行说明。从此进入高级篇。我们的高级篇将对包、触发器、其他函数等进行解说。首先是包:包是指吧一些东西总结在一起的意思。PL/SQL的包可以包含过程和函数,甚至变量。好处:包会装入存储器中,所以如果将相关的过程、函数放到包里,性能上会好些。例子:创建PAC1包,包里边包含PROC1的程序,吧一个P1的参数打印到SQL*Plus画面上。<首先创建包体,或者叫包的申明>SQL> CREATE PACKAGE PAC12 IS3 PROC原创 2021-03-01 10:21:13 · 423 阅读 · 0 评论 -
PLSQL入门与精通(第25章:利用函数分类统计)
上次说明了SQL调用存储函数的条件,实际上,在什么情况下会从SQL中调用存储函数呢?一言以蔽之,可以说是为了简化复杂的查询(SELECT),从SELECT文中调用存储函数的情况。与DML(INSERT,UPDATE,DELETE)不同,SELECT文多为复杂的语句,有时难以写出符合要求的SELECT文。这种时候,如果使用函数的功能的话,根据情况,可以简单地写SELECT文。例如,将销售额表的销售额按“区分”进行合计的情况。销售表上没有“区分”这一列,这一分类是根据每个销售内容的不同而决定的。在这原创 2021-03-01 09:51:29 · 570 阅读 · 0 评论 -
PLSQL入门与精通(第24章,SQL中使用函数的前提)
上次,我们看到了存储函数可以像SQL函数那样在SQL语句中使用(呼出)。但是,上一个函数在INSERT语句中是正常使用的,但在SELECT语句中使用时出错了。像这样,从SQL语句调用用户定义的函数时,其函数定义有很多条件。这个条件是这次的主题。详细内容记载在PL/SQL语言的手册中,将简单易懂地说明其精髓。【条件1】首先,函数参数的数据类型和RETURN数据类型必须是表列的数据类型。也就是说,需要NUMBER、VARCHAR2、DATE等非常普通的表列的数据类型。该函数不能是特殊数据类型:原创 2021-02-28 11:33:48 · 205 阅读 · 0 评论 -
PLSQL入门与精通(第22章:函数语法)
上次就存储和函数的概要进行了解说。函数是有返回值,呼叫的方法直接可以作为变量带入,这2点和过程有很大的不同。从这次开始,我们就来解说函数的基本语法构成。首先是存储函数的制作语法,与过程的制作语法没有太大的变化。以下主要说明与过程的不同之处:<<存储函数的创建语法>>1 CERATE OR REPLACE FUCTION 功能名称(临时参数名称 模式 数据型,…)2 RETURNN 数据型3 IS4 宣言部5 BEGIN6 执行部7 RETURN原创 2021-02-28 10:34:37 · 321 阅读 · 0 评论 -
PLSQL入门与精通(第21章:函数的基本概念)
从这次开始以存储函数为主题。首先先说概要。详细的语法说明下次进行。存储过程和函数都是程序,有的时候有本质上的区别。最大的差别就是:函数有返回值要返回到调用方的值,在存储过程中也可以使用OUT的参数,但如果是函数,则不通过参数直接返回数值。使用函数直接可以在语句中记述值的地方使用,譬如写在代入句(:=)的右边。或者,IF语句等条件式的值、SELECT语句的SELECT句、WERE句、INSERT语句的VALES句、UPDATE语句的SET句、过程的参数等,可以记述数值的地方有很多,但都可以直接用函原创 2021-02-28 10:06:07 · 159 阅读 · 0 评论 -
PLSQL入门与精通(第19章,Sequence的不连续性)
第19回“存储过程事例2(保证连续性的发番处理)”前篇 2012.05.07 推特 这次与其说是过程的事例,不如说主要介绍连续号码的发号方法的定式,介绍将其存储过程化的方法。实际上,这是常见的过程事例。 暂且从上次的话开始继续着,不过,没有读上一次的人也只读这一次也没关系。上次,作为存储过程的例子,说明了订单登记处理(PROC订单受理过程)。内容是,检查该产品的库存数,如果不是库存不足的话就登记订单,原创 2021-02-27 17:40:16 · 375 阅读 · 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 · 561 阅读 · 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 · 577 阅读 · 0 评论 -
PLSQL入门到精通(第16章:存储过程基本概念)
到现在为止(第1章~第15章)使用了的PL/SQL的例子程序,全部是「无名块」的形式。“无名块”是指从客户端程序向Oracle数据库服务器发送的PL/SQL块。客户端程序是用户开发的应用程序。总之,从客户端向Oracle数据库服务器发送的PL/SQL块是“无名块”。正如无名方块这个词一样,这个块没有名字。当Oracle数据库从客户端接收到块时,将执行块内的处理,并将结果返回给客户端。在这一系列过程中,该PL/SQL块不需要有名称。因此,从客户发送到服务器的PL/SQL块没有起到名字,在这个意义原创 2021-02-27 10:50:03 · 524 阅读 · 0 评论 -
PLSQL入门于精通(第15章:键值数组的键值存在性检查)
这次就标号数组(或者叫键值数组)的键的是否存在的检查,进行说明。标号数组可以新增加键,并给予赋值,同时将该键的区域分配给存储器。也就是说,通过新增加键值,可以轻松扩展领域保存数值。那么,用新的键代入来扩展区域的话,如果使用不存在的的键,会发生错误。例子:<使用不存在的键访问而导致错误的示例>SQL> connect scott/tiger已连接。SQL> SET SERVEROUTPUT ONSQL> DECLARE2 TYPE A_TYPE IS TABL原创 2021-02-27 10:37:27 · 269 阅读 · 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 · 626 阅读 · 0 评论 -
PLSQL入门到精通(第13章:集合类型和变量)
这次就和上次的记录变量一样,作为构造复杂的变量,对集合变量进行说明。集合变量是可以存储多个数据类型值的变量。数据类型可以是基本简单的数据类型,如NUMBER,也可以是用户定义的记录类型等复杂的数据类型。作为集合变量的一个应用示例,游表关闭后,无法再次提取游标得值的时候,可以在游标处理中使用集合变量保存数据。否则的话,反复使用游标数据的话,就需要把游标暂时关闭,然后重新打开,反复读到需要的数据为止,这是非常不合理的逻辑。这种时候,如果使用集合鼻梁的话,可以优雅地解决该问题。也就是说,如果将提原创 2021-02-23 18:06:24 · 602 阅读 · 0 评论 -
PLSQL入门与精通(第12章:自定义记录类型)
前边简单解释了一下记录变量,这次详细解说一下记录变量。到上次为止,已经详细解说了6次明示光标的处理。回顾之前的内容:・第3章:基本变量的声明・第4章:使用%TYPE进行变量声明・第8章:游标处理,使用%ROWTYPE进行记录变量的声明如上所述,在第8章中,我们对使用%ROWTYPE的记录变量的定义方法进行了说明,这次将更详细地说明记录变量。也就是说,不使用%ROWTYPE,而是自己声明记录类型,然后再声明记录变量的方法。%ROWTYPE是根据游标和表的定义,定义与该行相同的记录类型时使用的原创 2021-02-23 13:19:39 · 399 阅读 · 1 评论 -
PLSQL入门与精通(第11章:游标双循环处理)
一般情况下,数据要以一栏和明细的形式在画面上显示。这种程序相对会复杂一些。例如,首先有一行是部门的数据,在部门下方需要显示多行该部门的员工的信息。然后,再显示下一个部门的数据,再显示部门所属的员工信息;然后。。重复同样的处理。这样的表示在简单的SELECT语句中很难,即使是编程,也必须在标题(部门)的循环处理中记述细节(社员)的循环处理。也就是说,需要双重循环构造,所以编程会变得复杂。但是,如果使用游标FOR循环句,即使是双重循环结构,也很简单。请看下面的例子。仅8行执行双循环处理。SQL&g原创 2021-02-23 10:01:32 · 614 阅读 · 0 评论 -
PLSQL入门与精通(第10章:游标简化写法)
像上次一样,用游标一行一行地取得,直到最后一行为止重复同样的处理,这样的模式可以用更简单的方法来记述:游标FOR循环语句。因为很简单,如果可能的话建议使用游标FOR循环语句。那么,我马上来解说游标FOR循环语句。比较上次的例子程序和用游标FOR循环处理改写了那个的情况。分别为(A)、(B)。(A)一般的记述1 DECLARE2 CURSOR CUR_EMP IS3 SELECT EMPNO, ENAME FROM EMP4 WERE DEPTNO=&部门编号;5 REC CUR_E原创 2021-02-23 09:42:11 · 298 阅读 · 0 评论