DB2递归函数返回TABLE对象 和 Mysql递归函数返回Varchar类型

2023-05-16

DB2数据库中

1. 使用TABLE对象构建临时表

values(("1","a"),("2",b"),("3","c"),("4","d"),("e","f"));

select * from Table(DIM_BRANCH_RECU('0706677A2'));

2. 递归函数的构建

在以上查询语句中DIM_BRANCH_RECU('0706677A2') 是一个递归函数,返回一个TABLE对象,该对象中包含某机构下面所有的分支机构

SET SCHEMA EDW;

SET CURRENT PATH = "SYSIBM","SYSFUN","SYSPROC","SYSIBMADM","EDW";

CREATE FUNCTION "EDW"."DIM_BRANCH_RECU"
 ("P_BRNNBR" VARCHAR(20)
 ) 
  RETURNS TABLE
   ("BRNNBR" VARCHAR(20),
    "BRNNAME" VARCHAR(42),
    "UPPERBRN" VARCHAR(20),
    "ORDERNO" INTEGER
   )
  SPECIFIC "EDW"."DIM_BRANCH_RECU"
  LANGUAGE SQL
  DETERMINISTIC
  READS SQL DATA
  STATIC DISPATCH
  CALLED ON NULL INPUT
  NO EXTERNAL ACTION
  INHERIT SPECIAL REGISTERS
  RETURN
with banktmp(brnnbr,brnname,upperbrn,orderno) as (
  select t0.brnnbr,t0.brnname,t0.upperbrn,orderno
    from DIM_BRANCH t0
    where t0.brnnbr=P_BRNNBR
  union all
  select t2.brnnbr,t2.brnname,t2.upperbrn,t2.orderno
    from DIM_BRANCH t2,banktmp t1
    where t2.upperbrn=t1.brnnbr
      and t2.brnnbr<>t2.upperbrn )
  select t.brnnbr,t.brnname,t.upperbrn,t.orderno
    from banktmp t;

COMMENT ON FUNCTION "EDW"."DIM_BRANCH_RECU"
 (VARCHAR(20)
 ) 
  IS '/***
*** 机构递归查询,不要删除
*** created:XXXX
***time:2013-07-13
***/'';';

3. 在Mysql中建立相同表,导入数据

DELIMITER $$

USE `edwdb`$$

DROP FUNCTION IF EXISTS `DIM_BRANCH_RECU`$$

CREATE DEFINER=`root`@`localhost` FUNCTION `DIM_BRANCH_RECU`( I_BRNNBR VARCHAR(20)) RETURNS VARCHAR(10000) CHARSET gbk
BEGIN
   DECLARE sTemp VARCHAR(1000); 
   DECLARE sTempChd VARCHAR(1000);     
   SET sTemp = '$'; 
   SET sTempChd =CAST(I_BRNNBR AS CHAR); 
   WHILE sTempChd IS NOT NULL DO
       SET sTemp = CONCAT(sTemp,',',sTempChd); 
       SELECT GROUP_CONCAT(`BRNNBR`) INTO sTempChd FROM `dim_branch` WHERE FIND_IN_SET(`UPPERBRN`,sTempChd)>0; 
   END WHILE;
   RETURN sTemp;
END$$

DELIMITER ;

以上查询返回一个varchar类型的结果集,该结果集只包括某机构及其下面的所以分支机构的id号,然后可以通过查询语句得到想要的结果

SELECT * FROM dim_branch WHERE FIND_IN_SET(`BRNNBR`,DIM_BRANCH_RECU("070667800"));


 


 

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

DB2递归函数返回TABLE对象 和 Mysql递归函数返回Varchar类型 的相关文章

  • 为表多次指定了 xxx 列

    我正在尝试将 db2 简单查询调整为 SQL SERVER 该查询在 db2 上运行良好 select from pb console users u join select from pb console users user role
  • Hibernate、MySQL 视图和 hibernate.hbm2ddl.auto = 验证

    我可以在 Hibernate 中使用 MySQL 视图 将它们视为表 即 该实体与为表创建的实体没有什么不同 但是 当 Hibernate 设置为验证模型时 我的应用程序将不会部署 因为它找不到视图 因为它假设它是一个表 是否可以在启用部署
  • MySQL如何进行浮点加法的数学计算?

    我测试过SELECT 0 1 0 2 用MySQL MariaDB 查询 它返回了正确的答案 MariaDB none gt SELECT 0 1 0 2 0 1 0 2 0 3 1 row in set 0 000 sec 在大多数编程语
  • 将 php filter_var 与 mysql_real_escape_string 结合使用

    我想首先说 我意识到 PDO mysqli 是新标准 并且已被 SO 广泛覆盖 然而 在这种特殊情况下 我没有时间在启动客户端站点之前将所有查询转换为 PDO 以下内容已在网站上的大多数查询中使用 我可以补充一下 这不是我所使用的 user
  • 启动服务器后,带有sequelize的Nodejs无法在mysql工作台中创建表

    我开始学习如何使用构建 Rest APINodejs Expressjs Sequelize and MySQL using Mysqlworkbench 我的问题 启动服务器后 该表不是由Sequelize并且没有表Mysqlworkbe
  • 防止重复数据输入mysql数据库

    我试图让我的电子邮件订阅服务拒绝数据库中已存在的电子邮件 这样用户就不会订阅同一封电子邮件两次 这就是我所拥有的 但它不起作用 有什么想法吗
  • PHP 5.4 PDO 无法使用旧的不安全身份验证连接到 MySQL 4.1+

    我知道有很多类似的问题 事实上我已经阅读了所有 9 个问题 但是 他们都没有解决我的问题 我有一个共享托管包 最低限度 我的包中包含域名和托管 MySQL 服务器的单独 IP 地址 为了开发 我正在使用http localhost 与 PH
  • 存储过程函数中的动态表名

    我编写了一个存储过程函数来从表中获取名称 问题是我希望将表名作为参数传入 有几个不同的表我需要使用此函数 DELIMITER CREATE DEFINER root localhost FUNCTION getName tableName
  • MySQL LAST_INSERT_ID() 和 FOUND_ROWS()

    当 PHP 脚本每秒有数百个查询时会发生什么 它会影响这些函数吗 是否保证它们会返回当前脚本中最后一个插入语句中最后插入的 id 它会返回当前脚本中最后一次选择的行数吗 如果同时从另一个脚本进行新的插入或选择 在 FOUND ROWS 的情
  • 选择每组最新的项目[重复]

    这个问题在这里已经有答案了 可能的重复 检索每组中的最后一条记录 https stackoverflow com questions 1313120 retrieving the last record in each group 我有 2
  • MySQL 查询中的窗口函数

    有没有办法在 SELECT 查询本身中动态地使用 MySQL 查询中的窗口函数 我知道在 PostgreSQL 中这是可能的 例如 下面是 PostgreSQL 中的等效查询 SELECT c server ip c client ip s
  • 将sql查询结果写入mysql中的文件

    我正在尝试使用 mysql 将查询结果写入文件 我在一些地方看到了有关 outfile 构造的一些信息 但似乎这只将文件写入正在运行 MySQL 的机器 在本例中是远程机器 即数据库不在我的本地机器上 或者 我还尝试运行查询并从 mysql
  • mysql 中 INSERT 语句的计算列

    假设我想要一个表来记录其他表中的日期和列数 或者任何类型的数学 字符串连接等 CREATE TABLE log id INTEGER NOT NULL AUTO INCREMENT date DATETIME NOT NULL count
  • 通过字符串操作预防 PHP SQL 注入[重复]

    这个问题在这里已经有答案了 可能的重复 PHP 中防止 SQL 注入的最佳方法 https stackoverflow com questions 60174 best way to prevent sql injection in php
  • 通过 PDO 将双精度数插入 MySQL 时精度损失

    我遇到了这种非常烦人的行为 我想知道我是否做错了什么 或者这是否是故意的 如果是的话 为什么 每当我在 php 5 3 中有一个 double 类型的变量 并且想将其插入到数据库 MYSQL 5 0 的 double 类型字段中时 该值总是
  • MySQL解释更新

    作为我大学复习的一部分 我试图回答以下问题 至少在表的一个属性上创建索引 employees 数据库 您可以在其中使用 MySQL EXPLAIN 工具 清楚地显示好处 在条款或检索方面 和负面 在 更新条款 创建相关索引的信息 对于第一部
  • 法语和西班牙语的特殊字符可以保存在 varchar 中吗?

    法语和西班牙语中有普通英语中不使用的特殊字符 重音元音等 varchar 是否支持这些字符 或者我需要一个 nvarchar 吗 注 我愿意NOT希望讨论我是否应该使用 nvarchar 还是 varchar 您在谈论什么 SQL 实现 我
  • 软删除最佳实践(PHP/MySQL)

    Problem 在处理产品和订单的 Web 应用程序中 我想维护前员工 用户 与他们处理的订单之间的信息和关系 我想维护过时产品和包含这些产品的订单之间的信息和关系 然而 我希望员工能够整理管理界面 例如删除前员工 过时的产品 过时的产品组
  • MySQL - 从另一个表插入与常量合并的数据

    我有一个包含一些数据的临时表 products temp 并且我有另一个需要将数据插入其中的表 产品 我需要在新记录上手动设置一些常量 例如vendor id 1等 是否可以在一次请求中插入临时表数据和常量 临时产品 product nam
  • 如何限制两个表之间一对多关系中的多个数量?

    我有一个带有两个 MySql 表的 MySQL 数据库 第一个是第一个表 表 A 有一列具有唯一值 从值 从 1 到 n 在第二个表 2 表 B 中 我有两列 在第一个表中我有一个名称 在第二个我的值从 1 到 n 如果我在 中添加一个值

随机推荐