为什么算术数据在将数据从数据库发送到 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
命令。
我写了一个脚本,它将从数据库中获取数据并将其发送到 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
命令。