问题描述
嗨,
我正在尝试编写一个函数,该函数将接受算术运算符 (例如: mod(100,10)) 作为输入,结果将来自输入算术运算
-----
声明
l_retval varchar2(200);
函数算术运算 (p _ 属性14 varchar2,
P _ val编号)
返回varchar2
是
l_final_val varchar2(200);
l_str varchar2(20);
l_tst varchar2(100);
开始
如果p_attribute14不为空,而p_val不为空
然后
l_str := 替换 (p_attribute14,'结果',p_val);
dbms_output.put_line(l_str);
l_final_val := '从对偶中选择: l_str';
使用l_str立即执行l_final_val到l_tst;
返回l_tst;
如果结束;
结束算术运算;
开始
l_retval := arith_oper('mod (结果,10)',100);
dbms_output.put_line(l_retval);
结束;
---
我期望它应该给出0作为输出,但它给出了mod(100,10)
请建议
我正在尝试编写一个函数,该函数将接受算术运算符 (例如: mod(100,10)) 作为输入,结果将来自输入算术运算
-----
声明
l_retval varchar2(200);
函数算术运算 (p _ 属性14 varchar2,
P _ val编号)
返回varchar2
是
l_final_val varchar2(200);
l_str varchar2(20);
l_tst varchar2(100);
开始
如果p_attribute14不为空,而p_val不为空
然后
l_str := 替换 (p_attribute14,'结果',p_val);
dbms_output.put_line(l_str);
l_final_val := '从对偶中选择: l_str';
使用l_str立即执行l_final_val到l_tst;
返回l_tst;
如果结束;
结束算术运算;
开始
l_retval := arith_oper('mod (结果,10)',100);
dbms_output.put_line(l_retval);
结束;
---
我期望它应该给出0作为输出,但它给出了mod(100,10)
请建议
专家解答
您不能将函数作为绑定变量传递!Oracle数据库将其视为字符串 “mod(100,10)”,而不是函数。
执行此操作,您必须将函数连接到SQL字符串中:
但是要注意: 编写一个过程来接受和执行任何函数都是一些讨厌的SQL注入的秘诀...
执行此操作,您必须将函数连接到SQL字符串中:
create or replace function arith_oper ( p_attribute14 varchar2, p_val number ) return varchar2 is l_final_val varchar2 ( 200 ) ; l_str varchar2 ( 20 ) ; l_tst varchar2 ( 100 ) ; begin if p_attribute14 is not null and p_val is not null then l_str := replace ( p_attribute14,'RESULT',p_val ) ; dbms_output.put_line ( l_str ) ; l_final_val := 'select ' || l_str || ' from dual'; execute immediate l_final_val into l_tst; return l_tst; end if; end arith_oper; / declare l_retval varchar2(100); begin l_retval := arith_oper ( 'mod(RESULT,10)',100 ) ; dbms_output.put_line ( l_retval ) ; end; / PL/SQL procedure successfully completed. mod(100,10) 0复制
但是要注意: 编写一个过程来接受和执行任何函数都是一些讨厌的SQL注入的秘诀...
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
【专家有话说第五期】在不同年龄段,DBA应该怎样规划自己的职业发展?
墨天轮编辑部
1325次阅读
2025-03-13 11:40:53
Oracle RAC ASM 磁盘组满了,无法扩容怎么在线处理?
Lucifer三思而后行
796次阅读
2025-03-17 11:33:53
Oracle+Deepseek+Dify 实现数据库数据实时分析
bicewow
725次阅读
2025-03-06 09:41:49
Oracle避坑指南|同名表导出难题:如何精准排除指定用户下的表?
szrsu
559次阅读
2025-03-05 00:42:34
2月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
468次阅读
2025-03-13 14:38:19
Oracle 如何修改 db_unique_name?强迫症福音!
Lucifer三思而后行
361次阅读
2025-03-12 21:27:56
Oracle DataGuard高可用性解决方案详解
孙莹
316次阅读
2025-03-26 23:27:33
Oracle分区和执行计划相关的几个问题
听见风的声音
310次阅读
2025-03-07 08:51:42
数据库管理-第299期 数据库是否需要定期重启(20250306)
胖头鱼的鱼缸
252次阅读
2025-03-06 09:09:35
切换Oracle归档路径后,不能正常删除原归档路径上的归档文件
dbaking
247次阅读
2025-03-19 14:41:51