首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >交换交换的过程,值主键,Oracle,ORA-00001

交换交换的过程,值主键,Oracle,ORA-00001
EN

Stack Overflow用户
提问于 2020-02-18 19:21:55
回答 1查看 151关注 0票数 1

TABLE_PRD

代码语言:javascript
复制
CREATE TABLE TABLE_PRD 
(
  PRODUCT_CODE_PRD VARCHAR2(10) NOT NULL 
, DESCRIPTION_PRODUCT_PRD VARCHAR2(20) 
, CONSTRAINT TABLE_PRD_PK PRIMARY KEY 
  (
    PRODUCT_CODE_PRD 
  )
  ENABLE 
);
INSERT INTO TABLE_PRD (PRODUCT_CODE_PRD, DESCRIPTION_PRODUCT_PRD) VALUES ('LS', 'Leasing');
INSERT INTO TABLE_PRD (PRODUCT_CODE_PRD, DESCRIPTION_PRODUCT_PRD) VALUES ('TG', 'Total Cost');

TABLE_POS

代码语言:javascript
复制
CREATE TABLE TABLE_POS 
(
  POSITION_CODE_POS INTEGER NOT NULL 
, SOME_TEXT_POS VARCHAR2(20) 
, CONSTRAINT TABLE_POS_PK PRIMARY KEY 
  (
    POSITION_CODE_POS 
  )
  ENABLE 
);
INSERT INTO TABLE_POS (POSITION_CODE_POS, COMMENT_POS) VALUES ('1', 'Owner');
INSERT INTO TABLE_POS (POSITION_CODE_POS, COMMENT_POS) VALUES ('2', 'Manager');
INSERT INTO TABLE_POS (POSITION_CODE_POS, COMMENT_POS) VALUES ('3', 'User');

TABLE_REL

代码语言:javascript
复制
CREATE TABLE TABLE_REL 
(
  PRODUCT_CODE_REL VARCHAR2(10) NOT NULL 
, POSITION_CODE_REL INTEGER NOT NULL 
, DESCRIPTION_REL VARCHAR2(20) 
, CREATION_DATE_REL DATE 
, CONTENT BLOB 
, CONSTRAINT TABLE_REL_FK1 FOREIGN KEY (PRODUCT_CODE_REL) REFERENCES TABLE_PRD (PRODUCT_CODE_PRD) ENABLE
, CONSTRAINT TABLE_REL_FK2 FOREIGN KEY (POSITION_CODE_REL) REFERENCES TABLE_POS (POSITION_CODE_POS) ENABLE
, CONSTRAINT TABLE_REL_PK PRIMARY KEY (PRODUCT_CODE_REL, POSITION_CODE_REL) ENABLE 
);
INSERT INTO TABLE_REL (PRODUCT_CODE_REL, POSITION_CODE_REL, DESCRIPTION_REL) VALUES ('LS', '1', 'Leasing - Owner');
INSERT INTO TABLE_REL (PRODUCT_CODE_REL, POSITION_CODE_REL, DESCRIPTION_REL) VALUES ('LS', '2', 'Leasing - Manager');
INSERT INTO TABLE_REL (PRODUCT_CODE_REL, POSITION_CODE_REL, DESCRIPTION_REL) VALUES ('LS', '3', 'Leasing - User');
INSERT INTO TABLE_REL (PRODUCT_CODE_REL, POSITION_CODE_REL, DESCRIPTION_REL) VALUES ('TG', '1', 'Total Cost - Owner');
INSERT INTO TABLE_REL (PRODUCT_CODE_REL, POSITION_CODE_REL, DESCRIPTION_REL) VALUES ('TG', '2', 'Total Cost - Manager');
INSERT INTO TABLE_REL (PRODUCT_CODE_REL, POSITION_CODE_REL, DESCRIPTION_REL) VALUES ('TG', '3', 'Total Cost - User');

现在,我需要执行循环/圆交换,更改POSITION_CODE_REL

1 -> 3 (在1之前,是3),2 -> 1 (在2之前是1),3 -> 2 (在3之前是2)。

代码语言:javascript
复制
6 errors saving changes to table TABLE_REL:
Row 1: ORA-00001: unique constraint (TABLE_REL_PK) violated
Row 2: ORA-00001: unique constraint (TABLE_REL_PK) violated
Row 3: ORA-00001: unique constraint (TABLE_REL_PK) violated
Row 4: ORA-00001: unique constraint (TABLE_REL_PK) violated
Row 5: ORA-00001: unique constraint (TABLE_REL_PK) violated
Row 6: ORA-00001: unique constraint (TABLE_REL_PK) violated

我知道情况如何,问题是,是否有执行交换的程序?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-19 02:09:48

基于这些问题SQL - How to select a row having a column with max value

Oracle SQL: Update a table with data from another table

和答案

https://stackoverflow.com/a/42007108/811293

检查本守则:

代码语言:javascript
复制
UPDATE TABLE_REL SET POSITION_CODE_REL =
    CASE 
    WHEN POSITION_CODE_REL = 1 THEN /*MAX VALUE*/ (
        SELECT POSITION_CODE_REL FROM (SELECT * FROM TABLE_REL ORDER BY POSITION_CODE_REL DESC) WHERE rownum = 1
        )
    ELSE POSITION_CODE_REL - 1 END;

反转

代码语言:javascript
复制
UPDATE TABLE_REL SET POSITION_CODE_REL =
    CASE 
    WHEN POSITION_CODE_REL = /*MAX VALUE*/ (
        SELECT POSITION_CODE_REL FROM (SELECT * FROM TABLE_REL ORDER BY POSITION_CODE_REL DESC) WHERE rownum = 1
        ) THEN 1 
    ELSE POSITION_CODE_REL + 1 END;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60288050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档