2016-07-15 48 views
0

我在第7行得到的错误(见下面的代码),它以10克指定为:错误编译EXCEPTION_INIT()语句忽略Oracle 10g中

"Statement ignored"

任何人都可以告诉我我做错了什么?

create or replace trigger demo1_bifer 
    BEFORE INSERT ON demo1 
    FOR EACH ROW 
    declare 
     lock_id number; 
     resource_busy exception; 
     pragma EXCEPTION_INIT(resource_busy,-54); 
    begin 
     lock_id := dbms_utility.get_hash_value(to_char(:new.x),0,1024); 
     if (dbms_lock.request(id => lock_id,lockmode => dbms_lock.x_mode, timeout => 0, release_on_commmit => TRUE) not in (0,4)) 
     then raise resource_busy; 
     end if; 
    end; 
    /
+0

刚试过,我得到'PLS-00306:错误号码或类型的参数在'REQUEST''调用。类型看起来不错(整数,整数,整数,布尔值)。在我们继续前进之前,这是你看到的同样的错误吗?它与'pragma exception_init'没有关系。 –

+0

@WilliamRobertson。我得到的错误是“语句被忽略”,而不是PLS-00306。我正在使用Oracle 10g Express Edition。我不知道我得到这个错误的原因。那么,如果它与编译指示exception_init没有关系,那么你能否指定错误与什么有关? – Mukund

+0

请编辑您的问题,以包含与此触发器有关的所有错误的**完整**细节,而不仅仅是第一个。在SQL * Plus中输入'SHOW ERRORS TRIGGER demo1_bifer'来查看此触发器的所有错误。 PL/SQL编译器可能会选择忽略某个语句的原因有很多,“忽略语句”下面的下一个错误会告诉你为什么。另请注意,行号从'declare'行开始计数,所以第7行是开始的行'if(dbms_lock.request ...'。 –

回答

0

您在错误的参数名称release_on_commmit中键入了commit。删除三个m之一。

在我的系统(Oracle 11g XE)上我也遇到了错误PLS-00201: identifier 'DBMS_LOCK' must be declared。为了解决这个问题,我需要给DBMS_LOCK上的EXECUTE授予我正在创建触发器的用户。

+0

@ Luke Woodward。好吧,谢谢你!!我改变了它,但我仍然在10g中得到这个错误。是否是这样的情况:编译器exception_init()是仅支持11g及以上版本??? – Mukund

+0

@Mukund:不行,['10gR1支持pragma exception_init'](https://docs.oracle.com/cd/B14117_01/appdev.101/b10807/13_elems015.htm )另外,正如我在对这个问题的评论中指出的那样,第7行不是'pragma exception_init'行。 –