Jag är ganska säker på att jag hittade orsaken till detta beteende:jag gissar att kolumnen faktiskt är av typen CHAR och inte VARCHAR2.
Tänk på följande:
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
Slutsats:
- När du arbetar med CHAR-datatypen, deklarera dina PL/SQL-variabler som CHAR.
- När det är möjligt, föredra datatypen VARCHAR2 för tabellkolumndefinition. CHAR-datatypen är bara en uppsvälld VARCHAR2-datatyp och lägger inte till någon funktion över datatypen VARCHAR2 (att förbruka mer utrymme/minne är inte en funktion).