当我们写完一段存储过程后,必然需要调试运行一下写的代码是否能成功运行,当参数是字符,数字或日期时,可以直接在测试窗口输入值。但是类型如果是定义好的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类型参数调试的更多相关文章

  1. 存储过程系列之调试存储过程 SQL Server 2005

    在数据库中直接调试  在数据库中直接调试是调试SQL Server 2005的存储过程的最简单的方法. 在Visual Stuido的IDE中你可以选择单步执行存储过程,然后就可以一条语句一条语句地单 ...

  2. oracle 存储过程 clob 字段 调试

    clob 没法直接赋值调试,可以新建一个存储过程,赋值给clob字段,然后调试

  3. Sql Server 2012 存储过程的单步调试

    最近在做vb项目的时候,用到了存储过程的调试,现在总结一下发现单步调试存储过程有以下2种方法: 1.这种方法自己已经做过,是可以的,如下: a.如果目标数据库存在存储过程,右击该存储过程-修改,打开存 ...

  4. oracle 存储过程定义及调试,并终于被C# 调用 代码

    C# 调用存储过程 參考了非常多文章,写了例如以下文字,算是分享吧 目的:更改积分,并作一定校验 一.一般的调试方法: 方法一:带返回out參数,必须定义变量 myresult DECLARE myr ...

  5. JAVA调用ORACLE存储过程时间类型参数没有日期

    是因为使用cs.setDate()给数据库传参数只会传日期部分.如果改用如下代码就可以: cs.setTimestamp(3, new java.sql.Timestamp(dKssj.getTime ...

  6. SQL存储过程调试

    转自:http://www.cnblogs.com/xiangzhong/archive/2012/10/27/2742974.html 今天突然有同事问起,如何在sqlserver中调试存储过程(我 ...

  7. 调试存储过程时提示ORA-20000: ORU-10027: buffer overflow

    下午的时候在 PL/SQl Developer 10.0.5.1710 上调试壹個存储过程,在调试的时候使用了比较多的 DBMS_OUTPUT.PUT_LINE 作为打印日志的方式,结果没过多久 PL ...

  8. PL/SQL Developer使用技巧、快捷键、存储过程调试

    1.类SQL PLUS窗口:File->New->Command Window,这个类似于oracle的客户端工具sql plus,但比它好用多了. 2.设置关键字自动大写:Tools-& ...

  9. PL/SQL如何调试sql语句、存储过程

    一直以来,我总是在sql的工具,比如sql server.navicat等中执行sql语句来发现问题自己写的sql中的问题,结果被问起时,让人贻笑大方! 那么如何调试成白行的存储过程?如何调试成百行s ...

随机推荐

  1. SpringBoot2 配置

    一.Properties与Yaml SpringBoot支持properties与yaml两种配置文件application.properties/application.yml yaml简单使用 1 ...

  2. ssh远程连接不上linux

    远程连接工具是:Xmanager Enterprise 5-->Xshell linux 发行版本是:CentOS-6.3-x86_64 问题:ssh一直都可以远程连接上linux,一段时间后突 ...

  3. 微信赌场——H5棋牌游戏渗透之旅

    i春秋作家:F0rmat 0x01 前言 本来不想发的,涉及太多利益了,这些棋牌游戏的源码最高能卖到几万.开发起来不比一个商场程序难.最近又太忙了,没时间去做代码审计的文章了,但一不小心又抢了个运气王 ...

  4. 阿里云mysql数据库备份还原

    1.下载备份包 在rds的备份恢复中点击下载,在弹出的窗口中复制内网下载地址(前提是目标服务器与rds内网互通,否则请复制外网地址) 在目标服务器中执行如下命令进行下载: wget -c '复制的地址 ...

  5. Spring Boot中使用JdbcTemplate访问数据库

    本文介绍在Spring Boot基础下配置数据源和通过JdbcTemplate编写数据访问的示例. 数据源配置 在我们访问数据库的时候,需要先配置一个数据源,下面分别介绍一下几种不同的数据库配置方式. ...

  6. 爬虫:Scrapy5 - 选择器Selectors

    当抓取网页时,常见的任务是从HTML源码中提取数据.现有的一些库可以达到这个目的: BeautifulSoup lxml Scrapy 提取数据有自己的一套机制.它们被称作选择器(seletors), ...

  7. eslint 配置及规则说明

    中文官方网站 安装 可以全局安装,也可以在项目下面安装. 如下是在项目中安装示例,只需要在 package.json 中添加如下配置,并进行安装: “eslint”: “^4.11.0” 配置 配置方 ...

  8. python之ETL数据清洗案例源代码

    #python语言 import pandas as pd import time data = pd.read_excel('ETL_数据清洗挑战.xlsx','测试数据',dtype=str)#读 ...

  9. HDFS概要

    --HDFS-- Hadoop Distributed File System HDFS一个分布式,高容错,可线性扩展的文件系统 简介: Hadoop分布式文件系统(HDFS)是一种分布式文件系统,设 ...

  10. 第四章 PCA降维

    目录 1. PCA降维 PCA:主成分分析(Principe conponents Analysis) 2. 维度的概念 一般认为时间的一维,而空间的维度,众说纷纭.霍金认为空间是10维的. 3. 为 ...