08 2013 档案
摘要:批量SQL包括:FORALL语句BULK COLLECT子句FORALL语句FORALL具有如下结构:FORALL loop_counter IN bounds_clause [SAVE ECEPTIONS]SQL_STATEMENT;其中, bounds_clause是下面形式之一:lower_limit .. upper_limitINDICES OF collection_name [BETWEEN lower_limit .. upper_limit]VALUES OF collection_name第一种与for循环一样。第二种用于稀疏数组,比如一个嵌套表,删除了其中某几项,遍历时会
阅读全文
摘要:关于PL/SQL中这三种数组的介绍,不想写了。转一篇日志吧……链接:http://www.blogjava.net/decode360/archive/2008/08/08/280825.html作者:decode360补充一点:假如从first到last的遍历过程中,存在被删除的占位符,如果使用则会报错。可用Exists(下标)的方法来判断是否存在。不能用is null 来判断……记录类型不能整体用null判断,我能想到并测试成功的方法是判断里面的NOT NULL字段(推荐主键)是否为null。PLSQL学习(二) 数组专题 PLSQL中提供了三种数据的形式,功能还是比较强大的。但是总的来说
阅读全文
摘要:在使用select into 为变量赋值时,如果变量是集合类型,不会产生异常,而如果是基本类型或记录类型,则会报异常。异常产生了怎么办?当然是捕获并处理啦。对于普通的代码块来说,在代码块的结尾处理就可以了。但是在循环里面呢?根据异常的传播,产生异常程序会中止。但如果想要在发生异常后,达到continue的效果,可不能在结尾的exception那里添加when others then continue;的语句,否则报错。要达到在循环中,找不到数据就continue,可以在赋值时,no_data_found的情况下作异常处理。即是让赋值语句包含在begin exception end的结构中。另外
阅读全文
摘要:在PL/SQL代码块中使用select into 赋值的话,有可能返回的是一个结果集。此时,如果使用基本类型或自定义的记录类型,将会报错。因此,需要定义一个变量,是某种类型的集合。下面以一个基于表的行类型的集合为例简单介绍一下(相信基本类型同理吧)。 1 DECLARE 2 CURSOR cur_tx IS SELECT GKEY from t ; 3 SUBTYPE TX_TYPE IS t%ROWTYPE ; -- 定义类型 4 TYPE TX_TAB IS TABLE OF TX_TYPE;--定义新类型,是某个类型的集合 5 K t.GKEY%TYPE...
阅读全文
摘要:与公司同事交流了一下,得知触发器很少用。性能是一方面,主要是如果用太多触发器,可能到时你都不知道会有什么操作自动发生。有些操作可以在程序中控制。例如在插入某个表时,写个log表的记录。这可以用触发器实现,但比较好的做法还是在程序中写个插入到log的语句实现。所以,就只学习了很简单的部分。触发器的通用语法如下:CREATE [OR REPLACE] TRIGGER Trigger_name{BEFORE | AFTER } {INSERT | DELETE | UPDATE} ON TABLE_NAME[FOR EACH ROW][FOLLOWS another_trigger][ENABLE
阅读全文
摘要:显式游标的处理过程包括:声明游标,打开游标,检索游标,关闭游标。声明游标CURSOR c_cursor_name IS statement;游标相当于一个查询结果集,将查询的结果放在游标里,方便在块里进行处理。记录一个记录就是一个复合的数据结构,相当于结果集里的一行数据,用于遍历游标时存放结果。记录支持三种定义:基于表,基于游标,自定义。如果是基于表或游标,其定义格式为:record_name table_name or cursor_name%ROWTYPE;打开游标OPEN cursor_name;检索游标存在两种游标检索方式:FETCH cursor_name INTO pl/sql v
阅读全文