如何从oracle函数获取返回shell的准确数值

时间:2014-11-11 13:34:46

标签: oracle shell numeric

我在oracle中有一个函数。该函数将返回数值(类似于20140513212746,长度为14位)。该函数将由shell脚本调用。但是shell脚本没有返回函数返回的确切值。

例如,如果oracle中的值是9999110300002,则shell将其返回为9999100000000

下面是shell脚本代码块

#!/bin/sh
sqlresult=`sqlplus -S scott/tiger<<EOF
SET ECHO OFF
SET HEADING OFF
SET FEEDBACK OFF
SELECT fn_getExecNo@db_link_name ('<HOST_NAME_TO_SEARCH>') FROM DUAL;
EOF`
echo $sqlresult
execno=`echo $sqlresult | awk '{printf( "%d", $1 )}'`
echo $execno

结果是

calling function ....
9.9991E+12 and
9999100000000

oracle函数的返回数据类型是NUMERIC或VARCHAR,shell中的值不会更改。

如何在shell中获取oracle函数返回的确切值?需要将此值与shell变量本身的值进行比较。

提前致谢!!

1 个答案:

答案 0 :(得分:0)

尝试如下

#!/bin/sh
sqlresult=`sqlplus -S scott/tiger<<EOF
SET ECHO OFF
SET HEADING OFF
SET FEEDBACK OFF
alter session set nls_numeric_characters='. ';
SELECT to_char(fn_getExecNo@db_link_name ('<HOST_NAME_TO_SEARCH>'), 'tm') FROM DUAL;
EOF`
echo $sqlresult
execno=`echo $sqlresult | awk '{printf( "%d", $1 )}'`
echo $execno