当前位置: 首页 > article >正文

【YashanDB知识库】Oracle pipelined函数在YashanDB中的改写

本文内容来自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


http://www.kler.cn/a/449970.html

相关文章:

  • Unity3D仿星露谷物语开发5之角色单例模式
  • 一网多平面
  • springboot vue 会员营销系统
  • 再服务器上建立新的编译环境
  • 如何在自己的云服务器上部署mysql
  • Debian11 安装MYSQL8 签名错误
  • 蓝桥杯练习生第四天
  • Blazor 直接读取并显示HTML 文件内容
  • VSCode如何修改默认扩展路径和用户文件夹目录到D盘
  • 关于mac—address
  • linux安装宝塔面板及git
  • 基于Spring Boot的个性化推荐外卖点餐系统
  • HarmonyOS(72)事件拦截处理详解
  • Certifying LLM Safety against Adversarial Prompting
  • 网络管理 详细讲解
  • 网络安全(一)主动攻击之DNS基础和ettercap实现DNS流量劫持
  • BOE(京东方)“向新2025”年终媒体智享会落地成都 持续创新引领产业步入高价值增长新纪元
  • MongoDB教程001:基本常用命令(数据库操作和集合操作)
  • 跨模态知识迁移:基于预训练语言模型的时序数据建模
  • WebRTC服务质量(08)- 重传机制(05) RTX机制
  • js按首字母分组和排序
  • 【华为OD-E卷-箱子之字形摆放 100分(python、java、c++、js、c)】
  • c# 后台任务自动执行
  • springboot476基于vue篮球联盟管理系统(论文+源码)_kaic
  • 【NLP高频面题 - Transformer篇】Transformer的位置编码是如何计算的?
  • 验证码机制