CALL 문

설명

CUBRID CALL 문은 데이터베이스에 정의된 메소드를 호출하기 위해 사용된다. 클래스 메소드, 인스턴스 메소드 모두 CALL 문으로 호출이 가능하다.

구문

CALL method_call [ ; ]
method_call :
method_name ( [ arg_value [ {, arg_value }_ ] ] ) ON call_target [ to_variable ]
method_name ( call_target [, arg_value [ {, arg_value }_ ] ] ) [ to_variable ]
arg_value :
any CSQL expression
call_target :
an object-valued expression
to_variable :
INTO variable
TO variable

method_name은 클래스에 정의된 메소드의 이름이거나, 큐브리드와 함께 제공되는 시스템 정의 메소드의 이름이다. 메소드는 하나 혹은 그 이상의 인수 값을 필요로 한다. 메소드에 인수가 없으면 빈 괄호를 사용해야 한다.

call_target은 클래스 이름, 변수, 또 다른 메소드 호출(객체를 반환하는)을 포함하는 객체 값을 나타내는 식(object-valued expression)을 사용할 수 있다. 만약 클래스 객체에서 동작하는 클래스 메소드를 호출하려면, call_target 앞에 반드시 CLASS 키워드가 있어야 한다. 이러한 경우에 클래스 이름은 클래스 메소드가 정의된 클래스의 이름이어야 한다. 만약 인스턴스 메소드를 호출하려면, 인스턴스 객체를 나타내는 식을 지정해야 한다. 클래스 메소드나 인스턴스 메소드에 의해 반환되는 값은 선택적으로 to_variable에 저장할 수 있다. 이 반환 변수의 값은 call_target이나 arg_value 파라미터처럼 CALL 문 내에 사용될 수 있다.

중첩된 메소드 호출은 다른 method_call이 메소드의 call_target이거나 arg_value 인수의 하나로 주어질 때 성립된다.

예제

다음 예제는 시스템 클래스인 db_user에 등록된 메소드인 find_user로서 입력한 데이터베이스 사용자의 존재여부를 판단하기 위해 호출하는 CALL 문의 수행을 보여준다. 첫 번째 문장은 db_user 클래스에 정의된 클래스 메소드를 호출한다. 찾고자 하는 대상 사용자가 데이터베이스에 등록되어 있을 경우 x에는 해당 클래스 이름(여기에서는 db_user)이 저장되고, 없을 경우엔 NULL이 저장된다.

두 번째 문장은 변수 x에 저장된 값을 출력하는 방법이다. 이 질의문에서 DB_ROOT는 시스템 클래스로서, 하나의 인스턴스만이 존재하여 sys_date나 등록된 변수의 값을 출력하는 데 사용할 수 있다. 이러한 용도로 쓰일 경우 DB_ROOT는 인스턴스가 하나인 다른 테이블로 대체할 수 있다.

call find_user('dba') on class db_user to x;
;xrun
=== <Result of CALL Command in Line 1> ===
Result
======================
db_user
 
select x from db_root;
;xrun
 
=== <Result of SELECT Command in Line 1> ===
x
======================
db_user

find_user를 이용하면 결과값이 NULL인지 아닌지에 따라 해당 사용자가 데이터베이스에 존재하는지 여부를 판단할 수 있다.