Ошибка последовательности передачи параметров в хранимую функцию из sql запроса

Рейтинг: 1Ответов: 0Опубликовано: 13.01.2023

имеется хранимая функция:

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

Ответы

Ответов пока нет.