我正在使用序列和触发器来自动递增表中的列,但是我收到错误 - ORA-24344:成功但出现编译错误。
我正在使用这篇文章:How to create id with AUTO_INCREMENT on Oracle?它成功地用于我制作的另外两个带自动增量的表,但这里一定有一些我不熟悉的东西导致了错误。
更多编辑:感谢 Polppan,我们已经确定这可能不是 Oracle 问题,而是 OCI 与 PHP 问题。我正在使用:
oci_execute($sql);
如上所述here (再次感谢 Polppan 提供的链接),EOL 字符和 oci_execute 之间存在一些问题。那是 11 年前的事了,所以我不知道是否已经修补过,我确实尝试过他的解决方案,但没有帮助。有谁知道 oci_execute 和创建触发器是否存在其他问题?
创建表格:(有效)
CREATE TABLE RT_documents (
documentID INT NOT NULL,
reviewID varchar2(20) NOT NULL,
file_location CLOB NOT NULL,
version NUMBER(*,3) NOT NULL,
CONSTRAINT RT_documents_pk PRIMARY KEY (documentID)
)
创建序列:(有效)
CREATE SEQUENCE rt_documents_seq
创建/替换触发器:(不起作用)
CREATE OR REPLACE TRIGGER rt_documents_bir
BEFORE INSERT ON RT_documents
FOR EACH ROW
BEGIN
SELECT RT_documents_seq.NEXTVAL
INTO :new.documentID
FROM dual;
END;
编辑:按照要求提供准确的错误消息 - (注意,我正在 PHP 中使用 OCI/Oracle 执行这些逐个查询。添加 PHP 标记以防万一,但很确定这是一个 Oracle 语法错误或其他错误) 。
错误:
Notice: oci_execute(): OCI_SUCCESS_WITH_INFO: ORA-24344: success with compilation error in (...)
-我可以成功执行前两个查询,并仔细检查,表在那里,因此它可以正常工作。
最佳答案
触发器无法理解 new.id
,因为 id
在 RT_documents
表中不存在。
你的触发器应该是
CREATE OR REPLACE TRIGGER rt_documents_bir
BEFORE INSERT
ON RT_documents
FOR EACH ROW
BEGIN
SELECT RT_documents_seq.NEXTVAL INTO :new.documentID FROM DUAL;
END;
更新
SELECT * FROM v$version;
Oracle Database 10g Enterprise Edition
CREATE TABLE RT_documents
(
documentID INT NOT NULL,
reviewID VARCHAR2 (20) NOT NULL,
file_location CLOB NOT NULL,
version NUMBER (*, 3) NOT NULL,
CONSTRAINT RT_documents_pk PRIMARY KEY (documentID)
);
Table created.
CREATE SEQUENCE rt_documents_seq;
Sequence created.
CREATE OR REPLACE TRIGGER rt_documents_bir
BEFORE INSERT
ON RT_documents
FOR EACH ROW
BEGIN
SELECT RT_documents_seq.NEXTVAL INTO :new.documentID FROM DUAL;
END;
/
Trigger created.
INSERT INTO RT_documents (reviewID, file_location, version)
VALUES ('test', 'test', 1);
1 row created.
SELECT * FROM RT_documents;
DOCUMENTID REVIEWID FILE_LOCATION
VERSION
---------- -------------------- -------------------------------------------
-------------------------------- ----------
1 test test
1
关于php - oci_execute() : OCI_SUCCESS_WITH_INFO: ORA-24344 using a trigger/sequence to auto increment an oracle table error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25498293/