无法在Oracle SQL Developer中插入到SQL数据库中

b1payxdu  于 2023-05-22  发布在  Oracle
关注(0)|答案(2)|浏览(191)

我使用以下代码创建了一个表:

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');

但没什么区别。我该怎么解决这个问题?

k3bvogb1

k3bvogb11#

您使用了字符串文字'2','3','4',但列类型被定义为number。你可能想要这个:

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

此外,错误消息指出IZBORNA_JEDINICA是无效的标识符。这意味着在SQL或表定义中可能存在拼写错误或奇怪的unicode字符,因此该列名与表中定义的名称不匹配。

ct2axkht

ct2axkht2#

您创建了一个具有区分大小写的列的表(因为您在列名周围加上了引号),所以您总是需要引用带有引号且大小写相同的列。重新创建不使用引号括住列名的表。这将保存您的时间和头痛。
检查以下示例:

create table TABLE1 ("column1" VARCHAR2(100));
Table TABLE1 created.
INSERT INTO TABLE1(COLUMN1) VALUES ('koen');
ORA-00904: "COLUMN1": invalid identifier
INSERT INTO TABLE1("column1") VALUES ('koen');
1 row inserted.

现在创建一个没有引号的表:

create table TABLE2 (column1 VARCHAR2(100));
Table TABLE2 created.
INSERT INTO TABLE1(COLUMN1) VALUES ('koen');
1 row inserted.

更多信息here

相关问题