Ошибка последовательности передачи параметров в хранимую функцию из sql запроса
имеется хранимая функция:
CREATE OR replace FUNCTION test (n1 NUMBER , n2 NUMBER , n3 NUMBER )
RETURN NUMBER
AS
BEGIN
RETURN to_number (to_char (n1) ||to_char (n2) ||to_char (n3));
END;
Функция вызывается в запросе, при вызове объявляются параметры в иной последовательности нежели в описании функции. Собственно запрос:
WITH t AS (
SELECT 1 AS n1
, 2 AS n2
, 3 AS n3
FROM dual)
, t1 AS (SELECT t.*
, test (n1 => t.n1, n3=>t.n3, n2=> t.n2) AS nn
FROM t )
SELECT t1.*, t1.nn
FROM t1
В результате выполнения запроса, получаем ответ:
Как оказывается, функция вызывается 2 раза, вопрос заключается в том, почему при втором вызове параметры подставляются в последовательности в котором они объявлены в хранимой процедуре, а не в той последовательности, в которой они заданы в запросе ?
- Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit
- Production PL/SQL Release 11.2.0.4.0 - Production
- CORE 11.2.0.4.0 Production TNS for 64-bit Windows: Version 11.2.0.4.0
- Production NLSRTL Version 11.2.0.4.0 - Production
Источник: Stack Overflow на русском