[20250527]奇怪的sql macros.txt --//oracle 不知道从那个版本支持sql macros操作,想实现一个算式计算结果的功能,结果遇到问题。 --//做一个记录。 1.环境: SCOTT@book01p> @ ver2 ============================== PORT_STRING : x86_64/Linux 2.4.xx VERSION : 21.0.0.0.0 BANNER : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production BANNER_FULL : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production Version 21.3.0.0.0 BANNER_LEGACY : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production CON_ID : 0 PL/SQL procedure successfully completed. 2.建立宏: CREATE OR REPLACE FUNCTION js_op (n1 NUMBER, op varchar2, n2 NUMBER) RETURN VARCHAR2 sql_macro(scalar) as begin return 'n1 '|| op ||' n2'; end; / SCOTT@book01p> select js_op(1,'+',2) from dual ; select js_op(1,'+',2) from dual * ERROR at line 1: ORA-64626: invalid SQL text returned from SQL macro: ORA-00907: missing right parenthesis --//而这样写可以: CREATE OR REPLACE FUNCTION js_op1 (n1 NUMBER, n2 NUMBER) RETURN VARCHAR2 sql_macro(scalar) as begin return 'n1 + n2'; end; / SCOTT@book01p> select js_op1(1,2) from dual ; JS_OP1(1,2) ----------- 3 --//改写如下,这样应该可以了吧。 CREATE OR REPLACE FUNCTION js_op (n1 NUMBER, op varchar2, n2 NUMBER) RETURN VARCHAR2 sql_macro(scalar) as vc varchar2(32); begin select decode ( op ,'+','n1+n2','-','n1-n2','*','n1*n2','/','n1/n2') into vc from dual ; return vc; end; / SCOTT@book01p> select js_op(1,'+',2) from dual ; select js_op(1,'+',2) from dual * ERROR at line 1: ORA-62565: The SQL Macro method failed with error(s). ORA-01405: fetched column value is NULL --//似乎不允许出现多种情况,改写如下: CREATE OR REPLACE FUNCTION js_op (n1 NUMBER, op varchar2, n2 NUMBER) RETURN VARCHAR2 sql_macro(scalar) as vc varchar2(32); begin --select decode ( op ,'+','n1+n2','-','n1-n2','*','n1*n2','/','n1/n2') into vc from dual ; --select decode ( op ,'+','n1+n2') into vc from dual ; --vc := '(n1 '|| op ||'n2)'; vc := 'n1 + n2'; return vc; end; /
[20250527]奇怪的sql macros.txt
来源:这里教程网
时间:2026-03-03 21:59:33
作者:
编辑推荐:
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- 在Oceanbase桌面版体验OB自动分区表,小功能大作用!
在Oceanbase桌面版体验OB自动分区表,小功能大作用!
26-03-03 - 数据库管理-第323期 Oracle如何统计表数据量(20250509)
数据库管理-第323期 Oracle如何统计表数据量(20250509)
26-03-03 - INFO OGG-06441 不是告警而容易忽略的错误
INFO OGG-06441 不是告警而容易忽略的错误
26-03-03 - 小米没想到,自家车主不服管
小米没想到,自家车主不服管
26-03-03 - 聊了十年“社交梦”,支付宝终于打通了这个电话
聊了十年“社交梦”,支付宝终于打通了这个电话
26-03-03 - 中国最良心的两个企业家,联手了
中国最良心的两个企业家,联手了
26-03-03 - Oracle官方MySQL+APEX+AI限时免费预约流程大全
Oracle官方MySQL+APEX+AI限时免费预约流程大全
26-03-03 - 国产密码新时代!华测国密 SSL 证书解锁安全新高度
国产密码新时代!华测国密 SSL 证书解锁安全新高度
26-03-03 - 数据库管理-第325期 ADG Failover后该做啥(20250513)
- 评测揭秘!同一份外卖,拼好饭为什么更有性价比?
评测揭秘!同一份外卖,拼好饭为什么更有性价比?
26-03-03
