Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

ORACLE:NO DATA FOUND -- mas os dados existem


Tenho certeza de que encontrei a causa desse comportamento:suponho que a coluna seja realmente do tipo CHAR e não VARCHAR2.

Considere o seguinte:
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

Conclusão:
  • Ao trabalhar com o tipo de dados CHAR, declare suas variáveis ​​PL/SQL como CHAR.
  • Quando possível, prefira o tipo de dados VARCHAR2 para definição de coluna da tabela. O tipo de dados CHAR é apenas um tipo de dados VARCHAR2 inchado e não adiciona nenhum recurso sobre o tipo de dados VARCHAR2 (consumir mais espaço/memória não é um recurso).