如何理解和实践关键的 PLSQL 问题

分类:编程技术 时间:2024-02-20 16:00 浏览:0 评论:0
0
本文与大家分享如何理解和实践PLSQL的关键问题。小编觉得还是比较实用的,所以分享给大家学习一下。希望您读完本文后有所收获。话不多说,就跟随小编一起来看看吧。

ORACLE中PL/SQL使用的集合变量类型包括RECORD(类)、VARRAY(sql数组)、TABLE(嵌套表)
TABLE(嵌套表)可以通过索引来定义也可以省略。添加的意思是index by,就是建立主键索引,相当于一个数组。如果不添加,则是嵌套表集合
1 TABLE(嵌套表)定义表变量类型
type type_table_emp_empno 是emp的表.empno%type由binary_integer索引;--TYPE代表字段类型表中的一行
v_empnos type_table_emp_empno;
如果用%type定义
用emp.empno定义集合变量v_empnos为字段类型数组,我明白它是否存储act实际数据或表格。里面只有一个字段,并且该字段上有一个索引
对这一类集合变量(是index by的表)的操作包括count和delete,但是trim
可以使用count,删除并修剪 VARRAY
使用表单
select to_char(truck_in_out_id),
employee_id,
employee_nm,
truck_in_ Purpose
批量收集到
carid,
       empid,
  empnm,
dest

forall i in 1 .. carid.COUNT

更新 cpnew.CP_VISIT_APPLY a< br/> 设置 a.mgr_principal_id = empid( i),
a.mgr_principal_nm = empnm(i),
a.visit_dest = dest(i)
其中 a.visit_apply_id = carid(i )
且a.mgr_principal_id为null;

类型delArray1是TEST.COURSE%ROWTYPE索引的表,由binary_integer索引; --ROWTYPE 表示表中一行的记录类型
cur_result delArray1;
如果使用%rowtype 定义
定义集合变量cur_result 为COURSE 表类型的集合。我理解是存储在一个表中,该表包含了COURSE的所有字段类型,并用一个整数作为这个表的索引
使用形式
select *bulk Collect into cur_result
< br/> forall i in 1 .. cur_result.COUNT

更新 cpnew.CP_VISIT_APPLY a
set a.mgr_principal_id = cur_result(i).empid,
a.mgr_principal_nm = cur_result (i).empnm,
         a.visit_dest                                                                                                                                                                                                                                                                                                       工作中的例子
plsql大数据量删除,修改方法FORALL加批量集合成
create or replacement procedure zl_del_UPDATEAPPLY_DEST187 as
--type ridArray 是由binary_integer 索引的rowid 表;
type delArray1 是由binary_integer 索引的varchar2(32) 表;
type delarray2是CP_2012.CP_VISIT_TRUCK_INOUT.EMPOHINEE_ID%type index by biny_integer;
type delarray3是cp_2012.cp_visit_truck_inout.employeee_nm%type_int_inte_inte_inte_20 type_20 typeruckeuck;
//你会发现使用%type时,每个字段都要定义其类型
carid delArray1;
empid delArray2;
empnm delArray3;
dest delArray4;
开始

选择to_char(truck_in_out_id),
员工id,
员工_nm,
卡车_in_目的
批量收集到
carid,
empid,
empnm,
dest
from CP_201 2 .CP_VISIT_TRUCK_INOUT;
--where rownum < 600001;

forall i in 1 .. carid.COUNT

更新 cpnew.CP_VISIT_APPLY a
设置 a.mgr_principal_id = empid(i),
a.mgr_principal_nm = empnm(i),
/> a.visit_dest = dest(i)
其中 a.visit_apply_id = carid(i)
且 a.mgr_principal_id 为空;

DBMS_OUTPUT.PUT_LINE(to_char(carid.COUNT) ||
‘从 temp_mid_hubei_bak 中删除的记录!!!’);
 
end;
这种方法最大的缺点是不能在forall中访问远程表,也不能使用dblink,而且只能放dml语句,不能使用dbms.putline< br/>经过测试,发现for可以代替forall。虽然时间比较慢,但是还是可以接受的,所以可以在for中使用dblink。对应的语句如下:

for i in 1 .. carid.COUNT

loop
  update cpnew.CP_VISIT_APPLY@LINK_213TO187_CPNEW a
set a.mgr_principal_id = empid(i),
a.mgr_principal_nm = empnm(i),
a.visit_dest = dest(i)
其中 a.visit_apply_id = carid(i)
和 a .mgr_principal_id为null;

2记录变量类型:(相当于java类)
定义
类型type_record_dept为记录
        (
           deptno dept.deptno%类型,
       dname dept.dname%type,
> v_temp type_record_dept;

3 VARRAY
定义和使用
CREATE OR REPLACE TYPEnumbers_t IS VARRAY (5) OF NUMBER
DECLARE
l_listnumbers_t:=numbers_t (1, 2, 3, 4, 5);
BEGIN
l_list.DELETE;
DBMS_OUTPUT.put_line (CASE l_list.COUNT WHEN 0 THEN 'Empty' END);
END;
数组使用示例,参考Oracle数组的使用http://blog.itpub.net/12932950/viewspace-351791/

还可以对比游标的使用并批量收集到我之前的博客http://blog.itpub.net/750077/viewspace-2075986 /

两个PL/SQL异常

异常类型1预定义异常处理, 2 非预定义(Predefined)错误,3 用户定义(User_define)错误
一般常用预定义异常和用户定义异常
1 预定义异常如Oracle定义异常
ORA- 1403 No_data_found SELECT INTO 未找到数据

如果找不到 select 则n 使用 当找到数据时,直接处理没有找到数据的异常
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('There is no employee coded as '||v_empno||' in数据库');
END;
2 用户自定义异常
用户自定义异常优先
no_result EXCEPTION;
如果没有更新数据,则该异常为抛出
UPDATEEmployeesSETsalary=salary+100WHEREemployee_id=v_empno;
IFSQL%NOTFOUNDTHEN
RAISEno_result;
ENDIF;
然后处理这个异常< br/>EXCEPTION
WHEN no_result THEN
DBMS_OUTPUT.PUT_LINE('您的数据更新语句失败!');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLCODE||'- --'||SQLERRM);
END;
SQLCODE, SQLERRM 是ORACLE函数,会打印错误代码和错误名称

以上是如何实现的理解并实践PLSQL的关键问题。小编认为,有些知识点在我们的日常工作中可能会看到或者用到。兽人。到达的。希望您能从本文中了解更多信息。更多详情请关注行业资讯频道。

1. 本站所有资源来源于用户上传或网络,仅作为参考研究使用,如有侵权请邮件联系站长!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > 如何理解和实践关键的 PLSQL 问题

用户评论