Oracle
 sql >> Database >  >> RDS >> Oracle

ORACLE:NESSUN DATO TROVATO -- ma i dati esistono

Sono abbastanza sicuro di aver trovato la causa di questo comportamento:suppongo che la colonna sia effettivamente di tipo CHAR e non VARCHAR2.

Considera quanto segue:

SQL> CREATE TABLE t (a CHAR(10));

Table created.

SQL> INSERT INTO t VALUES ('FUCHSB');

1 row created.

SQL> SELECT * FROM t WHERE a = 'FUCHSB';

A
----------
FUCHSB

SQL> DECLARE
  2    l VARCHAR2(20) := 'FUCHSB';
  3  BEGIN
  4    SELECT a INTO l FROM t WHERE a = l;
  5  END;
  6  /
DECLARE
*
ERROR at line 1:
ORA-01403: no data found
ORA-06512: at line 4

Conclusione:

  • Quando si lavora con il tipo di dati CHAR, dichiarare le variabili PL/SQL come CHAR.
  • Quando possibile, preferisci il tipo di dati VARCHAR2 per la definizione delle colonne della tabella. Il tipo di dati CHAR è solo un tipo di dati VARCHAR2 gonfio e non aggiunge alcuna funzionalità al tipo di dati VARCHAR2 (il consumo di più spazio/memoria non è una funzionalità).