本文内容来自YashanDB官网,原文内容请见 https://www.yashandb.com/newsinfo/7802940.html?templateId=1718516

【问题分类】功能使用

【关键字】pipelined

【问题描述】

Oracle PL/SQL中包含pipelined函数的对象迁移到YashanDB会出现不兼容现象。

【问题原因分析】

Pipelined函数是一种特殊的表函数,以流方式返回结果,这样可以边处理数据边返回结果,提高性能。嵌套表是一组同类型的元素的集合,适用于存储分组结果或批量处理数据时,可以在 PL/SQL 中遍历和操作这些数据。YashanDB 不支持pipelined函数,若遇到pipelined函数,可以使用嵌套表来改写。

【解决/规避方法】

--Oracle 示例函数

CREATE OR REPLACE TYPE "T_RET_TABLE" IS TABLE OF VARCHAR2 (4000)

/

CREATE OR REPLACE FUNCTION "ROW_SPLIT" (var_str in string, var_split In String)

  return t_ret_table

  PIPELINED as

  var_tmp clob;

  var_element clob;

  n_length Number := length(var_split);

begin

  var_tmp := var_str;

  while instr(var_tmp, var_split) > 0 loop

    var_element := substr(var_tmp, 1, instr(var_tmp, var_split) - 1);

    var_tmp := substr(var_tmp,

                          instr(var_tmp, var_split) + n_length,

                          length(var_tmp));

    pipe row(var_element);

  end loop;

  pipe row(var_tmp);

  return;

end row_split;

/

--YashanDB 改写参考

CREATE OR REPLACE TYPE "T_RET_TABLE" IS TABLE OF VARCHAR2 (4000)

/

CREATE OR REPLACE FUNCTION "ROW_SPLIT" (var_str in varchar, var_split In varchar)

  return t_ret_table IS

  var_trt t_ret_table;

  var_tmp varchar2(8000);

  var_element varchar2(8000);

  n_length Number := length(var_split);

begin

  var_trt := t_ret_table();

  var_tmp := var_str;

  while instr(var_tmp, var_split) > 0 loop

    var_element := substr(var_tmp, 1, instr(var_tmp, var_split) - 1);

    var_tmp := substr(var_tmp,

                          instr(var_tmp, var_split) + n_length,

                          length(var_tmp));

    var_trt.extend(1);

    var_trt(var_trt.COUNT) := var_element;

  end loop;

  var_trt.extend(1);

  var_trt(var_trt.COUNT) := var_tmp;

  return var_trt;

end row_split;

/

【影响范围】23.2.10.100及以下版本

【修复版本】23.2.10.100

【YashanDB知识库】Oracle pipelined函数在YashanDB中的改写的更多相关文章

  1. Oracle 在函数或存储过程中执行sql查询字符串并将结果值赋值给变量

    请看黄色部分 --区县指标 THEN TVALUE_SQL := 'SELECT TO_CHAR(' || CUR_ROW.MAIN_FIELD || ') FROM ' || CUR_ROW.END ...

  2. Oracle 在函数或存储过程中执行一条插入语句并返回主键ID值

    有时,我们需要往一张表插入一条记录,同时返回主键ID值. 假定主键ID的值都是通过对应表的SEQUENCE来获得,然后进行ID赋值 这里有几种情况需要注意: 1)如果建表语句含有主键ID的触发器,通过 ...

  3. Oracle管道函数(Pipelined Table Function)介绍

    一 概述: 1.管道函数即是能够返回行集合(能够使嵌套表nested table 或数组 varray)的函数,我们能够像查询物理表一样查询它或者将其  赋值给集合变量. 2.管道函数为并行运行,在普 ...

  4. Oracle的pipelined函数实现高性能大数据处理

    从Oracle 8开始,我们就可以从一个collection类型的数据集合中查询出数据,这个集合称之为"虚拟表".它的方法是"SELECT FROM TABLE(CAST ...

  5. 转,Oracle中关于处理小数点位数的几个函数,取小数位数,Oracle查询函数

    关于处理小数点位数的几个oracle函数() 1. 取四舍五入的几位小数 select round(1.2345, 3) from dual; 结果:1.235 2. 保留两位小数,只舍 select ...

  6. Oracle中关于处理小数点位数的几个函数,取小数位数,Oracle查询函数

    Oracle中关于处理小数点位数的几个函数,取小数位数,Oracle查询函数 关于处理小数点位数的几个oracle函数()1. 取四舍五入的几位小数select round(1.2345, 3) fr ...

  7. Oracle trunc()函数,decode()函数,substr函数,GREATEST函数,java中substring函数的用法

    --Oracle trunc()函数的用法/**************日期********************/1.select trunc(sysdate) from dual --2013- ...

  8. ORACLE 表函数实现

    1.创建表对象类型. 在Oracle中想要返回表对象,必须自定义一个表类型,如下所示: create or replace type t_table is table of number; 上面的类型 ...

  9. Oracle的函数返回表类型(转)

    在SQL Server中有表变量,可以在function中方便地返回,习惯SQL Server或者需要把脚本从SQL Server转到Oracle中的朋友可以都会碰到这个问题. Oracle的func ...

  10. oracle管道函数的用法

    oracle管道函数是一类特殊的函数,oracle管道函数返回值类型必须为集合,下面将介绍oracle管道函数的语法. 在普通的函数中,使用dbms_output输出的信息,需要在服务器执行完整个函数 ...

随机推荐

  1. 墨天轮访谈 | IvorySQL王志斌—IvorySQL,一个基于PostgreSQL的兼容Oracle的开源数据库

    分享嘉宾:王志斌 瀚高IvorySQL产品经理 整理:墨天轮社区 导读 大家好,我是瀚高IvorySQL产品经理王志斌,IvorySQL是基于PostgreSQL的衍生开源项目. 我今天分享的内容主要 ...

  2. markdown.css 设置文章的样式

    返回的详情文章内容是标签加内容文字,使用 markdown,css 渲染样式 : .markdown-body .octicon { display: inline-block; fill: curr ...

  3. 014 Python 的数据类型(数字、字符串、列表、字典)

    #!/usr/bin/env python # -*- coding:utf-8 -*- # Datatime:2022/7/24 20:31 # Filename:014 Python 的数据类型( ...

  4. 关系图谱后端不给指向性字段使用children

    .markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...

  5. 在 VMware vSphere 中构建 Kubernetes 存储环境

    作者:马伟,青云科技容器顾问,云原生爱好者,目前专注于云原生技术,云原生领域技术栈涉及 Kubernetes.KubeSphere.kubekey等. 相信很多小伙伴和企业在构建容器集群时都会考虑存储 ...

  6. JS 通过后台接口返回的URL地址下载文件并保存到本地(已在项目中使用,保存音视频文件)

    今天做antdV表格勾选下载操作时,因为粗心大意碰到了下载问题,特此记录~ 一.单个文件下载逻辑代码如下: const exportFile = (data, fileName, _this)=> ...

  7. Maven 项目获取 git 分支、提交等信息

    git-commit-id-plugin 是一个 Maven 插件,用于在 Maven 项目的构建过程中自动获取 git 仓库的信息,如最后一次提交的 ID.分支名称.构建时间等,并将这些信息注入到项 ...

  8. 3.11 Linux删除空目录(rmdir命令)

    和 mkdir 命令(创建空目录)恰好相反,rmdir(remove empty directories 的缩写)命令用于删除空目录,此命令的基本格式为: [root@localhost ~]# rm ...

  9. [NOIP2022] 比赛 随机排列 部分分

    看到最大值,考虑使用单调栈搞出 \([la_i, ra_i], [lb_i, rb_i]\) 表示这一段区间 \(i\) 是 \(a, b\) 的最大值.预处理是简单的. inline void in ...

  10. Go语言:未指定类型的常量(untyped int constant)和大整数的关系

    运行下面的代码: 点击查看代码 package main import "fmt" const ( Big = 1 << 100 ) func needFloat(x ...