0

此查询返回 1 行:

SELECT col1, col2 FROM table1 WHERE col1 = :column1;

但这更新了 0 行:

UPDATE table1 SET col2 = :column2  WHERE col1 = :column1;
COMMIT;

我添加了这个约束来将 col1 设置为主键,但它没有修复它。

ALTER TABLE table1 ADD CONSTRAINT col1_pk PRIMARY KEY (col1);

我正在从 SQL Developer 尝试这个,知道为什么它不更新行吗?

编辑

col1 是VARCHAR2(32 BYTE) NOT NULL

col2 是CLOB NOT NULL

编辑 2:测试用例,在选择和更新语句中将 :var1 设置为 0011223344556677。

CREATE TABLE MY_TABLE 
   (    COL1 VARCHAR2(32 BYTE) NOT NULL ENABLE, 
    COL2 CLOB, 
     CONSTRAINT "MY_TABLE_PK" PRIMARY KEY ("COL1")
   )

INSERT INTO MY_TABLE (COL1, COL2) VALUES ('0011223344556677', '1434407992143440799214344079921434407992');

SELECT * FROM MY_TABLE WHERE COL1 = :var1;

UPDATE MY_TABLE SET COL2 = 'test' WHERE COL1 = :var1;
   COMMIT;
4

1 回答 1

1

TL;DR - 确保存储在绑定变量中的值被解析为字符串而不是数字。

我在 SQL Developer(版本 4.0.3.16)中运行了这个:

CREATE TABLE MY_TABLE 
   (    COL1 VARCHAR2(32 BYTE) NOT NULL ENABLE, 
    COL2 CLOB, 
     CONSTRAINT "MY_TABLE_PK" PRIMARY KEY ("COL1")
   );
/
INSERT INTO MY_TABLE (COL1, COL2) VALUES ('0011223344556677', '1434407992143440799214344079921434407992');
/
VARIABLE var1 VARCHAR2(32);
/
BEGIN
  :var1 := '0011223344556677';
END;
/
SELECT * FROM MY_TABLE WHERE COL1 = :var1;
/
UPDATE MY_TABLE SET COL2 = 'test' WHERE COL1 = :var1;
/
COMMIT;
/
SELECT * FROM MY_TABLE;
/

它运行良好:

table MY_TABLE created.
1 rows inserted.
anonymous block completed
COL1                             COL2                                                                           
-------------------------------- --------------------------------------------------------------------------------
0011223344556677                 1434407992143440799214344079921434407992                                         

1 rows updated.
committed.
COL1                             COL2                                                                           
-------------------------------- --------------------------------------------------------------------------------
0011223344556677                 test                                                                             

如果将变量赋值更改为(删除引号):

BEGIN
  :var1 := 0011223344556677;
END;

然后将该值解析为数字并忽略前导零,输出为:

table MY_TABLE created.
1 rows inserted.
anonymous block completed
no rows selected


0 rows updated.
committed.
COL1                             COL2                                                                           
-------------------------------- --------------------------------------------------------------------------------
0011223344556677                 1434407992143440799214344079921434407992
于 2015-06-15T23:05:37.910 回答