【发布时间】:2014-02-07 09:01:30
【问题描述】:
当我使用 pl/sql 开发人员在 oracle 数据库中使用 64 个字符 (0005la_12111111111111112313_0005la_12111111111111112313_0005la_1) 更新一个列 (NVARCHAR2) 时,我可以成功更新。
我从 sqlplus 中选择这个字段:
SQL> select pid from pidinfo where accountid=22735;
pid
0005la_12111111111111112313_0005la_12111111111111112313_0005la_1
enter code here
但是当我使用pl/sql开发者查看结果时,我发现:
SQL> select pid from pidinfo where accountid=22735;
pid
0005la_12111111111111112313_0005la_12111111111111112313_0005la_
可以看到pl/sql显示64个字符的NVARCHAR2有错误,pl/sql只能显示63个字符。
这是一个错误吗?
以下 sql 用于重现:
create table PIDINFO
(
PIDID NUMBER(10) not null,
PID NVARCHAR2(64) not null,
ACCOUNTID NUMBER(10) default 0 not null,
);
comment on column PIDINFO.PIDID
is 'pid id';
comment on column PIDINFO.PID
is 'pid';
comment on column PIDINFO.ACCOUNTID
is 'pid accountid';
insert into PIDINFO (PIDID,PID,ACCOUNTID) values (1,'wheat',22735);
update pidinfo a set a.pid='0005la_12111111111111112313_0005la_12111111111111112313_0005la_1' where a.pid='wheat';
【问题讨论】:
-
不可能......它是否显示了更新前的价值。猜测您的更新未提交
-
请用
CREATE/INSERT/SELECT提供一个完整的例子,以便我们重现。您不太可能发现错误。它要么是显示问题(最后一个字符被修剪以适应字段)要么是多会话问题。select pid from pidinfo where pid='0005la_12111111111111112313_0005la_12111111111111112313_0005la_1'的结果是什么? -
使用 pl/sql 和 sqlplus 时,该 sql 的结果是不同的。使用pl/sql时,结果为: SQL> select pid from pidinfo where pid='0005la_12111111111111112313_0005la_12111111111111112313_0005la_1'; PID 0005LA_1211111111111111123111111111112311111111111231111111111111111111111123111111111112311111111112311111111112313_0005la_当使用sqlplus时,结果是:sql>从pidinfo选择pID,其中pid ='0005la_1211111111111111111111111111111111111111111111123111111111111112313_0005LA_1'; PID 0005la_12111111111111112313_0005la_12111111111111112313_0005la_1