存储过程TYPE类型参数调试
当我们写完一段存储过程后,必然需要调试运行一下写的代码是否能成功运行,当参数是字符,数字或日期时,可以直接在测试窗口输入值。但是类型如果是定义好的TYPE,就无法简单的输入。
一、自定义TYPE
TYPE的创建
CREATE OR REPLACE TYPE "TYP_USER_INFO" AS OBJECT
(
U_ID VARCHAR2(4) --用户ID
,U_NAME VARCHAR2(10) --用户名
,U_SEX VARCHAR2(1) --性别
)
需要测试的存储过程
举一个简单的例子,查询某个用户的具有的权限
CREATE OR REPLACE PACKAGE BODY PKG_TYPE_TEST IS
TYPE typCSR IS REF CURSOR;
FUNCTION F_GET_POWER_DATA(ptUSER_INFO IN TYP_USER_INFO
,powerInfoList OUT typCSR) RETURN VARCHAR2 IS
BEGIN
OPEN pPowerInfoList FOR
'SELECT P.PID, P.PNAME
FROM D_USER_POWER P
WHERE P.UID = ' || '''' || ptUSER_INFO. U_ID || '''' || '';
END F_GET_POWER_DATA;
END PKG_TYPE_TEST;
选中方法,进入TEST窗口
DECLARE
ptuser_info typ_user_info := typ_user_info('9572','小唐','1');
BEGIN
:result := PKG_TYPE_TEST. F_GET_POWER_DATA(ptuser_info => ptuser_info,
powerInfoList => : powerInfoList,
);
END;
首先需要声明一个TYPE类型变量,存储TYPE中需要封装的数据,再传入方法中即可进行测试。
二、集合
Oracle数据库中声明集合类型有好几种方法,这里举例使用的是嵌套表,即使用IS TABLE OF
。
CREATE OR REPLACE TYPE "TYP_USER_INFO_LIST" AS TABLE OF TYP_USER_INFO
语句中的TYP_USER_INFO
是文章开头创建的TYPE。
这次是查询指定ID的用户的信息
CREATE OR REPLACE PACKAGE BODY PKG_TYPE_TEST IS
TYPE typCSR IS REF CURSOR;
FUNCTION F_GET_USER_DATA(ptUSER_INFO_LIST IN TYP_USER_INFO_LIST
,userInfoList OUT typCSR) RETURN VARCHAR2 IS
lIdList LONG := '';
lNameList LONG := '';
ptuserInfo TYP_USER_INFO;
BEGIN
IF userInfoList IS NOT NULL AND userInfoList.COUNT > 0 THEN
FOR IDX IN 1 .. userInfoList.COUNT LOOP
ptuserInfo := userInfoList(IDX);
lIdList := lIdList || '''' || ptuserInfo. U_ID || '''' || ',';
lNameList := lNameList || '''' || ptuserInfo.U_NAME || '''' || ',';
END LOOP;
lIdList := substr(lIdList,0,length(lIdList)-1);
lNameList := substr(lNameList,0,length(lNameList)-1);
END IF;
OPEN userInfoList FOR
'SELECT U.*
FROM D_USER_INFO U
WHERE AND U. U_ID IN (' || lIdList ||')
AND U.U_NAME IN (' || lNameList ||')';
END F_GET_USER_DATA;
END PKG_TYPE_TEST;
选中方法,进入TEST窗口
DECLARE
puserinfolist TYP_USER_INFO_LIST := TYP_USER_INFO_LIST();
BEGIN
puserinfolist.Extend(3);
puserinfolist(1) := TYP_USER_INFO('9572','小唐','1');
puserinfolist(2) := TYP_USER_INFO('9573','小王','2');
puserinfolist(3) := TYP_USER_INFO('9574','小李','1');
:result := PKG_TYPE_TEST. F_GET_USER_DATA(puserinfolist => puserinfolist,
userInfoList => : userInfoList,
);
END;
集合测试时候要使用
Extend
关键字。
Extend方法
向可变数组或嵌套表尾部添加元素。集合可以为EMPTY,但不能为NULL。
Extend(n),向集合添加n个null元素。
Extend(n, i),向集合添加n个第i个元素的拷贝。
存储过程TYPE类型参数调试的更多相关文章
- 存储过程系列之调试存储过程 SQL Server 2005
在数据库中直接调试 在数据库中直接调试是调试SQL Server 2005的存储过程的最简单的方法. 在Visual Stuido的IDE中你可以选择单步执行存储过程,然后就可以一条语句一条语句地单 ...
- oracle 存储过程 clob 字段 调试
clob 没法直接赋值调试,可以新建一个存储过程,赋值给clob字段,然后调试
- Sql Server 2012 存储过程的单步调试
最近在做vb项目的时候,用到了存储过程的调试,现在总结一下发现单步调试存储过程有以下2种方法: 1.这种方法自己已经做过,是可以的,如下: a.如果目标数据库存在存储过程,右击该存储过程-修改,打开存 ...
- oracle 存储过程定义及调试,并终于被C# 调用 代码
C# 调用存储过程 參考了非常多文章,写了例如以下文字,算是分享吧 目的:更改积分,并作一定校验 一.一般的调试方法: 方法一:带返回out參数,必须定义变量 myresult DECLARE myr ...
- JAVA调用ORACLE存储过程时间类型参数没有日期
是因为使用cs.setDate()给数据库传参数只会传日期部分.如果改用如下代码就可以: cs.setTimestamp(3, new java.sql.Timestamp(dKssj.getTime ...
- SQL存储过程调试
转自:http://www.cnblogs.com/xiangzhong/archive/2012/10/27/2742974.html 今天突然有同事问起,如何在sqlserver中调试存储过程(我 ...
- 调试存储过程时提示ORA-20000: ORU-10027: buffer overflow
下午的时候在 PL/SQl Developer 10.0.5.1710 上调试壹個存储过程,在调试的时候使用了比较多的 DBMS_OUTPUT.PUT_LINE 作为打印日志的方式,结果没过多久 PL ...
- PL/SQL Developer使用技巧、快捷键、存储过程调试
1.类SQL PLUS窗口:File->New->Command Window,这个类似于oracle的客户端工具sql plus,但比它好用多了. 2.设置关键字自动大写:Tools-& ...
- PL/SQL如何调试sql语句、存储过程
一直以来,我总是在sql的工具,比如sql server.navicat等中执行sql语句来发现问题自己写的sql中的问题,结果被问起时,让人贻笑大方! 那么如何调试成白行的存储过程?如何调试成百行s ...
随机推荐
- libffi-dev : 依赖: libffi6 (= 3.2.1-4) 但是 3.2.1-4kord 正要被安装
原文链接:https://blog.csdn.net/u013992330/article/details/85135629 中标麒麟安装python库:sshtunnel 的时候提示缺少ffi.h文 ...
- [模板]最小割树(Gomory-Hu Tree)(luogu4897)
给定一个\(n\)个点\(m\)条边的无向连通图,多次询问两点之间的最小割 两点间的最小割是这样定义的:原图的每条边有一个割断它的代价,你需要用最小的代价使得这两个点不连通 Input 第一行两个数\ ...
- 实现域名访问网站—nginx反向代理
今天在跟项目的时候,是否被耍了三个多小时,最后在我准备号材料准备他人求助的时候,在收集材料的时候,居然访问通了, 别问我为什么,我也不知道 ,哈哈哈哈(苦逼脸...) 分享出来,大家共同学习: 这个是 ...
- Spring Boot中使用@Async实现异步调用
在Spring Boot中,我们只需要通过使用@Async注解就能简单的将原来的同步函数变为异步函数,为了让@Async注解能够生效,还需要在Spring Boot的主程序中配置@EnableAsyn ...
- 一步一步教你用 Vue.js + Vuex 制作专门收藏微信公众号的 app
一步一步教你用 Vue.js + Vuex 制作专门收藏微信公众号的 app 转载 作者:jrainlau 链接:https://segmentfault.com/a/1190000005844155 ...
- Feign status 400 reading 问题分析
背景:项目使用的是微服务架构,采用springboot来开发,所有的服务都是基于内嵌tomcat来运行 问题:项目部署到测试环境之后,偶尔在后台日志会看到这样的日志:Feign status 400 ...
- 单点登录--CAS认证--web.xml配置详解
参考网址: https://blog.csdn.net/zhurhyme/article/details/29349543 https://blog.csdn.net/shzy1988/article ...
- C# 自定义类型通过实现IFormattable接口,来输出指定的格式和语言文化的字符串(例:DateTime)
常规的调用ToString()方法,存在两个问题. (1).调用者无法控制字符串的格式 (2).调用者不能方便的选择一种特定的语言文化来格式化字符串. 在开发一些国际化的应用时,应用程序需要调用与当前 ...
- Your Mac is infected with (3) Viruses!
记一次流氓程序的清理 某天我的电脑不幸感染了这么一个病毒
- Intellij IDEA Spring Boot 项目Debug模式启动缓慢问题
问题 Intellij IDEA Spring Boot 项目Debug模式启动缓慢 环境 os: windows10 idea :2018.1 解决方法 去除所有断点就正常了,很诡异,原因未知.