Oracle SQL触发器错误 - OCI_SUCCESS_WITH_INFO:ORA-24344

时间:2015-12-28 14:02:38

标签: php sql oracle oracle-sqldeveloper

我使用名为“users_id_trigger”的触发器来自动增加users.user_id列。

但在对象浏览器中,其状态显示无效! enter image description here

我正在开发一个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:表级触发器中不允许使用新引用或旧引用

2 个答案:

答案 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;
    "));));