2015-06-24 30 views
7

Stava facendo un rapporto pivot in SQL * Plus, contando il numero di record con stato 'ERRORE' e incontrando valori esadecimali nei risultati. Può essere riprodotto su 11g utilizzando la seguente:SQL * Plus - la colonna numerica mostra i caratteri esadecimali

SQL> select 1 error from dual; 

    ERROR 
---------- 
########## 

Poi ho provato con un paio di varietà:

SQL> select 1 errors from dual; 

    ERRORS 
---------- 
     1 

SQL> select 'a' error from dual; 

ERROR 
----------------------------------------------------------------- 
a 

SQL> select 'a' errors from dual; 

E 
- 
a 

Sembra come avere una colonna denominata 'errore' fa gli animali strani per il risultato in SQL * Inoltre, questo problema non si verifica nello sviluppatore SQL. Qualcuno ha una spiegazione? Non sembra soluzione alternativa se non rinominarlo ..

+0

Sembra essere un capriccio (bug) in SQL * Plus. Quindi, rinomina la colonna o esegui il cast in una stringa. – APC

risposta

2

Sembra che il formato per la colonna NUMBERERROR è impostato di default in SQL*Plus.

ATTRIBUTE comando mostra il formato di questo.

SQL> attribute error 
COLUMN ERROR ON 
FORMAT A65 
word_wrap 

Quindi, consente di cancellarlo.

SQL> column error clear 

Ora,

SQL> select 12 error from dual; 

    ERROR 
---------- 
     12 

script completo:

SQL*Plus: Release 11.2.0.3.0 Production on Wed Jun 24 04:26:15 2015 
Copyright (c) 1982, 2011, Oracle. All rights reserved. 

Connected to: 
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production 
With the Partitioning, OLAP and Data Mining options 

SQL> attribute error 
COLUMN ERROR ON 
FORMAT A65 
word_wrap 

SQL> show numwidth 
numwidth 10 

SQL> select 12 error from dual; 

    ERROR 
---------- 
########## 

SQL> column error clear 

SQL> attribute error 
SP2-0046: ATTRIBUTE 'error' not defined 

SQL> select 12 error from dual; 

    ERROR 
---------- 
     12 

SQL> column error format A10 

SQL> select 12 error from dual; 

    ERROR 
---------- 
########## 
1

È solo un workarround, ma è possibile eseguire il cast come int.

SQL> select cast(1 as char(50)) as error from dual;` 

ERROR 
--------- 
1 
Problemi correlati