[20240930]建立完善calcz.sql脚本.txt --//tpt脚本有1个calc.sql脚本,可以做一些10,16进制计算,带入参数必须显示说明10,16进制,我利用hd.sql脚本代码生成更加灵活 --//的代码,自己也写一个看看。 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.测试: SCOTT@book01p> @ calc xa0 + 10 DEC HEX ----------------------------------- -------------------- 170.000000 AA SCOTT@book01p> @ calc xa0 + a to_number(substr('a',instr(upper('a'),'X')+1), p3.format) calc_dec, * ERROR at line 22: ORA-01722: invalid number --//calc代码如法识别a表示16进制。 3.代码如下: $ cat calcz.sql -- Copyright 2023 lfree. All rights reserved. -- Licensed under the Apache License, Version 2.0. See LICENSE.txt for terms and conditions. -------------------------------------------------------------------------------- -- -- File name: calcz.sql -- Purpose: Basic calculator and dec/hex converter -- -- Author: lfree -- -- Usage: @calcz <num1> <operation> <num2> -- @calcz 10 + 10 -- @calcz a + 0x10 -- @calcz 0xFFFF - 0x5F -- @calcz xBB * 1234 -- Other: -- Can calculate only 2 operands a time -- if the string contains 0x, a,b,c,d,e,f return hex -- -------------------------------------------------------------------------------- set termout off define vc=&1 col n1 new_value _tpt_n1 column text format a20 column hex_status format a10 SELECT text ,n10 n1 ,REPLACE (TO_CHAR (n10, LPAD ('x', 16, 'x')), ' ') c16 ,hex_status FROM (SELECT '&&vc' text -- ,DECODE ( hex_status ,'hex', TO_NUMBER ( SUBSTR ('&&vc', INSTR (LOWER ('&&vc'), 'x',-1) + 1) ,'xxxxxxxxxxxxxxxx') ,'dec', TO_NUMBER ('&&vc') ,0) n10 ,DECODE ( hex_status ,'hex', TO_NUMBER ( replace (lower('&&vc'), 'x') ,'xxxxxxxxxxxxxxxx') ,'dec', TO_NUMBER ('&&vc') ,0) n10 ,hex_status FROM (SELECT CASE WHEN REGEXP_LIKE (LOWER ('&&vc'), '^[0-9]+$') THEN 'dec' WHEN REGEXP_LIKE (LOWER ('&&vc') ,'^0?[xX]?[0-9a-f]+[xX]?$') THEN 'hex' ELSE 'other' END AS Hex_Status FROM DUAL)); define vc=&3 col n2 new_value _tpt_n2 column text format a20 column hex_status format a10 SELECT text ,n10 n2 ,REPLACE (TO_CHAR (n10, LPAD ('x', 16, 'x')), ' ') c16 ,hex_status FROM (SELECT '&&vc' text -- ,DECODE ( hex_status ,'hex', TO_NUMBER ( SUBSTR ('&&vc', INSTR (LOWER ('&&vc'), 'x',-1) + 1) ,'xxxxxxxxxxxxxxxx') ,'dec', TO_NUMBER ('&&vc') ,0) n10 ,DECODE ( hex_status ,'hex', TO_NUMBER ( replace (lower('&&vc'), 'x') ,'xxxxxxxxxxxxxxxx') ,'dec', TO_NUMBER ('&&vc') ,0) n10 ,hex_status FROM (SELECT CASE WHEN REGEXP_LIKE (LOWER ('&&vc'), '^[0-9]+$') THEN 'dec' WHEN REGEXP_LIKE (LOWER ('&&vc') ,'^0?[xX]?[0-9a-f]+[xX]?$') THEN 'hex' ELSE 'other' END AS Hex_Status FROM DUAL)); set termout on COL calc_dec HEAD "DEC" FOR 999999999999999999999999999.999999 COL calc_hex HEAD "HEX" FOR A20 JUSTIFY RIGHT COL calc_hex1 HEAD "HEX1" FOR A20 JUSTIFY RIGHT whenever sqlerror exit failure rollback select &_tpt_n1 &2 &_tpt_n2 calc_dec , TO_CHAR (&_tpt_n1 &2 &_tpt_n2, 'FM0xxxxxxxxxxxxxxx') calc_hex , upper(TO_CHAR (&_tpt_n1 &2 &_tpt_n2, 'FM0xxxxxxxxxxxxxxx')) calc_hex1 from dual ; 4.简单测试: SCOTT@book01p> @calcz 10 + 10 DEC HEX HEX1 ----------------------------------- -------------------- -------------------- 20.000000 0000000000000014 0000000000000014 SCOTT@book01p> @calcz a + 0x10 DEC HEX HEX1 ----------------------------------- -------------------- -------------------- 26.000000 000000000000001a 000000000000001A SCOTT@book01p> @calcz a + 10x DEC HEX HEX1 ----------------------------------- -------------------- -------------------- 26.000000 000000000000001a 000000000000001A
[20240930]建立完善calcz.sql脚本.txt
来源:这里教程网
时间:2026-03-03 20:39:52
作者:
编辑推荐:
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- 大事件! Oracle CloudWorld 是"真高光"还是"挤牙膏"?
- 掌握CMD命令:轻松切换IP地址
掌握CMD命令:轻松切换IP地址
26-03-03 - 5大公有云厂商增强很猛~作为DBA的,有点焦虑!
5大公有云厂商增强很猛~作为DBA的,有点焦虑!
26-03-03 - ORA-01558: out of transaction ID's in rollback segment SYSTEM---惜分飞
- 一个很小的系统为什么负载那么高?
一个很小的系统为什么负载那么高?
26-03-03 - 户外电力柜的新守护者:辐射制冷技术
户外电力柜的新守护者:辐射制冷技术
26-03-03 - 解锁大模型潜力:GBASE南大通用与英特尔共同推出向量数据库前沿技术
解锁大模型潜力:GBASE南大通用与英特尔共同推出向量数据库前沿技术
26-03-03 - oracle listener查询报错TNS-12560,TNS-00530,客户端ora-12514
- 数据库数据恢复—Oracle数据库打开报错的数据恢复案例
数据库数据恢复—Oracle数据库打开报错的数据恢复案例
26-03-03 - 回家过中秋?扎心,锁表导致系统挂了
回家过中秋?扎心,锁表导致系统挂了
26-03-03
