存储过程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 ...
随机推荐
- Tomcat安装及调试
Web服务器的作用 1.接收客户端的请求 2.给客户端作出响应 我们也可以自己手写Web服务器,但是那样太麻烦,而且难度很大,所以我们可以 使用目前应用最广泛的Tomcat服务器 常见的Web服务器 ...
- 小技巧——病毒分析中关闭ASLR
原文来自:https://bbs.ichunqiu.com/thread-41359-1-1.html 病毒分析中关闭ASLR 分析病毒的时候,尽可能用自己比较熟悉的平台,这样可以大大地节省时间,像我 ...
- Shell - 简明Shell入门07 - 数组(Array)
示例脚本及注释 #!/bin/bash test0=() # 定义数组 test1=(a b c d e f) # 定义数组 test2=( # 定义数组 'A?' "BB!" C ...
- Django 模板相关
Django 模板相关 视图函数只是直接返回文本,而在实际生产环境中其实很少这样用,因为实际的页面大多是带有样式的HTML代码,这可以让浏览器渲染出非常漂亮的页面.目前市面上有非常多的模板系统,其中最 ...
- windows 64位下 Octave 不能画图的解决办法
如果不能画图,可能需要更改图形工具包. 1.首先,查看当前的工具包.在Octave命令行中键入 graphics_toolkit,结果如下: >> graphics_toolkit ...
- TensorFlow.js之安装与核心概念
TensorFlow.js是通过WebGL加速.基于浏览器的机器学习js框架.通过tensorflow.js,我们可以在浏览器中开发机器学习.运行现有的模型或者重新训练现有的模型. 一.安装 ...
- python再探
python是一门强大的高级编程语言,之前的文章中介绍了python的基础知识,接下来会介绍一些python更为高级的知识. 面向对象编程 基本知识 一般编程思想分为面向过程和面向对象,前者的基本单元 ...
- .Net 鉴权授权
在这里总结一下工作中遇到的鉴权和授权的方法 ① 固定token的方案 通过在nginx或者代码中写死token,或者通过在限制外网访问的方式已来达到安全授权的方式 ② session方案 分布式会话方 ...
- todolist增加markdown模块
markdown编辑器 利用`markdown_js`开源库实现todolist小项目的markdown日记本功能 todolist小项目地址 之前的介绍随笔todoList markdown-js仓 ...
- Google地图开发
配置Google API SDK 如果要想进行Google Map或者说是定位服务的开发,那么肯定需要下载一个新的SDK的支持. 1.点击Android SDK Manager,下载SDK. 2.直接 ...