存储过程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 ...
随机推荐
- AJPFX:外汇的技术面分析
AJPFX平台:开设外汇保证金交易账户以及入金之后,通常就可以开始交易了,但是在选择买卖时点时通常会依据两种分析,两种主要分析方法通常会被称为基本面分析和技术分析.基本面分析注重金融,经济理论和政局发 ...
- Flask系列08--Flask中flask_session, redis插件
一.安装 1.flask_session 不想将Session的信息存放在Cookie 将Session存放在Redis Cookie中保存Session的ID flask中的session是直接将数 ...
- 关于各种算法以及好的blog的整理(持续更新)
一堆博客先扔着,等有空的时候再去看……好像没几个会的…… 以下都是待学习的算法 博弈论 https://www.cnblogs.com/cjyyb/p/9495131.html https://blo ...
- jzoj4229
按照題意暴力模擬即可 #include<bits/stdc++.h> using namespace std; int m; typedef long long ll; ll a1,q,n ...
- spring IOC理解
用spring做了几个项目后发现,对spring的IOC理解还是不够清晰,今天就来总结下自己的理解(个人的一些见解) 以前用jsp+servlet做网站时,只是分了显示层(jsp),控制层(servl ...
- Data - 数据思维
数据思维 数据思维全解析 如何建立数据分析的思维框架 做数据分析时,你的方法论是什么? 数据分析全流程资料,适合各路人马 百度内部培训资料PPT:数据分析的道与术 学会数据分析背后的挖掘思维,分析就完 ...
- java批量解压文件夹下的所有压缩文件(.rar、.zip、.gz、.tar.gz)
// java批量解压文件夹下的所有压缩文件(.rar..zip..gz..tar.gz) 新建工具类: package com.mobile.utils; import com.github.jun ...
- ping端口是否开放(windows,macos,linux)
windows中ping端口:tcping命令 1. tcping 非自带命令,首先安装tcping命令,也可以去官网:http://www.elifulkerson.com/projects/tcp ...
- Liferay-Activiti 企业特性功能介绍 (新版Liferay7)
前言 如果你是开发者 你已经是多少次开发一个项目,一次次的用一些框架,一次次的写类似的重复的代码,一次次建表\写类和方法\写HTML\CSS\JAVASCRIPT,一次次测试,一次次的写Bug...如 ...
- C#枚举中使用Flags特性
.NET中的枚举我们一般有两种用法,一是表示唯一的元素序列:还有就是用来表示多种复合的状态.这个时候一般需要为枚举加上[Flags]特性标记为位域,这样我们就可以用"或"运算符组合 ...