我已经创建了常规功能.它已成功创建.但是当我运行它时
select reg('awlad','01968688680','545466455','12345') from dual
它给了我这个错误:
ORA-14551: cannot perform a DML operation inside a query
我怎么解决这个问题?
CREATE OR REPLACE FUNCTION reg( name in varchar2,cellNo in varchar2,voterId in varchar2,pass in varchar2 ) RETURN NUMBER IS succ NUMBER; BEGIN succ:=0; insert into logInfo values(loginfo_seq.nextval,cellNo,pass,0); succ:=1; insert into passInfo values(name,voterId); succ:=2; RETURN succ; END;
解决方法
函数应该计算并返回结果,而不是更改数据库的状态.如果要在函数中执行DML(即,如果要在表中插入行),则无法在SELECT语句中调用该函数,因为SELECT语句无法更改数据库的状态.一般来说,最好将这种东西创建为存储过程而不是存储函数.
DECLARE l_success_code NUMBER; BEGIN l_success_code := reg('awlad','12345'); END;
如果要将其创建为过程
CREATE OR REPLACE PROCEDURE reg( name in varchar2,pass in varchar2,succ out NUMBER ) AS BEGIN succ:=0; insert into logInfo values(loginfo_seq.nextval,0); insert into passInfo values(name,voterId); succ:=1; END;
那么你需要通过传入OUT参数来调用该过程
DECLARE l_success_code NUMBER; BEGIN reg('awlad','12345',l_success_code); END;