为什么数字是数据是自动收敛到指数数据,同时从DB发送数据到unix?

时间:2017-01-06 10:29:20

标签: sqlplus

我编写了一个脚本,它将从DB中获取数据并将其发送到unix终端,但我在数据库中获得了正确的输出,但在UNIX中没有。

数据库输出:

日期feed_name类型Request_ID计数状态

1/6/2017 5:20:18 AM MTS_FEDWIRE_CHIPS_TRANSACTION_FEED MQ 3712075882556 1 SUCCESS

UNIX输出:

06-JAN-17 MTS_FEDWIRE_CHIPS_TRANSACTION_FEED MQ 3.7067E + 12 0成功

脚本:

#!/bin/bash
DataDirectory='/auto/users/scripts'

ORACLE_HOME=/tools/bin/oracle-10.2.0.1-64
export ORACLE_HOME
TNS_ADMIN=${DataDirectory}
export TNS_ADMIN

DBUSER='userid'
DBUSERPASSWORD='passowrd'
DB='dbname'

var=`$ORACLE_HOME/bin/sqlplus -S ${DBUSER}/${DBUSERPASSWORD}@${DB} <<EOF
spool /auto/users/scripts/DB_output.txt
set linesize 150;
SET FEED OFF;
SET TERMOUT ON;
SET VERIFY OFF;
SET ECHO ON;
SET HEAD OFF;
SET PAGESIZE 0;
set feedback off
set heading off
select update_time,feed_name,received_mode,request_id,records_processed,status from FEED_REQUEST WHERE FEED_NAME='TRANSACTION_FEED' AND AS_OF=to_char(SYSDATE, 'dd-mon-yyyy') and ROWNUM=1 ORDER BY 1 DESC;
spool off
exit;
EOF`

请问您如何以数字格式获取正确的Request_id?非常感谢

1 个答案:

答案 0 :(得分:0)

您似乎需要在SQL * Plus中配置列格式(请参阅下面的示例)。

更重要的是,因为request_id似乎是一个标识符(你不打算对它进行算术运算,是吗?) - 为什么它被声明为NUMBER而不是VARCHAR2(n) n是否足以容纳你的身份?如果它只包含数字,那么可以通过约束轻松强制执行。

SQL> select 3712075882556 as zzz from dual;

       ZZZ
----------
3.7121E+12

1 row selected.

Elapsed: 00:00:00.01
SQL> column zzz format 999999999999999
SQL> /

             ZZZ
----------------
   3712075882556

1 row selected.

您需要在column语句之前在脚本中添加类似的SELECT命令。