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

在oracle SQL中创建返回表的函数

这是我的职责

create or replace FUNCTION split(i_str    IN  VARCHAR2,i_delim  IN  VARCHAR2 DEFAULT ':'
) RETURN TABLE  
AS 
BEGINRETURN SELECT trim(regexp_substr(i_str, '[^'||i_delim||']+', 1, LEVEL)) str FROM projetCONNECT BY instr(i_str, i_delim, 1, LEVEL - 1) > 0;
END;

这是错误代码

PLS-00103: Encountered the symbol "SELECT" when expecting one of the following:     ( - + ; case mod new not null <an identifier>    <a double-quoted delimited-identifier> <a bind variable>    continue avg count current exists max min prior sql stddev    sum variance execute forall merge time timestamp interval    date <a string literal with character set specification>    <a number> <a single-quoted SQL string> pipe    <an alternatively-quoted string literal with character set specification>    <an altern
Errors: check compiler log

如果有人能帮我纠正这个代码,使它能正常工作

 发布于 2 年前

✅ 最佳回答:

avatar

返回数据集的一种方法是使用SYS_REFCURSOR。这种函数不能从SQL调用,但可以从编程语言(例如PL/SQL和C)调用。

CREATE OR REPLACE FUNCTION split
(i_str    IN  VARCHAR2,i_delim  IN  VARCHAR2 DEFAULT ':'
) RETURN SYS_REFCURSOR
ASv_cursor SYS_REFCURSOR;
BEGINOPEN v_cursor FORSELECT trim(regexp_substr(i_str, '[^'||i_delim||']+', 1, LEVEL)) str FROM DUALCONNECT BY instr(i_str, i_delim, 1, LEVEL - 1) > 0;RETURN v_cursor;
END split;

返回数据集的另一种方法是流水线函数。为此,您需要创建一个匹配的集合类型。

CREATE OR REPLACE TYPE type_table_of_varchar2 IS TABLE OF VARCHAR2(4000);CREATE OR REPLACE FUNCTION split
(i_str    IN  VARCHAR2,i_delim  IN  VARCHAR2 DEFAULT ':'
) RETURN type_table_of_varchar2 PIPELINED
AS
BEGINFOR rec IN(SELECT trim(regexp_substr(i_str, '[^'||i_delim||']+', 1, LEVEL)) AS str FROM projetCONNECT BY instr(i_str, i_delim, 1, LEVEL - 1) > 0) LOOPPIPE ROW (rec.str);END LOOP;
END split;

可以从SQL调用流水线函数:

SELECT * FROM TABLE( split('ABC:DEF:GHI') );

顺便说一下,我用FROM DUAL替换了FROM projet,因为您的查询与projet表数据无关。

http://www.lryc.cn/news/113547.html

相关文章:

  • Kubernetes API Aggregation API聚合
  • 【雕爷学编程】Arduino动手做(184)---快餐盒盖,极低成本搭建机器人实验平台
  • 重生学c++系列第三课类和对象(上)
  • 驱动开发-按键中断
  • 数据结构 | 二叉树的应用
  • python:卡尔曼和贝叶斯滤波器
  • 走进 Go 语言基础语法 | 青训营 (1)
  • 基于边缘无线协同感知的低功耗物联网LPIOT技术:赋能智慧园区方案以及数字工厂领域
  • 【《快速构建AI应用——AWS无服务器AI应用实战》——基于云的解决方案快速完成人工智能项目的指南】
  • vue运行在IE浏览器空白报错SCRIPT1006: 缺少‘)‘ -【vue兼容IE篇】
  • 接口自动化测试Mock Get和Post请求
  • WPF上位机8——C#与MySQL
  • [JAVAee]网络编程-套接字Socket
  • 批量导出pdf为zip文件(可以修改zip中pdf名称)
  • [国家集训队] Tree II 题解报告
  • 【redis】docker搭建redis集群
  • 前端个人年度工作述职报告(二十篇)
  • TypeScript 编译配置
  • 使用DMA传输实现单片机高效串口转发——以STM32系列为例
  • 一文了解 Android Auto 车载开发~
  • Pixel4 安卓源码及内核修改编译教程 | 基于Android12 AOSP
  • 如何做好Code Review
  • Unity技术框架集合、Unity技术栈汇总
  • 安卓SDK开发的一些疑问
  • 【基础类】—三栏页面布局的方案和优缺点
  • OPENCV C++(四)形态学操作+连通域统计
  • tomcat上部署jpress
  • 篇十:外观模式:简化复杂系统
  • linux gcc __attribute__
  • 【SpringCloud】RabbitMQ基础