327.4. 저장 프로시저 템플릿 선언
템플릿은 Java 메서드 서명과 유사한 구문을 사용하여 선언됩니다. 저장 프로시저의 이름 및 괄호로 묶은 인수입니다. 예를 들면 다음과 같이 설명합니다.
<to uri="sql-stored:STOREDSAMPLE(INTEGER ${headers.num1},INTEGER ${headers.num2},INOUT INTEGER ${headers.num3} result1,OUT INTEGER result2)"/>
인수는 유형으로 선언된 다음 간단한 표현식을 사용하여 Camel 메시지에 매핑됩니다. 따라서 이 예에서 처음 두 매개 변수는 INTEGER 유형의 IN 값이며 메시지 헤더에 매핑됩니다. 세 번째 매개 변수는 INOUT입니다. 즉, INTEGER를 허용한 다음 다른 INTEGER 결과를 반환합니다. 마지막 매개 변수는 OUT 값, INTEGER 유형이기도 합니다.
SQL 용어에서 저장 프로시저는 다음과 같이 선언될 수 있습니다.
CREATE PROCEDURE STOREDSAMPLE(VALUE1 INTEGER, VALUE2 INTEGER, INOUT RESULT1 INTEGER, OUT RESULT2 INTEGER)
327.4.1. IN 매개변수 링크 복사링크가 클립보드에 복사되었습니다!
IN 매개 변수는 매개 변수 이름, SQL 유형(scale 포함), 유형 이름 및 값 source라는 네 부분으로 구분됩니다.
매개변수 이름은 선택 사항이며 제공되지 않는 경우 자동으로 생성됩니다. 따옴표(') 사이에 지정해야 합니다.
SQL 유형은 필수이며 정수(positive 또는 negative)이거나 일부 클래스의 정수 필드에 대한 참조일 수 있습니다. SQL 유형에 점이 포함된 경우 구성 요소에서 해당 클래스를 해결하고 지정된 필드를 읽습니다. 예를 들어 SQL 유형 com.Foo.INTEGER 는 com.Foo 의 INTEGER 필드에서 읽습니다. 형식에 쉼표가 포함되어 있지 않으면 정수 값을 확인하는 클래스는 java.sql.Types 가 됩니다. type은 스케일링에 의해 중첩될 수 있습니다(예: DECIMAL(10)은 규모가 10인 java.sql.Types.DECIMAL 을 의미합니다.
유형 이름은 선택 사항이며 따옴표(') 사이에 지정해야 합니다.
값 소스가 필요합니다. 값 소스는 교환의 매개 변수 값을 채웁니다. 단순 표현식 또는 헤더 위치(예 :#<header name>)일 수 있습니다. 예를 들어 단순 표현식 ${header.val} 은 매개 변수 값이 "val" 헤더에서 읽혀집니다. 헤더 위치 표현식 :#val은 동일한 효과를 갖습니다.
<to uri="sql-stored:MYFUNC('param1' org.example.Types.INTEGER(10) ${header.srcValue})"/>
URI는 매개 변수 이름 "param1"을 사용하여 저장 프로시저를 호출하므로 org.example.Types 클래스의 INTEGER 필드에서 SQL 유형을 읽고 scale이 10으로 설정됩니다. 매개변수의 입력 값은 헤더 "srcValue"에서 전달됩니다.
<to uri="sql-stored:MYFUNC('param1' 100 'mytypename' ${header.srcValue})"/>
SQL-type은 100이고 유형 name은 "mytypename"이라는 점을 제외하고 URI는 이전과 동일합니다.
실제 호출은 org.springframework.jdbc.core.SqlParameter를 사용하여 수행됩니다.
327.4.2. OUT 매개변수 링크 복사링크가 클립보드에 복사되었습니다!
OUT 매개 변수는 유사하게 작동하며 SQL 유형(scale 포함), 유형 이름 및 출력 매개 변수 이름이라는 세 가지 부분을 포함합니다.
SQL 유형은 IN 매개 변수와 동일하게 작동합니다.
유형 이름은 선택 사항이며 IN 매개변수와 동일하게 작동합니다.
출력 매개변수 이름은 OUT 매개변수 이름과 결과가 저장되는 헤더 이름에 사용됩니다.
<to uri="sql-stored:MYFUNC(OUT org.example.Types.DECIMAL(10) outheader1)"/>
URI는 OUT 매개변수의 이름이 "outheader1"이고 결과는 "outheader1"로 들어갑니다.
<to uri="sql-stored:MYFUNC(OUT org.example.Types.NUMERIC(10) 'mytype' outheader1)"/>
이는 이전 버전과 동일하지만 유형 name은 "mytype"이 됩니다.
실제 호출은 org.springframework.jdbc.core.SqlOutParameter 를 사용하여 수행됩니다.
327.4.3. INOUT 매개변수 링크 복사링크가 클립보드에 복사되었습니다!
INOUT 매개변수는 위의 모든 매개 변수의 조합입니다. 교환에서 값을 수신하고 결과를 메시지 헤더로 저장합니다. 유일한 경고는 IN 매개변수의 "name"을 건너뜁니다. 대신 OUT 매개변수의 "name"은 SQL 매개변수 이름과 결과 헤더 이름을 모두 정의합니다.
<to uri="sql-stored:MYFUNC(INOUT DECIMAL(10) ${headers.inheader} outheader)"/>
실제 호출은 org.springframework.jdbc.core.SqlInOutParameter를 사용하여 수행됩니다.