11.11. CREATE PROCEDURE Syntax - External hosted procedures
Virtuoso provides a syntax shortcut for calling static method from hosted user defined types without first defining a Virtuoso external hosted user defined type:
CREATE (PROCEDURE|FUNCTION) <local_name> ([<arg_def1>, ...]) [returns <sql_datatype>] LANGUAGE [JAVA|CLR] EXTERNAL NAME '<external_static_proc_name_literal>' <arg_def> := [IN|OUT|INOUT] param_name <data_type_spec> <external_static_proc_name_literal> = <external_type_name_literal>.<static_proc_name>
This compiles into an functional equivalent of :
create procedure <local_name) ([<arg_def1>, ....]) { declare ret any; exec (' create type <local_name> temporary self as ref static method m1 ([<arg_def1>, ....]) returns <datatype> EXTERNAL NAME ''<static_proc_name>'' '); ret := <local_name>::m1 (....); exec ('drop type <local_name>'); return ret; }
For more details see CREATE TYPE and Runtime hosting chapters.
Example 11.6. CREATE PROCEDURE for a Java method:
Here is an example for CREATE PROCEDURE and the hosted Java VM:
create procedure get_property (in x varchar) returns varchar language java external name 'java.lang.System.getProperty';
Here's how that procedure is called:
SQL> select get_property ('java.vm.name'); callret VARCHAR _______________________________________________________________________________ Java HotSpot(TM) Client VM
Example 11.7. CREATE PROCEDURE for a CLR method:
Here is an example for CREATE PROCEDURE and the hosted CLR:
create procedure curr_thr_id () returns integer language CLR external name 'mscorlib/System.AppDomain.GetCurrentThreadId';
Here's how that procedure is called:
SQL> select curr_thr_id(); callret INTEGER _______________________________________________________________________________ 2156