sql >> Base de Datos >  >> RDS >> Oracle

ORACLE:NO SE ENCONTRARON DATOS, pero existen datos

Estoy bastante seguro de que encontré la causa de este comportamiento:supongo que la columna es en realidad del tipo CHAR y no VARCHAR2.

Considere lo siguiente:

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

Conclusión:

  • Cuando trabaje con el tipo de datos CHAR, declare sus variables PL/SQL como CHAR.
  • Cuando sea posible, prefiera el tipo de datos VARCHAR2 para la definición de columnas de la tabla. El tipo de datos CHAR es solo un tipo de datos VARCHAR2 inflado y no agrega ninguna característica sobre el tipo de datos VARCHAR2 (consumir más espacio/memoria no es una característica).