Update: testamos na versão 12c (12.1.0.1) e o problema persiste.
CREATE OR REPLACE FUNCTION f_teste(pcEmp VARCHAR2, pcCod VARCHAR2)
RETURN NUMBER IS
vnRetorno NUMBER;
BEGIN
DBMS_OUTPUT.put_line('pcEmp: ' || pcEmp || ' pcCod: ' || pcCod);
IF pcEmp = '500' THEN
vnRetorno := 1;
ELSE
vnRetorno := -1;
END IF;
RETURN vnRetorno;
END;
/
Vejam o resultado de duas chamadas quase idênticas:SQL> select * from (SELECT 'A' campo1, f_teste(pcCod => '1000', pcEmp => '500') vlr from dual);
CAMPO1 VLR
------ ----------
A 1
pcEmp: 500 pcCod: 1000
SQL> select * from (SELECT 'A' campo1, f_teste(pcCod => '1000', pcEmp => '500') vlr from dual) abc where abc.vlr > 0;
CAMPO1 VLR
------ ----------
pcEmp: 1000 pcCod: 500
Na segunda chamada, a indicação de quem é "pcCod" e quem é "pcEmp" foi ignorada e os parâmetros foram passados na ordem, invertendo a atribuição.
Quem diria hein, rá pegadinha do malandro!
ResponderExcluir