x:procedureCall 조치는 스토어드 프로시저를 호출하기 위해 사용됩니다. 스토어드 프로시저가 결과 세트를 생성한 경우, 행은 Application Server 시스템의 메모리에 캐시됩니다. 이 결과 세트 중 하나(초기에는 첫 번째 결과 세트)는 항상 현재 결과 세트로 간주됩니다. 각 결과 세트에 있는 행 중 하나(초기에는 첫 번째 행)는 항상 현재 행으로 간주됩니다.
이 조치를 사용하면 id 속성에 이름을 지정한 변수를 사용하여 액세스할 수 있는 DBProcedureCall Bean이 작성됩니다.
DBProcedureCall Bean의 기본 기능을 사용할 수 있도록 JSP 조치가 제공됩니다. Call 문에 매개변수가 있으면 x:getParameter 및 x:parameter 조치를 사용하여 액세스할 수 있습니다. x:nextResultSet 및 x:previousResultSet을 사용하여 여러 결과 세트 사이에 위치지정하고, x:nextRow 및 x:previousRow를 사용하여 현재 결과 세트의 행에 위치지정할 수 있습니다. x:getColumn 조치를 사용하여 결과 세트의 열 값에 액세스할 수 있습니다. (해당 열에 액세스하기 전에 특정 결과 세트에 위치지정해야 합니다.) x:select 조치에 의해 생성되는 결과 세트와는 달리, x:update, x:delete 및 x:insert 조치로는 x:procedureCall에서 생성되는 결과 세트에서 행을 변경할 수 없습니다.
DBProcedureCall Bean의 모든 메소드도 scriptlet을 사용하여 실행할 수 있고 해당되는 모든 특성은 표준 jsp:getProperty 및 jsp:setProperty 조치를 사용하여 액세스할 수 있습니다.
<x:procedureCall id = "name" scope = "page|request|session" connectionSpec = "connectionSpec_id" connectionSpecRef = "connectionSpecRef" maxFieldSize = "numberOfBytes" maxRows = "numberOfRows" distinctTypesEnabled = "true|false" timeOut = "seconds" readOnly = "true|false" nullToken = "string" trace = "true|false" > <x:sql> </x:sql> <x:parameter parmName = "name" position = "number" type = "sqltype" mode = "in|out|inout" value = "parmValue" /> </x:procedureCall>
x:procedureCall 조치에는 다음과 같은 속성이 있습니다.
참조된 조치는 데이터베이스와의 연결을 작성하는 데 필요한 정보를 제공합니다. x:batch 조치에서 식별된 connectionSpec 조치를 사용하는, x:batch 조치 본문 내에서 조치가 발생할 경우 이 속성을 생략하십시오. 두 위치 모두에 지정했는데 값이 일치하지 않으면 오류 플래그가 표시됩니다.
connectionSpec 또는 connectionSpecRef 중 하나를 지정할 수 있으며 둘 다 지정할 수는 없습니다.
x:procedureCall 조치 본문에는 다음과 같은 태그가 올 수 있습니다.
다음 조치는 범위가 세션인 proc1 이름의 DBProcedureCall Bean을 작성합니다. conn1의 정보를 사용하여 데이터베이스에 연결합니다. 스토어드 프로시저는 사원 번호를 포함하는 입력 매개변수를 허용하고 사원 이름, 부서 및 전화번호를 포함하는 출력 매개변수를 리턴합니다. 예제는 또한 x:getParameter 조치를 사용하여 요청 출력에 출력 매개변수를 씁니다. x:parameter 조치에 대한 세부사항은 <x:parameter>를 참조하십시오. x:getParameter 조치에 대한 세부사항은 <x:getParameter>를 참조하십시오.
<x:procedureCall id="proc1" scope="session" connectionSpec="conn1" > <x:sql>{ CALL empinfo1(:EMPNO, :NAME, :DEPT, :PHONENO) } </x:sql> <x:parameter parmName="EMPNO" mode="in" type="INTEGER" value='<%= request.getParameter("empno") %>' /> <x:parameter parmName="NAME" mode="out" type="VARCHAR" /> <x:parameter parmName="DEPT" mode="out" type="VARCHAR" /> <x:parameter parmName="PHONENO" mode="out" type="VARCHAR" /> </x:procedureCall> ... <br>Employee number: <x:getParameter name="proc1" parmName="EMPNO"/> <br>Name: <x:getParameter name="proc1" parmName="NAME"/> <br>Department: <x:getParameter name="proc1" parmName="DEPT"/> <br>Phone number: <x:getParameter name="proc1" parmName="PHONENO"/>
다음 조치는 범위가 세션인 proc2 이름의 DBProcedureCall Bean을 작성합니다. 스토어드 프로시저는 사원 번호를 포함하는 입력 매개변수를 허용하고 열에 사원 번호, 이름, 부서 및 전화번호가 포함되는 단일 행 결과 세트를 리턴합니다. 입력 매개변수는 요청 매개변수 값으로 설정되고 Call 문이 실행됩니다. 예제는 또한 x:getColumn 조치를 사용하여 요청 출력에 결과 세트 열 값을 씁니다. x:parameter 조치에 대한 세부사항은 <x:parameter>를 참조하십시오. x:getParameter 조치에 대한 세부사항은 <x:getParameter>를 참조하십시오.
<x:metaData id="empinfo" xmlref="empinfo.xml" /> ... <x:procedureCall id="proc2" scope="session" connectionSpec="conn1" metaData="empinfo.xml"> <x:sql>CALL empinfo2(:EMPNO)</x:sql> <x:parameter parmName="EMPNO" mode="in" type="INTEGER" value='<%= request.getParameter("empno") %>' /> </x:procedureCall> ... <br>Employee number: <x:getColumn name="proc2" colName="EMPNO"/> <br>Name: <x:getColumn name="proc2" colName="NAME"/> <br>Department: <x:getColumn name="proc2" colName="DEPT"/> <br>Phone number: <x:getColumn name="proc2" colName="PHONENO"/>