Jestem prawie pewien, że znalazłem przyczynę tego zachowania:zgaduję, że kolumna jest faktycznie typu CHAR, a nie VARCHAR2.
Rozważ następujące kwestie:
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
Wniosek:
- Podczas pracy z typem danych CHAR zadeklaruj zmienne PL/SQL jako CHAR.
- Jeśli to możliwe, do definicji kolumny tabeli preferuj typ danych VARCHAR2. Typ danych CHAR jest po prostu nadętym typem danych VARCHAR2 i nie dodaje żadnej funkcji do typu danych VARCHAR2 (zużywanie większej ilości miejsca/pamięci nie jest funkcją).