You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle SQL Developer中无法插入数据的问题求助

问题描述

我使用以下代码创建了数据表:

CREATE TABLE GLASACKO_MESTO(
    "ID_glasackog_mesta" NUMBER(10, 0) PRIMARY KEY,
    "Broj_registrovanih_biraca" NUMBER NOT NULL,
        "Broj_glasackog_mesta" NUMBER NOT NULL,
        "Izborna_jedinica" NUMBER NOT NULL
);

CREATE INDEX GLASACKO_MESTO_BROJ_REG_B ON GLASACKO_MESTO("Broj_registrovanih_biraca");

同时创建了序列和触发器:

CREATE SEQUENCE "GLASACKO_MESTO_ID_SEQ"
    MINVALUE 1
    MAXVALUE 9999999999
    INCREMENT BY 1
    START WITH 101
    CACHE 5
    NOORDER
    NOCYCLE;

CREATE OR REPLACE TRIGGER "GLASACKO_MESTO_AUTO_PK"
    BEFORE INSERT
    ON GLASACKO_MESTO
    FOR EACH ROW
BEGIN
    :NEW."ID_glasackog_mesta" := GLASACKO_MESTO_ID_SEQ.NEXTVAL;
END;

所有对象创建成功,但执行以下INSERT语句时出现错误:

INSERT INTO GLASACKO_MESTO(Broj_registrovanih_biraca,Broj_glasackog_mesta,Izborna_jedinica)
values ('2','3','4');

我也尝试手动指定ID:

INSERT INTO GLASACKO_MESTO(ID_glasackog_mesta,Broj_registrovanih_biraca,Broj_glasackog_mesta,Izborna_jedinica)
values (1,'2','3','4');

但问题依旧,请问该如何解决?

解决方法

核心原因

建表时使用了带双引号的列名,Oracle会将这类标识符视为区分大小写的。而INSERT语句里的列名未加引号,Oracle会自动将其转换为大写,导致与表中实际的大小写列名不匹配,进而报错。

修复方案

方案一:修改INSERT语句匹配列名大小写

给INSERT语句中的列名加上双引号,保持和建表时的大小写一致:

  • 自动生成ID的写法:
INSERT INTO GLASACKO_MESTO("Broj_registrovanih_biraca","Broj_glasackog_mesta","Izborna_jedinica")
values ('2','3','4');
  • 手动指定ID的写法:
INSERT INTO GLASACKO_MESTO("ID_glasackog_mesta","Broj_registrovanih_biraca","Broj_glasackog_mesta","Izborna_jedinica")
values (1,'2','3','4');

方案二:重建表避免区分大小写标识符

如果不想后续操作都处理大小写问题,建议重建表时去掉列名的双引号,Oracle会默认将标识符转为大写,后续操作无需加引号:

CREATE TABLE GLASACKO_MESTO(
    ID_GLASACKOG_MESTA NUMBER(10, 0) PRIMARY KEY,
    BROJ_REGISTROVANIH_BIRACA NUMBER NOT NULL,
    BROJ_GLASACKOG_MESTA NUMBER NOT NULL,
    IZBORNA_JEDINICA NUMBER NOT NULL
);

CREATE INDEX GLASACKO_MESTO_BROJ_REG_B ON GLASACKO_MESTO(BROJ_REGISTROVANIH_BIRACA);

CREATE SEQUENCE GLASACKO_MESTO_ID_SEQ
    MINVALUE 1
    MAXVALUE 9999999999
    INCREMENT BY 1
    START WITH 101
    CACHE 5
    NOORDER
    NOCYCLE;

CREATE OR REPLACE TRIGGER GLASACKO_MESTO_AUTO_PK
    BEFORE INSERT
    ON GLASACKO_MESTO
    FOR EACH ROW
BEGIN
    :NEW.ID_GLASACKOG_MESTA := GLASACKO_MESTO_ID_SEQ.NEXTVAL;
END;

之后的INSERT语句直接使用无引号的列名即可:

INSERT INTO GLASACKO_MESTO(BROJ_REGISTROVANIH_BIRACA,BROJ_GLASACKOG_MESTA,IZBORNA_JEDINICA)
values ('2','3','4');

内容的提问来源于stack exchange,提问作者deutschah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 16:52:45