ITPub博客

首页 > 数据库 > Oracle > [20211220]sqlplus简单计算器.txt

[20211220]sqlplus简单计算器.txt

原创 Oracle 作者:lfree 时间:2021-12-20 09:36:28 0 删除 编辑

[20211220]sqlplus简单计算器.txt

--//看了tpt包calc.sql脚本,他要求输入3个参数,计算出10进制以及16进制结果.
--//但是他的脚本比较灵活支持10进制以及16进制数字的输入:

--//例子:
SCOTT@book> @ ver1
PORT_STRING                    VERSION        BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx            11.2.0.4.0     Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

SCOTT@book> @ calc 10 + 4
                                DEC                  HEX
----------------------------------- --------------------
                          14.000000                    E

SCOTT@book> @ calc 0x10 + 4
                                DEC                  HEX
----------------------------------- --------------------
                          20.000000                   14

SCOTT@book> @ calc x10 + 4
                                DEC                  HEX
----------------------------------- --------------------
                          20.000000                   14

--//我自己写一个简单一点的输入10进制,算出10进制,16进制的结果.注意输入参数中间不能有空格。

$ cat calcx.sql
COL value  new_value newvalue
COL calc_dec HEAD "DEC" FOR 999999999999999999999999999.999999
COL calc_hex HEAD "HEX" FOR A20 JUSTIFY RIGHT

set termout off
select &1 value from dual;
set termout on

select &newvalue calc_dec , TO_CHAR (&newvalue, 'FM0xxxxxxxxxxxxxxx') calc_hex from dual ;

--//测试:
SCOTT@book> @calcx 120/12
                                DEC                  HEX
----------------------------------- --------------------
                          10.000000 000000000000000a


SCOTT@book> @calcx power(2,10)+1
                                DEC                  HEX
----------------------------------- --------------------
                        1025.000000 0000000000000401


--//我以前从网上抄来一个bash计算器,自己修改一下,定义成函数.看看在sqlplus里面是否支持bash函数调用.
--//使用bc计算器,里面函数不能使用圆括号,使用中括号代替。
--//测试不行。修改成shell。

# cat //usr/local/bin/==
# /bin/bash
# simple calc
in="$(echo "$@" | sed -e 's/\[/(/g' -e 's/\]/)/g')";
echo $in | bc -lq | tr -d '\n\\\r' | sed -e "s/\.\([0-9]*[1-9]\)0\+$/.\1/" -e "s/\.0\+$//"
echo

SCOTT@book> host == "scale=4;4/3"
1.3333

--//有分号要加引号才行.

SCOTT@book> host == 2^240
1766847064778384329583297500742918515827483896875618958121606201292619776

--//在bc下执行出现折行情况.

$ echo 2^240 | bc -lq
17668470647783843295832975007429185158274838968756189581216062012926\
19776

SCOTT@book> host == "scale=100;a(1)*4"
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170676

--//PI小数点100位.



来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/267265/viewspace-2848491/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
熟悉oracle相关技术,擅长sql优化,rman备份与恢复,熟悉linux shell编程。

注册时间:2008-01-03

  • 博文量
    4006
  • 访问量
    7969295