๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“ ๋ฐฐ์šฐ๊ณ  ์ตํžˆ๊ธฐ +/JDBC

(65)[oracle]7์ผ์ฐจ: JDBC08 / โ–  CallableStatement โ– 

by ์ข…์ด๋นจ๋Œ€ 2023. 11. 27.
TOP

๋ชฉ์ฐจ

    1. 23.11.27(์›”)

    F_JDBC08

    ใ„ด C:\JDBCStudy\JDBC08\src\com\test

    ใ„ดใ„ด Test001.java

    /* ==================================================
    	Test001.java
    	- CallableStatement ๋ฅผ ํ™œ์šฉํ•œ SQL ๊ตฌ๋ฌธ ์ „์†ก ์‹ค์Šต
    ===================================================== */
    package com.test;
    
    import java.sql.CallableStatement;
    import java.sql.Connection;
    import java.util.Scanner;
    
    import com.util.DBConn;
    
    public class Test001
    {
    	public static void main(String[] args)
    	{
    		try
    		{
    			Scanner sc = new Scanner(System.in);
    			Connection conn = DBConn.getConnection();
    			
    			do
    			{
    				System.out.print("์ด๋ฆ„ ์ž…๋ ฅ(-1 ์ข…๋ฃŒ): ");
    				String name = sc.next();
    				
    				if (name.equals("-1"))
    					break;
    
    				System.out.print("์ „ํ™”๋ฒˆํ˜ธ ์ž…๋ ฅ: ");
    				String tel = sc.next();
    				
    				
    				if (conn != null)
    				{
    					System.out.println("๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ์„ฑ๊ณต~!!!");
    					
    					try
    					{
    						// ์ฟผ๋ฆฌ๋ฌธ ์ค€๋น„ check~!!!
    						String sql = "{call PRC_MEMBERINSERT(?, ?)}";
    						
    						// CallableStatement ์ž‘์—… ๊ฐ์ฒด ์ƒ์„ฑ check~!!!
    						CallableStatement cstmt = conn.prepareCall(sql);
    						
    						// ๋งค๊ฐœ๋ณ€์ˆ˜ ์ „๋‹ฌ
    						cstmt.setString(1, name);
    						cstmt.setString(2, tel);
    						
    						int result = cstmt.executeUpdate();
    						
    						if(result > 0)
    							System.out.println("ํ”„๋กœ์‹œ์ € ํ˜ธ์ถœ ๋ฐ ๋ฐ์ดํ„ฐ ์ž…๋ ฅ ์™„๋ฃŒ~!!!!");
    						
    					} catch (Exception e)
    					{
    						System.out.println(e.toString());
    					}
    				}
    			} while (true);
    			
    			DBConn.close();
    			
    			System.out.println("\n๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ์ข…๋ฃŒ~!!!");
    			System.out.println("ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒ๋จ~!!!");
    			
    			
    		} catch (Exception e)
    		{
    			System.out.println(e.toString());
    		}
    	}
    }
    
    // ์‹คํ–‰ ๊ฒฐ๊ณผ
    /*
    ์ด๋ฆ„ ์ž…๋ ฅ(-1 ์ข…๋ฃŒ): ๊น€๋‹ค์Šฌ
    ์ „ํ™”๋ฒˆํ˜ธ ์ž…๋ ฅ: 010-1111-1111
    ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ์„ฑ๊ณต~!!!
    ํ”„๋กœ์‹œ์ € ํ˜ธ์ถœ ๋ฐ ๋ฐ์ดํ„ฐ ์ž…๋ ฅ ์™„๋ฃŒ~!!!!
    ์ด๋ฆ„ ์ž…๋ ฅ(-1 ์ข…๋ฃŒ): ์˜ค์ˆ˜๊ฒฝ
    ์ „ํ™”๋ฒˆํ˜ธ ์ž…๋ ฅ: 010-2222-2222
    ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ์„ฑ๊ณต~!!!
    ํ”„๋กœ์‹œ์ € ํ˜ธ์ถœ ๋ฐ ๋ฐ์ดํ„ฐ ์ž…๋ ฅ ์™„๋ฃŒ~!!!!
    ์ด๋ฆ„ ์ž…๋ ฅ(-1 ์ข…๋ฃŒ): ๊น€๊ฒฝํƒœ
    ์ „ํ™”๋ฒˆํ˜ธ ์ž…๋ ฅ: 010-3333-3333
    ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ์„ฑ๊ณต~!!!
    ํ”„๋กœ์‹œ์ € ํ˜ธ์ถœ ๋ฐ ๋ฐ์ดํ„ฐ ์ž…๋ ฅ ์™„๋ฃŒ~!!!!
    ์ด๋ฆ„ ์ž…๋ ฅ(-1 ์ข…๋ฃŒ): ๋ฐ•๋ฒ”๊ตฌ
    ์ „ํ™”๋ฒˆํ˜ธ ์ž…๋ ฅ: 010-4444-4444
    ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ์„ฑ๊ณต~!!!
    ํ”„๋กœ์‹œ์ € ํ˜ธ์ถœ ๋ฐ ๋ฐ์ดํ„ฐ ์ž…๋ ฅ ์™„๋ฃŒ~!!!!
    ์ด๋ฆ„ ์ž…๋ ฅ(-1 ์ข…๋ฃŒ): -1
    
    ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ์ข…๋ฃŒ~!!!
    ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒ๋จ~!!!
    
    */

    ใ„ดใ„ด Test002.java

    Project Explorer ์ƒ์—์„œ ํ•ด๋‹น ํ”„๋กœ์ ํŠธ(JDBC08) ๋งˆ์šฐ์Šค ์šฐํด๋ฆญ.

    Project Explorer ์ƒ์—์„œ ํ•ด๋‹น ํ”„๋กœ์ ํŠธ(JDBC08) ๋งˆ์šฐ์Šค ์šฐํด๋ฆญ. Build Path > Configure Build Path
    Libraries ํƒญ > ์šฐ์ธก Add External JAR
    <ojdbc6.jar> ๋“ฑ๋กํ›„ Apply !!!

     

    /* ==================================================
    	Test002.java
    	- CallableStatement ๋ฅผ ํ™œ์šฉํ•œ SQL ๊ตฌ๋ฌธ ์ „์†ก ์‹ค์Šต
    ===================================================== */
    // CallableStatement ์˜ ํ•ต์‹ฌ ์˜ˆ์ œ
    
    package com.test;
    
    import java.sql.CallableStatement;
    import java.sql.Connection;
    import java.sql.ResultSet;
    
    import com.util.DBConn;
    
    import oracle.jdbc.OracleTypes;
    
    public class Test002
    {
    	public static void main(String[] args)
    	{
    		try
    		{
    			Connection conn = DBConn.getConnection();
    			
    			if (conn != null)
    			{
    				System.out.println("๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ์„ฑ๊ณต~!!!");
    				
    				try
    				{
    					// ์ฟผ๋ฆฌ๋ฌธ ์ค€๋น„ check~!!!
    					String sql = "{call PRC_MEMBERSELECT(?)}";
    					
    					// CallableStatement ์ž‘์—… ๊ฐ์ฒด ์ƒ์„ฑ check~!!!
    					CallableStatement cstmt = conn.prepareCall(sql);
    					
    					// check~!!!
    					// ํ”„๋กœ์‹œ์ € ๋‚ด๋ถ€์—์„œ <sys_refcursor>๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—
    					// OracleTypes.CURSOR ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๋“ฑ๋ก ๊ณผ์ •์ด ํ•„์š”ํ•œ ์ƒํ™ฉ.
    					// 1. Project Explorer ์ƒ์—์„œ ํ•ด๋‹น ํ”„๋กœ์ ํŠธ(JDBC08) ๋งˆ์šฐ์Šค ์šฐํด๋ฆญ.
    					// 2. Build Path > Configure Build Path ํด๋ฆญ.
    					// 3. Libraries ํƒญ ์„ ํƒ
    					// 4. ์šฐ์ธก Add External JAR ๋ฒ„ํŠผ ํด๋ฆญ
    					// 5. <ojdbc6.jar> ํŒŒ์ผ ์ถ”๊ฐ€ ๋“ฑ๋ก(์™ธ๋ถ€ jar ํŒŒ์ผ ์—ฐ๊ฒฐ)
    					// 6. <import oralce.jdbc.OralceTypes;> ๊ตฌ๋ฌธ ์ถ”๊ฐ€ ๋“ฑ๋ก
    					cstmt.registerOutParameter(1, OracleTypes.CURSOR);
    					cstmt.execute(); // **์ฐธ์กฐํ•˜๋Š” ํ˜•ํƒœ์˜ ์ปค์„œ๋ฅผ ์“ธ๋•Œ๋Š” ์กฐ์‹ฌํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๊ณ , ์šฐ๋ฆฌ๋Š” execute() ์‚ฌ์šฉ**
    					ResultSet rs = (ResultSet)cstmt.getObject(1); //**Object ํƒ€์ž…์œผ๋กœ ๋ฐ˜ํ™˜**
    					
    					while (rs.next())
    					{
    						String sid = rs.getString("SID");
    						String name = rs.getString("NAME");
    						String tel = rs.getString("TEL");
    						
    						String str = String.format("%3s %7s %12s", sid, name, tel);
    						
    						System.out.println(str);
    						
    					}
    					
    					rs.close();
    					cstmt.close();
    					
    				} catch (Exception e)
    				{
    					System.out.println(e.toString());
    				}
    				
    			}
    			
    			DBConn.close();
    			
    			System.out.println("\n๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ์ข…๋ฃŒ~!!!");
    			System.out.println("ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒ๋จ~!!!");
    			
    		} catch (Exception e)
    		{
    			System.out.println(e.toString());
    		}
    	}
    }
    // ์‹คํ–‰ ๊ฒฐ๊ณผ
    /*
    ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ์„ฑ๊ณต~!!!
      3     ๊น€๋‹ค์Šฌ 010-1111-1111
      4     ์˜ค์ˆ˜๊ฒฝ 010-2222-2222
      5     ๊น€๊ฒฝํƒœ 010-3333-3333
      6     ๋ฐ•๋ฒ”๊ตฌ 010-4444-4444
    
    ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ์ข…๋ฃŒ~!!!
    ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒ๋จ~!!!
    */

    ใ„ด C:\JDBCStudy\JDBC08\src\com\util

    ใ„ดใ„ด DBConn.java

    ...

     

    ใ„ด JDBC08_scott.sql

    SELECT USER
    FROM DUAL;
    --==>> SCOTT
    
    SELECT *
    FROM TBL_MEMBER
    ORDER BY SID;
    /*
    1	์ด์œค์ˆ˜	010-1111-1111
    2	์ž„ํ•˜์„ฑ	010-3333-3333
    3	๊น€๋ฏผ์ง€	010-4444-4444
    4	๋ฌธ์ •ํ™˜	010-5555-5555
    5	์ •ํ•œ์šธ	010-6666-6666
    6	์ •ํ•œ์šธ	010-6666-6666
    7	์ด์œค์ˆ˜	010-7777-7777
    */
    
    TRUNCATE TABLE TBL_MEMBER;
    --==>> Table TBL_MEMBER์ด(๊ฐ€) ์ž˜๋ ธ์Šต๋‹ˆ๋‹ค.
    
    SELECT *
    FROM TBL_MEMBER
    ORDER BY SID;
    --==>> ์กฐํšŒ๊ฒฐ๊ณผ ์—†์Œ
    
    DROP SEQUENCE MEMBERSEQ;
    --==>> Sequence MEMBERSEQ์ด(๊ฐ€) ์‚ญ์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    
    
    --โ—‹ CallableStatement ์‹ค์Šต์„ ์œ„ํ•œ ํ”„๋กœ์‹œ์ € ์ž‘์„ฑ
    --  ํ”„๋กœ์‹œ์ € ๋ช…   : PRC_MEMBERINSERT
    --  ํ”„๋กœ์‹œ์ € ๊ธฐ๋Šฅ : TBL_MEMBER ํ…Œ์ด๋ธ”์— ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•˜๋Š” ํ”„๋กœ์‹œ์ €
    
    CREATE OR REPLACE PROCEDURE PRC_MEMBERINSERT
    ( VNAME    IN TBL_MEMBER.NAME%TYPE
    , VTEL     IN TBL_MEMBER.TEL%TYPE
    )
    IS
        VSID      TBL_MEMBER.SID%TYPE;
    BEGIN
        
        SELECT NVL(MAX(SID),0)+1 INTO VSID
        FROM TBL_MEMBER;
    
        INSERT INTO TBL_MEMBER(SID, NAME, TEL)
        VALUES(VSID, VNAME, VTEL);
        
        COMMIT;
    END;
    
    SELECT *
    FROM TBL_MEMBER;
    --==>>
    /*
    3	๊น€๋‹ค์Šฌ	010-1111-1111
    4	์˜ค์ˆ˜๊ฒฝ	010-2222-2222
    5	๊น€๊ฒฝํƒœ	010-3333-3333
    6	๋ฐ•๋ฒ”๊ตฌ	010-4444-4444
    */
    
    DELETE
    FROM TBL_MEMBER;
    
    
    --โ—‹ CallableStatement ์‹ค์Šต์„ ์œ„ํ•œ ํ”„๋กœ์‹œ์ € ์ƒ์„ฑ
    -- ํ”„๋กœ์‹œ์ € ๋ช…   : PRC_MEMBERSELECT
    -- ํ”„๋กœ์‹œ์ € ๊ธฐ๋Šฅ : TBL_MEMBER ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜ค๋Š” ํ”„๋กœ์‹œ์ €
    --  โ€ป <SYS_REFCURSOR> ์ž๋ฃŒํ˜•์„ ์ด์šฉํ•˜์—ฌ ์ปค์„œ ๋‹ค๋ฃจ๊ธฐ
    
    CREATE OR REPLACE PROCEDURE PRC_MEMBERSELECT
    ( VRESULT   OUT SYS_REFCURSOR
    
    )
    IS
        -- ์ฃผ์š” ๋ณ€์ˆ˜ ์„ ์–ธ
        -- -> ์ปค์„œ ์ •์˜ -> ์ถœ๋ ฅ์šฉ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋Œ€์ฒด
    BEGIN
        OPEN VRESULT FOR
            SELECT SID, NAME, TEL
            FROM TBL_MEMBER
            ORDER BY SID;
            
    --    CLOSE VRESULT;
        /* ์ฐธ์กฐํ•˜๋Š” ํ˜•ํƒœ์˜ ์ปค์„œ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ์ปค์„œ๋ฅผ ๋‹ซ์ง€ ์•Š๋Š”๋‹ค!
            ์˜ค๋ผํด์ด ์•„๋‹Œ, ์ž๋ฐ”์—์„œ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์—
        */
        
    --    COMMIT;
    END;
    --==>> Procedure PRC_MEMBERSELECT์ด(๊ฐ€) ์ปดํŒŒ์ผ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    
    
    COMMIT;
    --==>> ์ปค๋ฐ‹ ์™„๋ฃŒ.

     


    โ–  โ–  โ–  CallableStatement โ–  โ–  โ– 

    /*
    ์‚ฌ์šฉ๋นˆ๋„๋Š” ํ˜„์ €ํ•˜๊ฒŒ ๋–จ์–ด์ง€์ง€๋งŒ,
    JDBC ์ƒ์—์„œ ๊ฐ์ฒด์ƒ์„ฑํ•˜๊ณ  ๋ถˆ๋Ÿฌ์„œ ์‚ฌ์šฉํ•˜๋Š” ์šฉ๋„๋กœ๋Š” ๊ผญ ํ•„์š”ํ•œ ์ธํ„ฐํŽ˜์ด์Šค.
    */


    1. CallableStatement ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋ชจ๋“  DBMS ๋“ค์— ๋Œ€ํ•œ ํ‘œ์ค€ ๋ฐฉ๋ฒ•์œผ๋กœ

        **์ €์žฅ ํ”„๋กœ์‹œ์ €(stored procedure)๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค**์ด๋ฉฐ,
        ํ˜ธ์ถœ์€ escape ๋ฌธ๋ฒ•์œผ๋กœ ์ž‘์„ฑ๋œ๋‹ค.

    2. ๊ฒฐ๊ณผ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์ง€๋Š” ํ˜•ํƒœ์™€ ๊ฒฐ๊ณผ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์—†๋Š” ํ˜•ํƒœ(๋‘ ๊ฐ€์ง€)์ด๋ฉฐ

        OUT ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์ข…๋ฅ˜์ธ ๊ฒฐ๊ณผ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š”
        ์ €์žฅ ํ”„๋กœ์‹œ์ €์— ๋Œ€ํ•œ ๋ฐ˜ํ™˜๊ฐ’์ด๋‹ค.
        ๋‘ ํ˜•ํƒœ ๋ชจ๋‘ IN ๋งค๊ฐœ๋ณ€์ˆ˜(์ž…๋ ฅ), OUT ๋งค๊ฐœ๋ณ€์ˆ˜(์ถœ๋ ฅ), INOUT ๋งค๊ฐœ๋ณ€์ˆ˜(์ž…์ถœ๋ ฅ)
        ๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๋ณ€์ˆ˜ ๋ฒˆํ˜ธ๋ฅผ ๊ฐ€์ง€๋ฉฐ
        <?>๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์ €์žฅ ์œ„์น˜๋กœ ๋‚˜ํƒ€๋‚ธ๋‹ค.

    3. ํ˜•์‹ ๋ฐ ๊ตฌ์กฐ

        (JDBC ์—์„œ ์ €์žฅ ํ”„๋กœ์‹œ์ € ํ˜ธ์ถœ์„ ์œ„ํ•œ ๋ฌธ๋ฒ•)

        ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์—†๋Š” ์ €์žฅ ํ”„๋กœ์‹œ์ € ํ˜ธ์ถœ

        {call procedure_name}



        IN ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ”„๋กœ์‹œ์ € ํ˜ธ์ถœ

        {call pocedure_name[(?,?, ...)]}



        OUT ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ”„๋กœ์‹œ์ € ํ˜ธ์ถœ/ ๋ฐ˜ํ™˜์ž๋ฃŒํ˜•์ด ์กด์žฌํ•˜๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ

        {? = call pocedure_name[(?,?, ...)]}

     


    4. CallableStatement ๊ฐ์ฒด ์ƒ์„ฑ

        CallableStatement ๊ฐ์ฒด๋Š” Connection ์˜ prepareCall() ๋ฉ”์†Œ๋“œ์— ์˜ํ•ด ์ƒ์„ฑ๋œ๋‹ค.
        ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‘ ๊ฐœ์˜ ์ธ์ž๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ ๊ฒฐ๊ณผ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์—†๋Š” ์ €์žฅ ํ”„๋กœ์‹œ์ € prcDatat๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

        CallableStatement cstmt = conn.prepareCall("{call prcDatat(?,?)}");


        โ€ป ๋ฌผ์Œํ‘œ(<?>)์˜ ์œ„์น˜๊ฐ€ IN, OUT, INOUT ๋งค๊ฐœ๋ณ€์ˆ˜ ์ค‘
        ์–ด๋–ค ๊ฒƒ์ธ๊ฐ€ ํ•˜๋Š” ๊ฒƒ์€ ์ €์žฅ ํ”„๋กœ์‹œ์ € prcData์— ์˜์กดํ•œ๋‹ค.

    5. IN, OUT ๋งค๊ฐœ๋ณ€์ˆ˜

        CallableStatement ๊ฐ์ฒด๋กœ IN ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค๋ฉด ๊ฐ OUT ๋งค๊ฐœ๋ณ€์ˆ˜์˜ SQL ํ˜•(Type)์€ CallableStatement ๊ฐ์ฒด๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ๊ฐ€ ๋˜๊ธฐ ์ „์— ๋“ฑ๋ก๋˜์–ด์ ธ์•ผ ํ•œ๋‹ค.
        
        ๋งŒ์•ฝ, ์ €์žฅ ํ”„๋กœ์‹œ์ €๊ฐ€ OUT ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค๋ฉด ๊ฐ OUT ๋งค๊ฐœ๋ณ€์ˆ˜์˜ SQL ํ˜•(Type)์€ CallableStatement ๊ฐ์ฒด๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ๊ฐ€ ๋˜๊ธฐ ์ „์— ๋“ฑ๋ก๋˜์–ด์ ธ์•ผ ํ•œ๋‹ค. ์ด๋Š” ๋ช‡ ๋ช‡ DBMS ๋“ค์ด SQL ํ˜•(Type)์„ ํ•„์š”๋กœ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋ฉฐ,  ์ด ๋•Œ, SQL ํ˜•(Type)์„ ๋“ฑ๋กํ•˜๋Š” ๊ฒƒ์€ registerOutParament() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  , SQL ๊ตฌ๋ฌธ์ด ์‹คํ–‰๋˜์–ด์ง„ ๋‹ค์Œ์— CallableStatement ์˜ getXxx() ๋ฉ”์†Œ๋“œ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ๊ฒ€์ƒ‰ํ•˜๋ฉฐ, ์‚ฌ์šฉ๋˜๋Š” ์ •ํ™•ํ•œ getXxx() ๋ฉ”์†Œ๋“œ๋Š” ๊ทธ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์œ„ํ•ด ๋“ฑ๋ก๋˜์–ด์ง„ SQL ์— ์ƒ์‘ํ•˜๋Š” ์ž๋ฐ” ํ˜•(Type)์ด๋‹ค. ์ฆ‰, registerOutParament() ๋ฉ”์†Œ๋“œ๋Š” SQL ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๊ณ ,  getXxx() ๋ฉ”์†Œ๋“œ๋Š” ์ด๊ฒƒ์„ ์ž๋ฐ” ํƒ€์ž…์œผ๋กœ ์บ์ŠคํŠธ(cast)ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.