Tôi khá chắc rằng mình đã tìm ra nguyên nhân của hành vi này:Tôi đoán rằng cột thực sự thuộc loại CHAR chứ không phải VARCHAR2.
Hãy xem xét những điều sau:
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
Kết luận:
- Khi làm việc với kiểu dữ liệu CHAR, hãy khai báo các biến PL / SQL của bạn là CHAR.
- Khi có thể, hãy chọn kiểu dữ liệu VARCHAR2 cho định nghĩa cột bảng. Kiểu dữ liệu CHAR chỉ là kiểu dữ liệu VARCHAR2 cồng kềnh và không thêm bất kỳ tính năng nào trên kiểu dữ liệu VARCHAR2 (tốn nhiều dung lượng / bộ nhớ hơn không phải là một tính năng).