存储过程之用返回多条数据一

2023-11-01

要求:拼接数据,作为多条数据返回。

1、创建类型:

create or replace type bb_ptyxztqk_Type as object(
  d_index number,
  d_name varchar2(100),
  d_this number,
  d_last number,
  d_minus number
)

2、创建表类型:

create or replace type bb_ptyxztqk_Table as table of bb_ptyxztqk_type

3、package:

create or replace package bb_ptyxztqk is

  type type_cursor is ref cursor;

  PROCEDURE pro_getdata(enddate in varchar2, cur out type_cursor);

end bb_ptyxztqk;

4、packagebody:

create or replace package body bb_ptyxztqk is

  -- Function and procedure implementations  cur out type_cursor
  PROCEDURE pro_getdata(enddate in varchar2, cur out type_cursor) is
    Type RecType Is Record(
      r_index number,
      r_name  varchar2(100),
      r_this  number,
      r_last  number,
      r_minus number);
    Type TabType Is Table Of RecType Index By Binary_Integer;
    myTab        TabType;
    obj_type_tab bb_ptyxztqk_table := bb_ptyxztqk_table();
    l_index      number := 1;
    p_enddate date := to_date(enddate,'yyyy-mm-dd hh24:mi:ss');
    l_value number(18,0);
    l_value_last number(18,0);
  begin
    --------------------------------1-------------------------------
      myTab(l_index).r_index := l_index;
      myTab(l_index).r_name := '第一条数据';
      --查询数据
      select count(1) into l_value
         from t_company c;
      myTab(l_index).r_this := l_value;

      select count(1) into l_value_last
         from t_company c
         where (c.c_createdate <= p_enddate or c.c_createdate is null);
      myTab(l_index).r_last := l_value_last;

      myTab(l_index).r_minus := l_value - l_value_last;
      l_index := l_index + 1;

      --------------------------------2-------------------------------
      myTab(l_index).r_index := l_index;
      myTab(l_index).r_name := '第二条数据';
      --查询数据
      select count(1) into l_value from t_supplier;
      myTab(l_index).r_this := l_value;

      select count(1) into l_value_last from t_supplier s
         where s.c_createdate <= p_enddate;
      myTab(l_index).r_last := l_value_last;

      myTab(l_index).r_minus := l_value - l_value_last;
      l_index := l_index + 1;

    --赋值
    l_index := myTab.First;
    for l_in in l_index .. myTab.count Loop
      obj_type_tab.EXTEND;
      obj_type_tab(obj_type_tab.LAST) := bb_ptyxztqk_type(myTab(l_index).r_index,
                                                          myTab(l_index).r_name,
                                                          myTab(l_index).r_this,
                                                          myTab(l_index).r_last,
                                                          myTab(l_index).r_minus);
      l_index := myTab.Next(l_index);
    end Loop;
    open cur for
      select *
        from table(obj_type_tab);
  end;
end bb_ptyxztqk;


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

存储过程之用返回多条数据一 的相关文章

  • MySQL存储过程创建例子

    1 无参数输入的存储过程 DELIMITER DROP PROCEDURE IF EXISTS testUser CREATE PROCEDURE testUser BEGIN SELECT FROM user WHERE name zz
  • C# 数据库存储过程的讲解应用

    在使用VS 2012 SQL Server做简单的销售系统中 通常会遇到一些使用存储过程的情况 那究竟什么是存储过程 它的好处是什么呢 如果在SQL Server中创建一个存储过程 C 中怎样联系存储过程呢 一 存储过程 存储过程 Stor
  • 存储过程之用返回多条数据一

    要求 拼接数据 作为多条数据返回 1 创建类型 create or replace type bb ptyxztqk Type as object d index number d name varchar2 100 d this numb
  • 数据库系统教程(第二版何玉洁)课后数据库上机实验答案

    附录C 上机实验 C 1 第4章上机实验 陈宇超 仅供参考 下列实验均使用SQL Server 的SSMS工具实现 1 用图形化方法创建符合如下条件的数据库 创建数据库的方法可参见本书附录A l 数据库名为 学生数据库 l 主要数据文件的逻
  • Mysql存储过程(批量处理)如何编写

    1 什么事存储过程 存储过程是一组为了完成特定功能的SQL语句集合 一个存储过程是一个可编程的函数 它在数据库中创建并保存 一般由SQL语句和一些特殊的控制结构组成 使用存储过程不仅可以提高数据库的访问效率 同时也可以提高数据库使用的安全性
  • 存储过程

    好久没用过存储过程了 今天整理一下 一 定义 存储过程是一组为了完成特定功能的SQL语句的集合 它经编译后存储在数据库中 用户通过指定的调用方法执行之 存储过程具有名称 参数及返回值 并且可以嵌套调用 存储过程是经过编译的 以可执行格式永久
  • mysql存储过程之循环(WHILE,REPEAT和LOOP)

    MySQL提供循环语句 允许我们根据条件重复执行一个SQL代码块其中有三个循环语句 WHILE REPEAT和LOOP 我们接下来分别看下 首先是WHILE语句来看下语法 WHILE expression DO statements END
  • mysql 存储过程编写中踩的坑-----工作项目实战一

    如要转载请注明 https blog csdn net qwert789p article details 103627980 创作不易 且行且珍惜 1 项目前提 由于计费系统先上线 CRM项目后上线 前期计费系统有的建立客户账户 商品以及
  • Cursor

    Mac安装使用Mysql教程 从零开始 第一章 Mac安装MySQL 1 1 过程记录 1 2 参考 第二章 安装数据库管理软件DBeaver 2 1 过程记录 2 2 参考 第三章 DBeaver创建MySQL数据库 3 1 过程记录 3
  • mysql优化(1)show命令 慢查询日志 explain profiling

    原文地址 http zhumeng8337797 blog 163 com blog static 1007689142012095142876 suggestedreading wumii 目录 一 优化概述 二 查询与索引优化分析 1性
  • 从生产到测试,多张表但有相同的业务主键-存储过程的使用

    PL SQL Developer Test script 3 0 32 Created on 2019 4 12 by ADMINISTRATOR declare Local variables here sqh0 varchar2 20
  • 自动生成存储过程

    感觉非常有用 就记录下来 希望看到的你有帮助 函数 清理默认值 create FUNCTION dbo fnCleanDefaultValue sDefaultValue varchar 4000 RETURNS varchar 4000
  • 数据库中存储过程、函数、触发器的区别

    存储过程 函数 触发器的区别 比较项目 存储过程 函数 是否有返回值 可以有 也可以没有 必须有且只有一个 是否可以单独执行 可以 必须通过execute执行 SQL语句 DML或SELECT 可否调用 不可以 可以 且可以位于FROM关键
  • 【互联网有记忆】爬取微博热搜榜并存入数据库(python爬虫+存储过程后端实现)

    一 爬虫代码 import random time import requests re import datetime import mysql connector 定义爬取间隔 minutes interval time 15 clas
  • SQL查询一个表中根据其中一个列的属性来拼接多个列并SELECT INTO 新表显示

    将同一个表中 不同 Group 属性的添加列分成一整行 SELECT INTO VP Temp FROM SELECT DISTINCT A ID A TypeName A ItemType A isBad A sNo sNo1 A Che
  • 存储过程中SELECT INTO的使用

    在MySQL存储过程中使用SELECT INTO语句为变量赋值 用来将查询返回的一行的各个列值保存到局部变量中 要求 查询的结果集中只能有1行 SELECT col name INTO var name table expr 使用SELEC
  • SQL编程:存储过程、触发器、函数(实例基于MySQL5.7.12)

    SQL编程基础 A 编程环境 即存储过程 触发器和函数中进行SQL编程 所以有些语法并不能应用于普通的SQL应用场景 如命令行直接SQL查询 B 变量声明 1 全局变量 声明 set 变量名 值 读取 select 变量名 赋值 set 变
  • MySql创建存储过程(procedure)

    如果存储过程中含有动态SQL语句 在触发器中调用该存储过程时会报错ERROR 1336 0A000 Dynamic SQL is not allowed in stored function or trigger 该错误的含义是 函数或者触
  • 使用存储过程返回结果集

    因业务复杂 SQL较为庞大 后改造为存储过程方式 传参 获取结果集 此处只显示存储过程的结构部分 也是最重要部分 CREATE OR REPLACE PACKAGE PKG QUALITYCONTROL IS TYPE retcursor
  • mysql学习笔记(6)_存储过程

    原本觉得掌握最基本的语法就行了 但发现老师最近又提到了存储过程 我觉得有必要学习整理一下 以下是我的简单笔记 存储过程的含义以及优点 含义 一组预先编译号的sql语句的集合 理解成批处理语句 优点 1 提高代码的重用性 2 简化操作 3 减

随机推荐

  • centos python 升级3.7 及pip

    centos 7 6 1810 python3 6升级3 7 查看系统版本 开始升级 1 下载Python 3 7 0 tgz软件包 2 解压编译 3 更改默认python版本 pip2消失的话 查看系统版本 cat etc redhat
  • OSI七层协议大白话解读

    互联网的本质就是一系列的网络协议 这个协议就叫OSI协议 一系列协议 按照功能不同 分工不同 人为的分层七层 实际上这个七层是不存在的 没有这七层的概念 只是人为的划分而已 区分出来的目的只是让你明白哪一层是干什么用的 每一层都运行不同的协
  • Python的学习记录

    Python The Zen of Python by Tim Peters Beautiful is better than ugly Explicit is better than implicit Simple is better t
  • Docker安装与配置阿里云镜像加速

    一 Docker简介 1 Docker是什么 产生背景 开发和运维之间因为环境不同而导致的矛盾 不同的操作系统 软件环境 应用配置等 DevOps 集群环境下每台服务器都配置相同的环境 太麻烦 解决 在我的机器上可以正常工作 的问题 Doc
  • Java IO流处理 面试题汇总

    说明 本节内容来源于网络汇总 输入输出流是相对于内存而言的 1 面试题汇总 1 java中有几种类型的流 2021 08 19更新 从编码方式上 分为字符流和字节流 如上图可知 字节流继承inputStream和OutputStream 字
  • 第二章:25+ Python 数据操作教程(第十三节NUMPY 教程与练习)持续更新

    NumPy Numerical Python 或 Numeric Python 的缩写 是 Python 中对数组和矩阵进行快速数学计算的最基本的软件包之一 在处理多维数据时它也非常有用 集成C C 和FORTRAN工具是一件幸事 它还提供
  • vue路由在使用keep-alive缓存之后第二次进入页面created和mounted不执行问题及解决

    一 keep alive介绍 1 什么是 keep alive Vue js 中 keep alive 是一个内置组件 可以在需要缓存的组件上添加keep alive 标签 使得这个组件被缓存起来 不会被多次渲染和销毁 keep alive
  • pytest 用例依赖

    应用场景 1 创建订单之前 需要先添加购物车 2 在执行订单接口用例之前 要保证添加购物车接口用例完成 并且是pass 应用办法 可以使用pytest插件 pytest插件介绍 1 官方插件地址介绍 https docs pytest or
  • 【Lua基础系列】rawset & rawget方法

    Lua基础系列 rawset rawget方法 大家好 我是Lampard 欢迎来到Lua基础系列的博客 前文再续 书接上一回 今天和大家讲解一下lua中的rawset rawget方法 Lua基础系列 index元方法 Lua基础系列 n
  • HTML表单学习之单选按钮却可以多选的问题及解决办法

    出现这种情况的原因是如图所示 按钮没有分组 通过在input元素中添加name属性可以将两个按钮设置为同一组 单选按钮正常使用的代码如下所示
  • Mybatis配置解析-03

    1 核心配置文件 JDBC中连接数据库的URL转义 jdbc mysql localhost 3306 mybatis useSSL true amp useUnicode true amp characterEncoding utf8 m
  • 传统@ServerEndpoint方式开发WebSocket应用和SpringBoot构建WebSocket应用程序

    小Hub领读 通过websocket的两种使用方式 让你更加深入理解用法 很多人不懂websocket怎么辨别是谁发送过来的 文中说到实现WebSocketConfigurer接口 定义拦截器可以绑定用户信息 还有其他很多 细细品 对比看比
  • IDEA maven报错To see the full stack trace of the errors, re-run Maven with the -e switch

    这里写自定义目录标题 报错内容 ERROR ERROR Some problems were encountered while processing the POMs FATAL Non resolvable parent POM for
  • managed unmanaged

    Enable function level control for compiling functions as managed or unmanaged pragma managed pragma unmanaged pragma man
  • 生日快乐,Bill

    12月15日 是Bill的生日 于是我用Easyx为他做了个生日礼物比较潦草 当然中间的 initgraph 680 420 EW NOCLOSE EW DBLCLKS EW NOMINIMIZE setbkmode TRANSPARENT
  • Springboot的拦截器功能实现:

    1 写拦截器类 代码如下 package com demo config import org springframework web servlet HandlerInterceptor import javax servlet http
  • CSDN 重新开放付费资源的上传了,但要求如下

    csdn上半年关闭了付费资源的上传功能 经过几个月的优化处理 现在又重新 开放了 优化后的上传功能 必须达到一定的级别才能实现 所以并不是向以前一样 都可以上传 虽然网站上已经公布了具体的要求说明 在这里我整理了一下给大家 也就是说 想上传
  • 设置elementUi无限滚动加载时的一些注意点

    1 overflow属性是一定要有的 可以加到父节点或者自身上 否则会报错 2 容器一定要被撑开并触底 这样才会触发v infinite scroll上绑定的方法 3 设置height calc 100vh 72px 72是header的高
  • [开发

    Java中比较两个对象的指定属性的值是否相等 可以使用Apache Commons Lang库中的EqualsBuilder类 EqualsBuilder提供了一种便捷的方法来比较两个对象的属性值是否相等 具体步骤如下 通过构造器创建一个E
  • 存储过程之用返回多条数据一

    要求 拼接数据 作为多条数据返回 1 创建类型 create or replace type bb ptyxztqk Type as object d index number d name varchar2 100 d this numb