Boa tarde,
Tenho uma função que executa um update em determinada tabela e retorna um valor. Para depurar, ela funciona normalmente retornando o valor e atualizando a outra tabela, porém não consigo chamar a mesma por um select.
OBS: o update necessariamente precisa estar dentro da função.
[code]
create or replace
function num RETURN NUMBER is
RESULT NUMBER;
NUMDOC NUMBER;
ANO NUMBER;
DIGITO1 VARCHAR(1);
DIGITO2 VARCHAR(1);
BEGIN
SELECT TO_CHAR(SYSDATE, ‘YYYY’) INTO ANO FROM DUAL;
SELECT NUMNDO INTO NUMDOC FROM TIQW.TIQNDO WHERE ANONDO = ANO AND TIPNDO = ‘GD’;
NUMDOC := NUMDOC + 1;
UPDATE TIQW.TIQNDO SET NUMNDO = NUMDOC WHERE ANONDO = ANO AND TIPNDO = ‘GD’;
COMMIT ;
SELECT TO_CHAR(SYSDATE, ‘YY’) INTO ANO FROM DUAL;
NUMDOC := NUMDOC || ANO;
SELECT DIGITOMODULO11(to_char(NUMDOC)) INTO DIGITO1 FROM DUAL;
NUMDOC := NUMDOC || DIGITO1;
SELECT DIGITOMODULO11(to_char(NUMDOC)) INTO DIGITO2 FROM DUAL;
NUMDOC := NUMDOC || DIGITO2;
RESULT := NUMDOC;
RETURN(RESULT);
END num;[/code]
O erro mostrado é o seguinte: Erro ao iniciar na linha 1 no comando
select numdam() from dual
Relatório de erro:
Erro SQL: ORA-14551: cannot perform a DML operation inside a query
ORA-06512: at “TIQW.NUMDAM”, line 16
14551. 00000 - "cannot perform a DML operation inside a query "
*Cause: DML operation like insert, update, delete or select-for-update
cannot be performed inside a query or under a PDML slave.
*Action: Ensure that the offending DML operation is not performed or
use an autonomous transaction to perform the DML operation within
the query or PDML slave.
Quando eu executo a linha via sqldeveloper ela executa normalmente, retornando o valor. Contudo, preciso que este valor retorne em um select, o que não funciona.