등록된 Java 저장 함수/프로시저는 CALL 문을 사용하거나, SQL 문에서 호출하거나, Java 응용프로그램에서 호출될 수 있다.
다음과 같이 CALL 문을 사용하여 호출할 수 있다. CALL 문에서 호출되는 Java 저장 함수/프로시저의 이름은 대소문자를 구분하지 않는다.
CALL {procedure_name ([param[, param]…]) | function_name ([param[, param]…]) INTO :host_variable
param {literal | :host_variable}
call Hello() into :HELLO;
call Sp_int(3) into :i;
call phone_info('Tom','016-111-1111');
CUBRID에서는 Java 저장 함수/프로시저를 같은 CALL 문을 이용해 호출한다. 따라서 다음과 같이 CALL 문을 처리하게 된다.
만약 존재하지 않는 Java 저장 함수/프로시저를 호출하는 경우에는 다음과 같은 에러가 나타난다.
csql> call deposit()
csql> ;xrun
In the command from line 1,
ERROR: Stored procedure/function 'deposit' is not exist.
0 command(s) successfully processed.
csql> call deposit('Tom', 3000000)
csql> ;xrun
In line 1, column 6,
ERROR: Methods require an object as their target.
0 command(s) successfully processed.
CALL 문에 인자가 없는 경우는 메소드와 구분되므로 "ERROR: Stored procedure/function 'deposit' is not exist."라는 오류 메시지가 나타난다. 하지만, CALL 문에 인자가 있는 경우에는 메소드와 구분할 수 없기 때문에 "ERROR: Methods require an object as their target."이라는 메시지가 나타난다.
그리고, 아래와 같이 Java 저장 함수/프로시저를 호출하는 CALL 문 안에 CALL 문이 중첩되는 경우와 CALL 문을 사용하여 Java 저장 함수/프로시저 호출 시 인자로 서브 질의를 사용할 경우 CALL 문은 수행이 되지 않는다.
call phone_info('Tom', call sp_int(999));
call phone_info((select * from Phone where id='Tom'));
Java 저장 함수/프로시저를 호출하여 수행 중 exception이 발생하면 dbname_java.log 파일에 exception 내용이 기록되어 저장된다. 만약 화면으로 exception 내용을 확인하고자 할 경우는 $CUBRID/java/logging.properties 파일의 handlers 값을 " java.lang.logging.ConsoleHandler" 로 수정하면 화면으로 exception 내용을 출력한다.