Функция должна вычислять и возвращать результат, а не изменять состояние базы данных.Если вы хотите сделать DML
в функции (то есть, если вы хотите вставить строки в таблицы), вы не можете вызвать эту функцию в операторе SELECT
, так как инструкция SELECT
не может изменить состояние базы данных.В общем, вам лучше создать такую вещь как хранимую процедуру, а не как хранимую функцию.
Вы можете вызывать эту функцию из блока PL / SQL так же, как вы вызываете хранимую процедуру
DECLARE
l_success_code NUMBER;
BEGIN
l_success_code := reg('awlad','01968688680','545466455','12345');
END;
Если вы хотите создать это как процедуру
CREATE OR REPLACE PROCEDURE reg( name in varchar2,
cellNo in varchar2,
voterId in varchar2,
pass in varchar2,
succ out NUMBER )
AS
BEGIN
succ:=0;
insert into logInfo values(loginfo_seq.nextval,cellNo,pass,0);
insert into passInfo values(name,cellNo,voterId);
succ:=1;
END;
, вам нужно вызвать процедуру, передав параметр OUT
DECLARE
l_success_code NUMBER;
BEGIN
reg('awlad','01968688680','545466455','12345', l_success_code);
END;