`
devgis
  • 浏览: 139347 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

oracle存储过程,test(测试)时传自定义类型参数问题

 
阅读更多
使用集合变量作为输入参数
CREATETYPEdeptno_table_typeISTABLEOFNUMBER(2);
/
CREATETYPEdname_table_typeISTABLEOFVARCHAR2(10);
/
CREATETYPEloc_table_typeISTABLEOFVARCHAR2(20);
/
CREATEORREPLACEPROCEDUREadd_department(
deptno_tabledeptno_table_type,
dname_tabledname_table_type,loc_tableloc_table_type)
IS
BEGIN
FORALLiIN1..deptno_table.COUNT
INSERTINTOdeptVALUES
(deptno_table(i),dname_table(i),loc_table(i));
EXCEPTION
WHENDUP_VAL_ON_INDEXTHEN
RAISE_APPLICATION_ERROR(-20012,'部门号不能重复');
END;
/
DECLARE
deptno_tabledeptno_table_type:=deptno_table_type(60,70,80);
dname_tabledname_table_type:=dname_table_type('计划处','质量处','技术处');
loc_tableloc_table_type:=loc_table_type('呼和浩特','包头','乌海');
BEGIN
add_department(deptno_table,dname_table,loc_table);
END;
/
18-18:使用集合变量作为输出参数
CREATETYPEename_table_typeISTABLEOFVARCHAR2(10);
/
CREATETYPEjob_table_typeISTABLEOFVARCHAR2(10);
/
CREATEORREPLACEPROCEDUREget_emp(
dnoNUMBER,ename_tableOUTename_table_type,
job_tableOUTjob_table_type)IS
BEGIN
SELECTename,jobBULKCOLLECTINTOename_table,job_table
FROMempWHEREdeptno=dno;
EXCEPTION
WHENNO_DATA_FOUNDTHEN
RAISE_APPLICATION_ERROR(-20010,'该部门不存在');
END;
/
DECLARE
ename_tableename_table_type;
job_tablejob_table_type;
BEGIN
get_emp(&dno,ename_table,job_table);
FORiIN1..ename_table.COUNTLOOP
dbms_output.put_line('姓名:'||ename_table(i)
||',岗位:'||job_table(i));
ENDLOOP;
END;

/





下面是存储过程代码:


declare
except_arrayarray_num:=array_num(90818041);
from_catalogidnumber:=90818040;
to_catalogidnumber:=91469311;
begin
--Calltheprocedure
directory_path_change(from_catalogid,to_catalogid,except_array);
end;

SQL code?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
createorreplaceproceduredirectory_path_change(from_catalogIdinteger,to_catalogIdinteger,except_arrayarray_num)is
----把采购分类下的采购品平移到另一分类下,except_array除外的采购品
tmp_IDNUMBER(19);--需要转移的采购品ID
catalog_treepathVARCHAR2(768CHAR);--目标分类的路径
inumber(10);--数组下标从1开始
isUpdatenumber(1);--是否执行更新0:不执行;1:执行
cursordirectory_cursoris
selectidfromcorp_directorysdwhered.catalog_id=from_catalogId;
begin
selecttreepathintocatalog_treepathfromcorp_catalogswhereid=to_catalogId;
savepointp1;--设置回滚点
opendirectory_cursor;
loop
fetchdirectory_cursorinto
tmp_ID;
exitwhendirectory_cursor%NOTFOUND;
DBMS_OUTPUT.PUT_LINE('=============ID:');
DBMS_OUTPUT.PUT_LINE(tmp_ID);
i:=1;
isUpdate:=0;
foriin1..except_array.countLoop
ifexcept_array(i)=tmp_IDthen
isUpdate:=1;
endif;
endloop;
ifisUpdate=1then
updatecorp_directorysdsetd.catalog_id=to_catalogId,d.treepath=(catalog_treepath||d.id||'#')whered.id=tmp_ID;
endif;
commit;
endloop;
closedirectory_cursor;
--发生异常时,数据回滚
exception
whenothersthen
dbms_output.put_line(sqlerrm);
rollbacktosavepointp1;
enddirectory_path_change;

分享到:
评论

相关推荐

    润乾报表调用oracle存储过程案例说明

    在实际的业务场景中,有时我们需要调用数据库中的存储过程来获取或处理数据,本篇将详细介绍如何在润乾报表中调用Oracle存储过程。 首先,我们要在Oracle数据库中创建存储过程。以下是一个简单的存储过程示例,名为...

    oracle存储过程超详细使用手册

    ### Oracle存储过程超详细使用手册 #### 一、创建存储过程 在Oracle中,存储过程是一种数据库对象,它由一组SQL语句和可选的PL/SQL代码组成,用于完成特定的功能。创建存储过程的基本语法如下: ```sql CREATE OR...

    Oracle存储过程详细使用手册

    "Oracle 存储过程详细使用手册" Oracle 存储过程是数据库中的一种重要组件,它可以实现复杂的业务逻辑和数据处理。本手册将详细介绍 Oracle 存储过程的使用方法和相关知识点。 1. 创建存储过程 创建存储过程的...

    Oracle存储过程超详细使用手册

    Oracle 存储过程超详细使用手册 Oracle 存储过程是一种强大的数据库工具,它可以将复杂的业务逻辑封装在数据库中,从而提高数据的安全性和一致性。本手册将详细介绍 Oracle 存储过程的使用方法,涵盖了创建存储过程...

    oracle存储过程及触发器总结

    ### Oracle存储过程及触发器总结 #### 一、Oracle 存储过程概述 在Oracle数据库中,存储过程是一种预先编译好的SQL代码块,它可以接受输入参数、返回单个值或多个值,并能够调用其他存储过程。存储过程在数据库...

    oracle存储过程学习经典[语法+实例+调用].pdf

    ### Oracle存储过程学习经典知识点详解 #### 一、创建存储过程 存储过程是数据库中预编译的一段SQL代码,可以提高程序的可维护性和执行效率。在Oracle中,可以通过`CREATE OR REPLACE PROCEDURE`语句来创建存储过程...

    oracle存储过程_函数_语法_大全_详解

    ### Oracle存储过程、函数语法详解 #### 一、概述 Oracle数据库系统因其高效的数据处理能力,在企业级应用中被广泛采用。存储过程和函数作为Oracle数据库的重要组成部分,可以帮助开发人员编写更加灵活、高效的...

    调用Oracle数据库中的存储过程需要两步走

    总结来说,调用Oracle存储过程涉及定义包含`IN`和`OUT`参数的存储过程,并在应用程序中通过适当的语法调用它。这种方式使得我们可以利用存储过程的强大功能来处理复杂的数据操作,同时保持应用程序代码的简洁性和可...

    oracle存储过程实例

    Oracle 存储过程实例 Oracle 存储过程是一种强大的数据库对象,可以执行复杂的数据操作和业务逻辑。下面是一个基本的 Oracle 存储过程实例,适合初学者学习 Oracle。 创建存储过程 创建存储过程的基本语法为: ``...

    Oracle_存储过程.pdf

    ### Oracle存储过程详解 #### PL/SQL简介与特性 PL/SQL(Procedural Language for SQL)是Oracle数据库中一种强大的编程语言,它结合了SQL的强数据操作能力与传统编程语言的过程化处理功能,使得数据库操作更加...

    Oracle存储过程基础[参考].pdf

    Oracle存储过程是数据库管理系统中的一个重要概念,它是一种预编译的SQL和PL/SQL代码集合,用于执行特定的数据库操作。存储过程可以被看作是数据库中的可重用的、有名字的函数,允许数据库管理员和开发人员创建复杂...

    oracle存储过程总结-函数-语法-大全-详解.docx

    Oracle 存储过程详解 Oracle 存储过程是 Oracle 数据库中的一种强大工具,可以实现复杂的业务逻辑和数据处理。下面是 Oracle 存储过程的一些重要知识点总结。 1. 创建存储过程 创建存储过程的基本语法为: ```sql...

    oracle存储过程-函数-语法-大全-详解.pdf

    Oracle存储过程是数据库管理系统中的一种重要工具,它允许开发者编写一系列复杂的SQL和PL/SQL语句,形成可重用的代码块。以下是对标题和描述中提到的Oracle存储过程相关知识点的详细说明: 1. 创建存储过程:使用`...

    oracle存储过程超详细使用手册.pdf

    ### Oracle存储过程超详细使用手册 #### 创建存储过程 在Oracle数据库中,存储过程是一种预编译的对象,它能够接收参数、执行SQL语句并返回结果。存储过程可以帮助提高应用程序性能,减少网络流量,并增强安全性。...

Global site tag (gtag.js) - Google Analytics