저장 프로시저 및 UDTF: 호출에서 우선하는 인자 이름

주의

이 동작 변경 사항은 2023_03 번들에 있습니다.

번들의 현재 상태는 번들 기록 섹션을 참조하십시오.

호출에 명명된 인자가 포함된 저장 프로시저와 UDTF(사용자 정의 테이블 함수)에 대한 호출에서 Snowflake는 다음과 같이 인자 위치보다 인자 이름에 우선순위를 부여합니다.

이전:

명명된 인자가 있는 프로시저 또는 UDTF(사용자 정의 테이블 함수)를 호출할 때 Snowflake는 인자 이름을 무시하고 인자 위치를 사용하여 프로시저 또는 함수에 전달되는 값을 결정합니다.

현재:

프로시저 및 UDTF 호출에서 인자 이름이 인자 위치보다 우선합니다. 이로 인해 동작 변경 전과는 달리 다음 동작이 발생할 수 있습니다.

  • 저장 프로시저 또는 사용자 정의 테이블 함수에 대해 이전에 작동 중이던 호출로 인해 오류가 발생할 수 있습니다.

  • 인자 이름으로 인해 인자가 이전과는 다른 순서로 전달될 수 있습니다. 이로 인해 오류, 잘못된 결과 또는 잘못된 데이터 삽입이 발생할 수 있습니다.

  • 인자 이름으로 인해 동일한 이름을 가진 다른 저장 프로시저가 호출될 수 있습니다. 이로 인해 오류, 잘못된 결과 또는 잘못된 데이터 삽입이 발생할 수 있습니다.

  • 다음 예에서는 변경 전후에 두 저장 프로시저에 대한 호출이 어떻게 다를 수 있는지 보여줍니다.

다음 예에서는 변경 전후에 두 저장 프로시저에 대한 호출이 어떻게 다를 수 있는지 보여줍니다.

-- One stored procedure
CREATE OR REPLACE PROCEDURE proc(STRARG1 varchar, STRARG2 varchar)
RETURNS VARCHAR
LANGUAGE SQL
AS
$$
BEGIN
  return 'hello';
END
$$;
-- Another procedure
CREATE OR REPLACE PROCEDURE proc(ARG1 number, ARG2 number)
RETURNS BOOLEAN
LANGUAGE SQL
AS
$$
BEGIN
  return ARG1 < ARG2;
END
$$;
-- Example A
-- Before: returns 'hello'
-- After: returns TRUE
CALL PROC(ARG1 => '5', ARG2 => '100');
-- Example B
-- Before: returns TRUE
-- After: returns 'hello'
CALL PROC(STRARG1 => 5, STRARG2 => 100); -- 'hello'.
Copy

참조: 1017