我使用名为“users_id_trigger”的触发器来自动增加users.user_id列。
我正在开发一个PHP项目,当我从PHP脚本运行查询时,我收到此错误。这是错误消息:
oci_execute():OCI_SUCCESS_WITH_INFO:ORA-24344:编译错误成功
这是我创建整个表的方法,以及相关的SEQUENCE和TRIGGER,以便在user_id列中具有自动增量功能。
public function create_users_table()
{
// creating users table
oci_execute(oci_parse($this->conn, "CREATE TABLE users(
user_id NUMBER(10) NOT NULL,
user_name VARCHAR2(100) NOT NULL,
user_password VARCHAR(100) NOT NULL,
user_email VARCHAR(100) NOT NULL,
user_location VARCHAR(100) NOT NULL,
CONSTRAINT users_pk PRIMARY KEY (user_id)
)"));
// creating users sequence
oci_execute(oci_parse($this->conn, "CREATE SEQUENCE users_seq
MINVALUE 1
START WITH 1
INCREMENT BY 1
NOCACHE;
"));
// creating user sequence trigger
echo oci_execute(oci_parse($this->conn, "CREATE OR REPLACE TRIGGER users_id_trigger
BEFORE INSERT ON users
FOR EACH ROW
BEGIN
:new.user_id := users_seq.nextval;
END;
"));
}
我做错了什么?因为表和序列是成功创建的,但不是触发器。
修改
插入新行时出现此错误:
插入用户值(1,'hasan','1234', 'hdg@live.com','达卡,孟加拉国') *第1行的错误:ORA-04098:触发'FLIPLISTS.USERS_ID_TRIGGER'无效且重新验证失败
我正在使用的Oracle版本: Oracle数据库11g快捷版11.2.0.2.0版 - 64位生产版(Windows 10)
编译错误: ORA-04082:表级触发器中不允许使用新引用或旧引用
答案 0 :(得分:0)
如果您使用的oracle版本小于11g,则修改您的触发器,如下所示
CREATE OR REPLACE TRIGGER users_id_trigger
BEFORE INSERT ON users
FOR EACH ROW
BEGIN
select users_seq.nextval into :new.user_id from dual ;
END;
答案 1 :(得分:0)
问题是您在Windows上有换行符,因此请将其删除。
echo oci_execute(oci_parse($this->conn, trim(preg_replace('/\s+/', ' ', "CREATE OR REPLACE TRIGGER users_id_trigger
BEFORE INSERT ON users
FOR EACH ROW
BEGIN
:new.user_id := users_seq.nextval;
END;
"));));