`
devgis
  • 浏览: 134157 次
  • 性别: 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;

分享到:
评论

相关推荐

    测试培训教材

    就测试过程本身而言,应该包含以s下几个阶段。  -测试需求的分析和确定。  -测试计划。  -测试设计。  -测试执行。  -测试记录和缺陷跟踪。  -回归测试。  -测试总结和报告。 一个好的测试管理工具...

    oracle数据库经典题目

    一、填空 1.在多进程Oracle实例系统中,进程分为用户进程、后台进程和服务进程。 2.标准的SQL语言语句类型可以分为:数据定义语句(DDL)、数据操纵语句(DML)... Oracle数据库中角色分为系统预定义的角色和用户自定义的...

    PLSQLDeveloper下载

    过程:Create or replace procedure procname(参数列表) as PL/SQL语句块 函数:Create or replace function funcname(参数列表) return 返回值 as PL/SQL语句块 为便于理解,举例如下: 问题:假设有一张表t1,有f1...

    PL/SQL Developer8.04官网程序_keygen_汉化

    PL/SQL Developer是一个集成开发环境,专门面向Oracle数据库存储程序单元的开发。如今,有越来越多的商业逻辑和应用逻辑转向了Oracle Server,因此,PL/SQL编程也成了整个开发过程的一个重要组成部分。PL/SQL ...

    asp.net知识库

    发布Oracle存储过程包c#代码生成工具(CodeRobot) New Folder XCodeFactory3.0完全攻略--序 XCodeFactory3.0完全攻略--基本思想 XCodeFactory3.0完全攻略--简单示例 XCodeFactory3.0完全攻略--IDBAccesser ...

    ssh(structs,spring,hibernate)框架中的上传下载

     文件数据存储在Blob类型的FILE_CONTENT表字段上,在Spring中采用OracleLobHandler来处理Lob字段(包括Clob和Blob),由于在程序中不需要引用到oracle数据驱动程序的具体类且屏蔽了不同数据库处理Lob字段方法上的...

    数据库操作语句大全(sql)

    在SQLServer中分组时:不能以text,ntext,image类型的字段作为分组依据 在selecte统计函数中的字段,不能和普通的字段放在一起; 13、对数据库进行操作: 分离数据库: sp_detach_db; 附加数据库:sp_attach_db ...

    经典SQL语句大全

    在SQLServer中分组时:不能以text,ntext,image类型的字段作为分组依据 在selecte统计函数中的字段,不能和普通的字段放在一起; 13、对数据库进行操作: 分离数据库: sp_detach_db; 附加数据库:sp_attach_db 后...

    sql经典语句一部分

    在SQLServer中分组时:不能以text,ntext,image类型的字段作为分组依据 在selecte统计函数中的字段,不能和普通的字段放在一起; 13、对数据库进行操作: 分离数据库: sp_detach_db; 附加数据库:sp_attach_db 后...

    Maven权威指南 很精典的学习教程,比ANT更好用

    其它打包类型 10.3. 通用生命周期目标 10.3.1. Process Resources 10.3.2. Compile 10.3.3. Process Test Resources 10.3.4. Test Compile 10.3.5. Test 10.3.6. Install 10.3.7. Deploy 11. 构建...

    jpivot学习总结.doc

    Closure表针对维度表计算distance,Closure表的生产参见例子中的存储过程sp_zycreateorgclosure 例如: 地区" uniqueMembers="true" nameColumn="ORGENTITYNAME" column="ORGENTITYID" parentColumn=...

    (重要)AIX command 使用总结.txt

    //设置文件系统/tellinshare/sms的mind属性,否则当文件系统中有足够多的大文件(指32K以上的文件)时会出问题 #chfs -a options=rw,mind /tellinshare/sms mkgroup id=101 informix //创建组informix, 组编号101 ...

Global site tag (gtag.js) - Google Analytics