この動作の原因を見つけたと確信しています。列は実際にはタイプ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データ型に機能を追加しません(より多くのスペース/メモリを消費することは機能ではありません)。