Form中需要调用一个函数来产生单据号,却发现了这个警告: ORA-14551:cannot perform a DML operation inside a query 原来,很多赋值语句,不是存储过程,而是一系列的SELECT语句。比如form个性化中的=my_func,实际上是 SELECT my_func INTO :MY_VAR FROM DUAL; 在SELECT时,系统会分析是否存在对表的插入、更新、修改等操作,默认是禁止此类行为的。如果必要,这时需要对函数做适当调整,加上PRAGMA AUTONOMOUS_TRANSACTION即可。如: FUNCTION get_doc_num(p_doc_type IN VARCHAR2, p_given_date IN DATE DEFAULT SYSDATE) RETURN VARCHAR2 IS PRAGMA AUTONOMOUS_TRANSACTION; BEGIN … … END get_doc_num; 常用的PRAGMA还有: RESTRICT_REFERENCES EXCEPTION_INIT SERIALLY_REUSABLE