:meta-keywords: call statement :meta-description: The CALL statement invokes a stored procedure **** CALL **** **CALL** ë¬¸ì€ ë°ì´í„° ë² ì´ìŠ¤ì— ì •ì˜ëœ 메서드 ë˜ëŠ” ì €ìž¥ 함수/í”„ë¡œì‹œì €ì™€ ê°™ì€ ì €ìž¥ ë£¨í‹´ì„ í˜¸ì¶œí•˜ê¸° 위해 사용한다. CUBRIDì—서 ì§€ì›í•˜ëŠ” ì €ìž¥ ë£¨í‹´ì€ ë‹¤ìŒê³¼ 같다. * :ref:`create-procedure` êµ¬ë¬¸ì„ í†µí•´ 등ë¡í•œ ì €ìž¥ í”„ë¡œì‹œì € * :ref:`create-function` êµ¬ë¬¸ì„ í†µí•´ 등ë¡í•œ ì €ìž¥ 함수 * C로 작성한 :doc:`/sql/method` :: CALL <routine_clause> ; <routine_clause> ::= routine_name ([<arg_value> [{, <arg_value> } ...]]) [<method_call_target>] [<to_variable>] <arg_value> literal | :host_variable | any CSQL expression <method_call_target> ::= ON [CLASS] object-valued-expression <to_variable> ::= INTO :host_variable | TO :host_variable * *routine_name*: í˜¸ì¶œí• ë©”ì„œë“œ ë˜ëŠ” ì €ìž¥ 함수/í”„ë¡œì‹œì €ì˜ ì´ë¦„ì„ ì§€ì •í•œë‹¤. 대소문ìžë¥¼ 구분하지 않는다. * <*arg_value*>: í˜¸ì¶œí• ì €ìž¥ ë£¨í‹´ì˜ ì¸ìˆ˜ë¥¼ ì§€ì •í•œë‹¤. 리터럴 ê°’, 호스트 변수와 표현ì‹ì„ ì§€ì •í• ìˆ˜ 있다. * <*method_call_target*>: C로 작성한 메서드를 ì‚¬ìš©í• ë•Œë§Œ ì§€ì •í•œë‹¤. í´ëž˜ìФ ì´ë¦„, 변수, í˜¹ì€ ë˜ ë‹¤ë¥¸ 메서드 호출(ê°ì²´ë¥¼ 반환하는)ì„ í¬í•¨í•˜ëŠ” ê°ì²´ ê°’ì˜ í‘œí˜„ì‹(object-valued-expression)ì„ ì§€ì •í•œë‹¤. 만약 í´ëž˜ìФ ê°ì²´ì—서 ë™ìž‘하는 í´ëž˜ìФ 메서드를 í˜¸ì¶œí•˜ë ¤ë©´, <*call_target*> ì•žì— ë°˜ë“œì‹œ **CLASS** 키워드가 있어야 한다. ì´ ê²½ìš° í´ëž˜ìФ ì´ë¦„ì€ í´ëž˜ìФ 메서드가 ì •ì˜ëœ í´ëž˜ìŠ¤ì˜ ì´ë¦„ì´ì–´ì•¼ 한다. 만약 ì¸ìŠ¤í„´ìŠ¤ 메서드를 í˜¸ì¶œí•˜ë ¤ë©´, ì¸ìŠ¤í„´ìŠ¤ ê°ì²´ë¥¼ 나타내는 ì‹ì„ ì§€ì •í•´ì•¼ 한다. * <*to_variable*>: ì €ìž¥ ë£¨í‹´ì´ ë°˜í™˜í•˜ëŠ” ê°’ì„ í˜¸ìŠ¤íŠ¸ ë³€ìˆ˜ì— ì €ìž¥í• ìˆ˜ 있다. **CALL** 문ì—서 ì§€ì •í•œ ì´ë¦„ì— ëŒ€í•˜ì—¬ CUBRIDì— ë“±ë¡ëœ ì €ìž¥ ë£¨í‹´ì„ ë‹¤ìŒê³¼ ê°™ì´ ê²€ìƒ‰í•œë‹¤. 1. **CALL** ë¬¸ì— ëŒ€ìƒ í´ëž˜ìŠ¤ê°€ 있는 경우 메서드로 처리한다. 2. **CALL** ë¬¸ì— ëŒ€ìƒ í´ëž˜ìŠ¤ê°€ 없는 경우 ë¨¼ì € Java ì €ìž¥ 함수/í”„ë¡œì‹œì € 수행 여부를 ê²€ì‚¬í•˜ê³ ê°™ì€ ì´ë¦„ì´ ì¡´ìž¬í•˜ë©´ 수행한다. 3. 2ì—서 Java ì €ìž¥ 함수/í”„ë¡œì‹œì €ê°€ 존재하지 않으면 메서드 수행 여부를 검사하여 ê°™ì€ ì´ë¦„ì´ ì¡´ìž¬í•˜ë©´ 수행한다. .. code-block:: sql CALL Hello() INTO :HELLO; CALL Sp_int(3) INTO :i; CALL phone_info('Tom','016-111-1111'); 만약 존재하지 않는 메소드 ë˜ëŠ” ì €ìž¥ 함수/í”„ë¡œì‹œì €ë¥¼ 호출하는 경우ì—는 다ìŒê³¼ ê°™ì€ ì—러가 나타난다. * **CALL** ë¬¸ì— ì¸ìžê°€ 없는 경우는 메서드와 구분ë˜ë¯€ë¡œ "ERROR: Stored procedure/function 'deposit' does not exist."ë¼ëŠ” 오류 메시지가 나타난다. * **CALL** ë¬¸ì— ì¸ìžê°€ 있는 경우ì—는 메서드와 êµ¬ë¶„í• ìˆ˜ 없기 ë•Œë¬¸ì— "ERROR: Methods require an object as their target."ì´ë¼ëŠ” 메시지가 나타난다. .. code-block:: sql // CALL ë¬¸ì— ì¸ìžê°€ 없는 경우 CALL deposit(); :: ERROR: Stored procedure/function 'deposit' does not exist. .. code-block:: sql // CALL ë¬¸ì— ì¸ìžê°€ 있는 경우 CALL deposit('Tom', 3000000); :: ERROR: Methods require an object as their target. ê·¸ë¦¬ê³ , 아래와 ê°™ì´ ì €ìž¥ 함수/í”„ë¡œì‹œì €ë¥¼ 호출하는 **CALL** 문 ì•ˆì— **CALL** ë¬¸ì´ ì¤‘ì²©ë˜ëŠ” 경우와 **CALL** ë¬¸ì„ ì‚¬ìš©í•˜ì—¬ ì €ìž¥ 함수/í”„ë¡œì‹œì € 호출 시 ì¸ìžë¡œ 서브 질ì˜ë¥¼ ì‚¬ìš©í• ê²½ìš° **CALL** ë¬¸ì€ ìˆ˜í–‰ì´ ë˜ì§€ 않는다. .. code-block:: sql CALL phone_info('Tom', CALL sp_int(999)); CALL phone_info((SELECT * FROM Phone WHERE id='Tom'));