Почти съм сигурен, че открих причината за това поведение:предполагам, че колоната всъщност е от тип CHAR, а не VARCHAR2.
Имайте предвид следното:
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
Заключение:
- Когато работите с типа данни CHAR, декларирайте вашите PL/SQL променливи като CHAR.
- Когато е възможно, предпочитайте типа данни VARCHAR2 за дефиниране на колона в таблица. Типът данни CHAR е просто раздут тип данни VARCHAR2 и не добавя никаква функция към типа данни VARCHAR2 (консумирането на повече място/памет не е функция).