: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_name ([ [{, } ...]]) [] [] literal | :host_variable | any CSQL expression ::= ON [CLASS] object-valued-expression ::= 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'));