oracle 多个字符替换实现

CSDN上的一个网友,需要一个%ignore_a_1%的解决方案需求是这样的求写oracle多个字符替换(有测试数据)

代码如下:
create table A_TEST
(
PAYOUT_ITEM_CODE VARCHAR2(30) not null,
FORMULA_DET VARCHAR2(1000)
)

create table B_TEST
(
ELEMENT_ID VARCHAR2(5) not null,
NAME VARCHAR2(41)
)

FORMULA_DET列里ELEMENT_ID替换成NAME
测试数据如下
代码如下:
insert into a_test (PAYOUT_ITEM_CODE, FORMULA_DET)
values (‘30228’, ‘({30015}+{30016})*450’);
insert into a_test (PAYOUT_ITEM_CODE, FORMULA_DET)
values (‘30102’, ‘({30015}+{30016})*1500’);
insert into a_test (PAYOUT_ITEM_CODE, FORMULA_DET)
values (‘30102’, ‘({30015}+{30016})*5000’);
insert into a_test (PAYOUT_ITEM_CODE, FORMULA_DET)
values (‘30102’, ‘({30015}+{30016})*2500’);
insert into a_test (PAYOUT_ITEM_CODE, FORMULA_DET)
values (‘30102’, ‘({30015}+{30016})*2300’);
insert into a_test (PAYOUT_ITEM_CODE, FORMULA_DET)
values (‘30102’, ‘({30015}+{30016})*1150’);
insert into a_test (PAYOUT_ITEM_CODE, FORMULA_DET)
values (‘30104’, ‘({30015}+{30016})*300*12’);
insert into a_test (PAYOUT_ITEM_CODE, FORMULA_DET)
values (‘30226’, ‘{30057}*2300’);
insert into a_test (PAYOUT_ITEM_CODE, FORMULA_DET)
values (‘30102’, ‘({30015}+{30016})*5000’);
insert into a_test (PAYOUT_ITEM_CODE, FORMULA_DET)
values (‘30102’, ‘({30015}+{30016})*3000’);
insert into a_test (PAYOUT_ITEM_CODE, FORMULA_DET)
values (‘30102’, ‘({30015}+{30016})*1500’);
insert into a_test (PAYOUT_ITEM_CODE, FORMULA_DET)
values (‘30226’, ‘{30006}+{30061}+{30008}’);
insert into a_test (PAYOUT_ITEM_CODE, FORMULA_DET)
values (‘30226’, ‘{30057}*3800*12’);
insert into a_test (PAYOUT_ITEM_CODE, FORMULA_DET)
values (‘30210’, ‘({30030}+{30031}+{30032})*38000+{30033}*23000’);
insert into a_test (PAYOUT_ITEM_CODE, FORMULA_DET)
values (‘30210’, ‘({30030}+{30031}+{30032}+{30033})*38000+{30036}*10000’);
insert into a_test (PAYOUT_ITEM_CODE, FORMULA_DET)
values (‘30229’, ‘({30015}+{30016})*1400’);
insert into a_test (PAYOUT_ITEM_CODE, FORMULA_DET)
values (‘30228’, ‘({30015}+{30016})*450’);
insert into a_test (PAYOUT_ITEM_CODE, FORMULA_DET)
values (‘30216’, ‘({30015}+{30016})*1300’);
insert into a_test (PAYOUT_ITEM_CODE, FORMULA_DET)
values (‘30216’, ‘({30015}+{30016})*650’);
insert into a_test (PAYOUT_ITEM_CODE, FORMULA_DET)
values (‘30307’, ‘({30015}+{30016})*360’);
insert into a_test (PAYOUT_ITEM_CODE, FORMULA_DET)
values (‘30302’, ‘{30051}’);
insert into a_test (PAYOUT_ITEM_CODE, FORMULA_DET)
values (‘30302’, ‘{30052}’);
insert into a_test (PAYOUT_ITEM_CODE, FORMULA_DET)
values (‘30302’, ‘{30053}’);
insert into a_test (PAYOUT_ITEM_CODE, FORMULA_DET)
values (‘30302’, ‘{30054}’);
insert into a_test (PAYOUT_ITEM_CODE, FORMULA_DET)
values (‘30302’, ‘{30055}’);
insert into a_test (PAYOUT_ITEM_CODE, FORMULA_DET)
values (‘30302’, ‘{30056}’);
insert into a_test (PAYOUT_ITEM_CODE, FORMULA_DET)
values (‘30226’, ‘{30057}*4000’);
insert into a_test (PAYOUT_ITEM_CODE, FORMULA_DET)
values (‘30226’, ‘{30057}*3800’);
insert into a_test (PAYOUT_ITEM_CODE, FORMULA_DET)
values (‘30226’, ‘{30057}*100*12’);
insert into a_test (PAYOUT_ITEM_CODE, FORMULA_DET)
values (‘30226’, ‘{30057}*500*12’);
insert into a_test (PAYOUT_ITEM_CODE, FORMULA_DET)
values (‘30226’, ‘{30060}*0’);
insert into a_test (PAYOUT_ITEM_CODE, FORMULA_DET)
values (‘30226’, ‘{30057}/{30057}*150000’);
insert into a_test (PAYOUT_ITEM_CODE, FORMULA_DET)
values (‘30226’, ‘{30057}*6000’);

代码如下:
insert into b_test (ELEMENT_ID, NAME)
values (‘30006’, ‘a1’);
insert into b_test (ELEMENT_ID, NAME)
values (‘30008’, ‘a2’);
insert into b_test (ELEMENT_ID, NAME)
values (‘30009’, ‘a3’);
insert into b_test (ELEMENT_ID, NAME)
values (‘30010’, ‘a4’);
insert into b_test (ELEMENT_ID, NAME)
values (‘30015’, ‘a5’);
insert into b_test (ELEMENT_ID, NAME)
values (‘30016’, ‘a6’);
insert into b_test (ELEMENT_ID, NAME)
values (‘30017’, ‘a7’);
insert into b_test (ELEMENT_ID, NAME)
values (‘30018’, ‘a8’);
insert into b_test (ELEMENT_ID, NAME)
values (‘30019’, ‘a9’);
insert into b_test (ELEMENT_ID, NAME)
values (‘30020’, ‘a10’);
insert into b_test (ELEMENT_ID, NAME)
values (‘30021’, ‘a11’);
insert into b_test (ELEMENT_ID, NAME)
values (‘30022’, ‘a12’);
insert into b_test (ELEMENT_ID, NAME)
values (‘30023’, ‘a13’);
insert into b_test (ELEMENT_ID, NAME)
values (‘30024’, ‘a14’);
insert into b_test (ELEMENT_ID, NAME)
values (‘30025’, ‘a15’);
insert into b_test (ELEMENT_ID, NAME)
values (‘30026’, ‘a16’);
insert into b_test (ELEMENT_ID, NAME)
values (‘30027’, ‘a17’);
insert into b_test (ELEMENT_ID, NAME)
values (‘30028’, ‘a18’);
insert into b_test (ELEMENT_ID, NAME)
values (‘30029’, ‘a19’);
insert into b_test (ELEMENT_ID, NAME)
values (‘30030’, ‘a20’);
insert into b_test (ELEMENT_ID, NAME)
values (‘30031’, ‘a21’);
insert into b_test (ELEMENT_ID, NAME)
values (‘30032’, ‘a22’);
insert into b_test (ELEMENT_ID, NAME)
values (‘30033’, ‘a23’);
insert into b_test (ELEMENT_ID, NAME)
values (‘30034’, ‘a24’);
insert into b_test (ELEMENT_ID, NAME)
values (‘30035’, ‘a25’);
insert into b_test (ELEMENT_ID, NAME)
values (‘30036’, ‘a26’);
insert into b_test (ELEMENT_ID, NAME)
values (‘30037’, ‘a27’);
insert into b_test (ELEMENT_ID, NAME)
values (‘30038’, ‘a28’);
insert into b_test (ELEMENT_ID, NAME)
values (‘30039’, ‘a29’);
insert into b_test (ELEMENT_ID, NAME)
values (‘30040’, ‘a30’);
insert into b_test (ELEMENT_ID, NAME)
values (‘30041’, ‘a31’);
insert into b_test (ELEMENT_ID, NAME)
values (‘30042’, ‘a32’);
insert into b_test (ELEMENT_ID, NAME)
values (‘30043’, ‘a33’);
insert into b_test (ELEMENT_ID, NAME)
values (‘30044’, ‘a34’);
insert into b_test (ELEMENT_ID, NAME)
values (‘30045’, ‘a35’);
insert into b_test (ELEMENT_ID, NAME)
values (‘30046’, ‘a36’);
insert into b_test (ELEMENT_ID, NAME)
values (‘30047’, ‘a37’);
insert into b_test (ELEMENT_ID, NAME)
values (‘30048’, ‘a38’);
insert into b_test (ELEMENT_ID, NAME)
values (‘30049’, ‘a39’);
insert into b_test (ELEMENT_ID, NAME)
values (‘30050’, ‘a40’);
insert into b_test (ELEMENT_ID, NAME)
values (‘30051’, ‘a41’);
insert into b_test (ELEMENT_ID, NAME)
values (‘30052’, ‘a42’);
insert into b_test (ELEMENT_ID, NAME)
values (‘30053’, ‘a43’);
insert into b_test (ELEMENT_ID, NAME)
values (‘30054’, ‘a44’);
insert into b_test (ELEMENT_ID, NAME)
values (‘30055’, ‘a45’);
insert into b_test (ELEMENT_ID, NAME)
values (‘30056’, ‘a46’);
insert into b_test (ELEMENT_ID, NAME)
values (‘30057’, ‘a47’);
insert into b_test (ELEMENT_ID, NAME)
values (‘30058’, ‘a48’);
insert into b_test (ELEMENT_ID, NAME)
values (‘30059’, ‘a49’);
insert into b_test (ELEMENT_ID, NAME)
values (‘30060’, ‘a50’);
insert into b_test (ELEMENT_ID, NAME)
values (‘30061’, ‘a51’);

这个如果用function或者是sp做,就没有什么难度了。
但是用sql做就比较难度了
代码如下:
select gid, payout_item_code, formula_det, max(substr(txt, 1, length(txt)-1)) from (
select a.gid,
a.payout_item_code,
a.formula_det,
replace(sys_connect_by_path(decode(b.element_id, null, a.signal, replace(signal, b.element_id, b.name)),’##’), ‘##’, ”) txt
from
(select gid, payout_item_code, formula_det, row_number() over(partition by gid order by level) rn,
substr(formula_det, decode(rownum-(allcnt-selfcnt), 1, 1, instr(formula_det, ‘}’, 1, rownum-(allcnt-selfcnt)-1)+1), instr(formula_det, ‘}’, 1, rownum-(allcnt-selfcnt))-decode(rownum-(allcnt-selfcnt), 1, 0, instr(formula_det, ‘}’, 1, rownum-(allcnt-selfcnt)-1))) signal
from (select a.payout_item_code, a.rowid gid,
a.formula_det||’}’ formula_det,
length(a.formula_det) –
length(replace(a.formula_det, ‘}’, ”)) + 1 selfcnt,
sum(length(a.formula_det) – length(replace(a.formula_det, ‘}’, ”))+1) over(order by rowid) allcnt, sum(length(a.formula_det) – length(replace(a.formula_det, ‘}’, ”))+1) over() sumcnt
from a_test a) t1
start with (allcnt-selfcnt)=0 connect by rownum 0) a
left join b_test b on instr(a.signal||’}’, ‘{‘||b.element_id||’}’, 1, 1)>0
start with a.rn = 1 connect by prior a.gid = a.gid and prior a.rn + 1 = a.rn)
group by gid, payout_item_code, formula_det

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1043214.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月2日 05:26:14
下一篇 2025年12月2日 05:27:05

相关推荐

  • html5导出excel表格_使用前端库生成Excel文件【方法】

    可在%ignore_a_1%中用前端库直接生成Excel:一、SheetJS适合快速导出JSON/HTML为.xlsx;二、exceljs支持样式和公式但体积大;三、HTML表格转.xls为轻量兼容方案。 如果您希望在浏览器中直接生成并导出 Excel 文件,而无需后端参与,则可以借助轻量级前端 J…

    2025年12月23日
    200
  • html如何连接_连接HTML与数据库或API接口【接口】

    HTML无法直接连接数据库或调用API,需借助JavaScript fetch、PHP中转、Node.js后端或Python Flask等服务端技术实现动态数据交互。 如果您希望在网页中动态获取数据,HTML本身无法直接连接数据库或调用API接口,必须借助服务器端语言或JavaScript等客户端技…

    2025年12月23日
    000
  • html5开发如何开发_HTML5应用从开发到部署全流程【开发】

    HTML5应用开发需经五大环节:一、搭建本地环境(VS Code+Live Server);二、编写语义化HTML5结构;三、集成CSS3/ES6特性并兼容旧浏览器;四、嵌入音视频与离线存储;五、跨设备测试兼容性。 如果您计划构建一个HTML5应用,从编写代码到最终上线运行,需要覆盖开发环境搭建、编…

    2025年12月23日
    000
  • html 如何弹窗_使用HTML与JavaScript实现弹窗【实现】

    需结合HTML与JavaScript实现弹窗:一、用alert/confirm/prompt;二、自定义模态框(HTML结构+CSS样式+JS控制);三、data属性传参复用;四、禁滚动并聚焦;五、Esc键关闭。 如果您希望在网页中显示一个临时的提示窗口,用于展示信息、确认操作或收集用户输入,则需要…

    2025年12月23日
    200
  • 使用CSS实现可滚动、自适应边界的Flex Wrap容器

    本教程详细阐述了如何纯粹使用CSS,创建一个可滚动且不超出父容器边界的Flex Wrap布局。核心解决方案在于结合父容器的position: relative与子容器的position: absolute、height: 100%、width: 100%及overflow: scroll属性。文章将…

    2025年12月23日
    000
  • Java JDBC中SQL INSERT语句的常见语法错误及修复指南

    本文旨在解决java jdbc应用中常见的sql `insert`语句语法错误,特别是因缺少括号而导致的错误。我们将深入分析错误信息,指出问题根源,并提供正确的sql语句范例及java jdbc `preparedstatement`的使用方法。文章还将涵盖jdbc数据库操作的最佳实践、错误处理和调…

    2025年12月23日
    000
  • java怎么编译运行.html_java编译运行.html方法【教程】

    Java程序的编译运行与HTML无关,需使用JDK。1. 编写HelloWorld.java文件;2. 命令行执行javac HelloWorld.java生成.class文件;3. 执行java HelloWorld运行程序。注意:HTML是网页标记语言,不能直接运行Java代码,勿将二者混淆。确…

    2025年12月23日
    000
  • html文档中含有java怎么运行_html含java运行方法【教程】

    现代浏览器不支持Java Applet,推荐通过JavaScript调用Java后端服务或使用WebAssembly运行Java代码。 如果您在HTML文档中嵌入了Java代码,但发现无法正常运行,这通常是因为现代浏览器不再支持Java小程序(Applet)或相关插件。以下是几种实现HTML中Jav…

    2025年12月23日
    000
  • 怎么运行html的applet小程序_运行html applet小程序步骤【指南】

    现代浏览器已不再默认支持Java Applet,需通过安装JRE、启用插件、使用支持NPAPI的旧版浏览器(如Firefox 52.9 ESR)、调整Java安全级别至中,并将网站添加到例外站点列表方可运行。 如果您在尝试运行HTML中的Applet小程序时遇到问题,可能是因为现代浏览器已不再默认支…

    2025年12月23日
    000
  • html5项目怎么运行_运行html5项目步骤【指南】

    运行HTML5项目无需复杂配置,只需正确组织文件并通过浏览器或本地服务器打开。首先确保项目包含index.html、CSS、JS等基本文件,结构清晰;可直接双击HTML文件用浏览器打开,适用于静态页面;若涉及Ajax或模块加载,需使用本地服务器,如Python命令python -m http.ser…

    2025年12月23日
    000
  • Linux polybar状态栏,HTML+CSS加载进度实时!

    可通过 Bash 脚本在 Polybar 中模拟 HTML+CSS 风格进度条,利用 %{F#color} 标记和块字符 ▮ 动态显示已完成与未完成部分,结合实时任务进度输出格式化文本。 如果您希望在 Linux 的 Polybar 状态栏中显示一个基于 HTML+CSS 风格的加载进度条,并实时反…

    2025年12月23日
    000
  • 解决HTML表格行间距问题的CSS技巧

    本文旨在解决%ignore_a_1%表格中因元素默认外边距导致的意外行间距问题。通过深入分析,我们发现即使应用`border-collapse: collapse;`,内部块级元素的默认外边距仍可能制造间隙。教程提供了两种有效的css解决方案:一是使用递归选择器统一清除容器内所有子元素的默认外边距;…

    2025年12月23日
    000
  • CSS多行文本截断:无省略号的实现方法

    本文将详细介绍如何在%ignore_a_1%中实现多行文本截断,同时避免显示传统的省略号。通过精确计算文本行高并设置固定容器高度,结合`overflow: hidden`属性,开发者可以实现对溢出文本的干净截断,适用于需要保持页面布局整洁的场景,尤其是在需要避免默认省略号行为时。 在网页设计中,处理…

    2025年12月23日
    000
  • 响应式图片上的标记定位:img-fluid与绝对定位的实践指南

    本教程详细阐述如何在应用了 `img-fluid` 类的响应式图片上精确叠加标记。通过引入一个相对定位的父容器,巧妙地将响应式行为作用于容器而非图片本身,并利用%ignore_a_1%的绝对定位和 `calc()` 函数,实现灵活且精准的坐标定位,尤其解决了标记尖端对齐的挑战,确保在不同屏幕尺寸下标…

    2025年12月23日 好文分享
    000
  • 安全高效地更新数据库数值:使用PHP预处理语句实现增量更新

    本文将指导您如何安全且高效地在数据库中实现数值的增量更新。我们将探讨直接在SQL中进行算术运算的方法,并重点介绍如何利用PHP的MySQLi预处理语句来防止SQL注入攻击,确保数据操作的安全性与准确性,同时提供具体的代码示例和实践指导。 在Web应用开发中,经常会遇到需要更新数据库中某个数值字段,使…

    2025年12月23日
    000
  • PHP数据库安全更新:实现数值累加与防范SQL注入

    本文详细阐述如何在php中安全、高效地实现数据库字段的数值累加更新操作。通过对比潜在的sql注入风险和错误的更新逻辑,重点介绍了使用`mysqli`预处理语句(prepared statements)作为最佳实践,以确保数据安全、提升代码可维护性,并提供了清晰的代码示例及解释。 1. 数据库数值累加…

    2025年12月23日
    000
  • PHP MySQLi:安全地对数据库字段进行累加更新

    本教程旨在指导开发者如何安全且正确地更新数据库中已存在的数值型字段,通过将新提交的值累加到原有值上。我们将重点介绍使用PHP MySQLi的预处理语句(Prepared Statements)来执行此操作,这不仅能确保数据库更新的逻辑正确性,还能有效防范SQL注入等安全漏洞,提升应用的数据完整性和安…

    2025年12月23日
    000
  • 纯CSS替换标签文本内容的教程

    本教程详细介绍了如何利用纯%ignore_a_1%技术替换html ` `标签的文本内容。我们将探讨两种主要方法:通过`text-indent`将原始文本移出视口,或通过`font-size`将其隐藏,然后结合`::before`伪元素插入新的可见文本。文章将提供具体的css代码示例,并强调这种纯c…

    2025年12月23日
    000
  • PHP与MySQL:安全地更新数据库中现有数值(累加操作)

    本教程详细讲解如何使用php和mysql安全地更新数据库中已有的数值字段,通过将新提交的值累加到现有值上。我们将重点介绍如何利用sql的算术操作以及php的预处理语句(prepared statements)来防止sql注入,确保数据操作的准确性和安全性。 数据库数值字段的累加更新 在Web应用开发…

    2025年12月23日
    000
  • CSS实现动态高度内容平滑展开的技巧:使用max-height进行过渡动画

    本文探讨了在web开发中实现动态高度内容平滑展开的常见挑战。由于%ignore_a_1%无法直接对`height: auto`进行过渡动画,导致内容在显示时出现突兀的“跳跃”效果或不必要的间距。文章详细介绍了如何通过巧妙地利用`max-height`属性结合css `transition`来克服这一…

    2025年12月23日
    000

发表回复

登录后才能评论
关注微信