gpt4 book ai didi

c# - ORA-00001 : unique constraint (SYSTEM. BROWSERS_PK) 违反

转载 作者:行者123 更新时间:2023-11-30 17:46:44 25 4
gpt4 key购买 nike

我正在开发一个 C# 项目,我试图在 Oracle 数据库中使用以下 SQL 插入一条记录:

String Qry = INSERT INTO browsers (browsers.browser,browsers.engine,browsers.platform,browsers.version,browsers.grade) VALUES ('Alans browser','Gecko','every','1.0','U') RETURNING id INTO :ID

我正在关注以下示例代码:http://www.sqlines.com/oracle-to-sql-server-cs-conversion/insert-returning-clause

我的代码如下:

OracleConnection conn = new OracleConnection(...);
OracleCommand cmd = null;
...
cmd = new OracleCommand(Qry, conn);
OracleParameter prm = new OracleParameter();
prm = new OracleParameter(":ID", OracleDbType.Int32, ParameterDirection.ReturnValue);
cmd.Parameters.Add(prm);
cmd.ExecuteNonQuery(); //this line throws error
query.setNewRecordID(cmd.Parameters[":ID"].Value.ToString());
...

当然,浏览器表的 id 列设置有序列和触发器以在任何插入时自动递增。我不明白为什么我在不尝试设置 id 列时会收到错误消息。我只是想检索赋予新记录的 id 值。

更新:以下是创建序列和触发器的 SQL 命令:

序列:

CREATE SEQUENCE "SYSTEM"."BROWSERS_SEQ"MINVALUE 1 MAXVALUE 999999999999999999999999999 INCREMENT BY 1 START WITH 21 CACHE 20 NOORDER NOCYCLE NOPARTITION ;

触发器:

create or replace trigger BROWSERS_TRG  
before insert on "SYSTEM"."BROWSERS"
for each row
begin
if inserting then
if :NEW."ID" is null then
select BROWSERS_SEQ.nextval into :NEW."ID" from dual;
end if;
end if;
end;

最佳答案

我认为您的序列有问题(我无法按原样编译)。我从中取出了 NOPARTITION,它起作用了。

我在我的 SCOTT(示例)架构中创建了一个类似的场景,如下所示:

 SCOTT@dev> CREATE TABLE "SCOTT"."EMP2"
2 (
3 "EMPNO" NUMBER(4,0),
4 "ENAME" VARCHAR2(10 BYTE),
5 "JOB" VARCHAR2(9 BYTE),
6 "MGR" NUMBER(4,0),
7 "HIREDATE" DATE,
8 "SAL" NUMBER(7,2),
9 "COMM" NUMBER(7,2),
10 "DEPTNO" NUMBER(2,0)
11 )
12 TABLESPACE "SYSTEM" ;

Table created.

SCOTT@dev> CREATE UNIQUE INDEX "SCOTT"."EMP2_EMPNO" ON "SCOTT"."EMP2"
2 (
3 "EMPNO"
4 )
5 TABLESPACE "SYSTEM" ;

Index created.

SCOTT@dev> set define off;
SCOTT@dev> ALTER TABLE "SCOTT"."EMP2" ADD PRIMARY KEY ("EMPNO");

Table altered.

SCOTT@dev> CREATE SEQUENCE EMP2_SEQ MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 21 CACHE 20 NOORDER NOCYCLE ;

Sequence created.

SCOTT@dev> CREATE OR REPLACE TRIGGER EMP2_TRG before
2 INSERT ON SCOTT.EMP2 FOR EACH row BEGIN IF inserting THEN IF :NEW.EMPNO IS NULL THEN
3 SELECT EMP2_SEQ.NEXTVAL INTO :NEW.EMPNO FROM dual;
4 END IF;
5 END IF;
6 END;
7 /

Trigger created.

SCOTT@dev> commit;

Commit complete.

SCOTT@dev> INSERT INTO EMP2
2 (ENAME)
3 VALUES
4 ('FRED')
5 /

1 row created.

SCOTT@dev> commit;

Commit complete.

因此,序列似乎是罪魁祸首。

关于c# - ORA-00001 : unique constraint (SYSTEM. BROWSERS_PK) 违反,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25814160/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com