[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/ ,如需转载,请注明出处,否则将追究法律责任。