本文内容来自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. mysql用户相关操作(转载)

    mysql用户相关操作 一. 创建用户 命令: CREATE USER 'username'@'host' IDENTIFIED BY 'password'; 说明: username:你将创建的用户 ...

  2. Linux内核虚拟内存管理之匿名映射缺页异常分析

    今天我们就来讨论下这种缺页异常,让大家彻底理解它.注:本文使用linux-5.0内核源代码.文章分为以下几节内容: 匿名映射缺页异常的触发情况 0页是什么?为什么使用0页? 源代码分析 3.1 触发条 ...

  3. mmap映射类型

    文件映射和匿名映射都是操作系统中对于内存映射的两种类型,主要应用于进程间的通信或者大量数据的处理. 文件映射,也就是内存映射文件,是把一个文件或者文件的一部分映射到进程的地址空间,它允许对文件进行随机 ...

  4. jwt实现登录 和 接口实现动态权限

    [Authorize]   ====   using Microsoft.AspNetCore.Authorization; 登录的 DTO namespace login; public class ...

  5. promise是什么?它有哪些作用?

    promsie是es6新增的特性,用来解决回调地狱的问题(异步深层嵌套问题) : 也叫做期约函数,是js内部的构造函数 ,可以当作一个容器,里面保存着某个未来才会结束的事件,比如异步请求 :

  6. 实战!oracle 11g一键安装脚本分享

    分享一个常用的数据库一键安装脚本,大家可以从我的网盘进行下载 链接: https://pan.baidu.com/s/1iV-0zeXrwhJxJcm9qA_P_g 提取码: apbc 脚本内容: # ...

  7. AI五子棋_01 Python的网络通信

    AI五子棋 第一步 第一步 服务器是交战的战场,我们的AI大脑想要参战,先得找到去战场的路. 任务 1 写程序从以下网址取得下一步的指示 http://2**.2**.**.1**:9012/step ...

  8. redis的CPA三进二原则

    CAP C:consistency,数据在多个副本中能保持一致的状态. A:Availability,整个系统在任何时刻都能提供可用的服务,通常达到99.99%四个九可以称为高可用 P:Partiti ...

  9. idea项目提交到码云

    第一步:创建一个项目 第二步:在码云上新建一个项目.[注意把使用Readme复选框取消掉] 第三步:复制gitee地址 第四步:创建本地git仓库 第五步:选择自己需要上传到码云的项目名 第六步:提交 ...

  10. CodeQL学习笔记(1)-QL语法(逻辑连接词、量词、聚合词、谓词和类)

    最近在学习CodeQL,对于CodeQL就不介绍了,目前网上一搜一大把.本系列是学习CodeQL的个人学习笔记,根据个人知识库笔记修改整理而来的,分享出来共同学习.个人觉得QL的语法比较反人类,至少与 ...