为什么算术数据在将数据从数据库发送到 unix 时会自动转换为指数数据?

why numeric is data is automatic convering to exponential data while sending data from DB to unix?

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

数据库输出:

日期feed_name类型Request_ID计数状态

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

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 数字格式?非常感谢

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

更重要的是,由于 request_id 似乎是一个标识符(您不会对其进行算术运算,是吗?)- 为什么将其声明为 NUMBER 而不是 VARCHAR2(n ) 其中 n 足够大以容纳您的 id?如果它必须只包含数字,则可以通过约束轻松实施。

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.

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