Jsem si docela jistý, že jsem našel příčinu tohoto chování:Hádám, že sloupec je ve skutečnosti typu CHAR a ne VARCHAR2.
Zvažte následující:
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
Závěr:
- Při práci s datovým typem CHAR deklarujte své proměnné PL/SQL jako CHAR.
- Pokud je to možné, upřednostněte pro definici sloupce tabulky datový typ VARCHAR2. Datový typ CHAR je pouze nafouknutý datový typ VARCHAR2 a nepřidává žádnou funkci nad datový typ VARCHAR2 (spotřeba více místa/paměti není funkce).