<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head profile="http://internetalchemy.org/2003/02/profile"> <link rel="foaf" type="application/rdf+xml" title="FOAF" href="http://www.openlinksw.com/dataspace/uda/about.rdf" /> <link rel="schema.dc" href="http://purl.org/dc/elements/1.1/" /> <meta name="dc.title" content="9. SQL Procedure Language Guide" /> <meta name="dc.subject" content="9. SQL Procedure Language Guide" /> <meta name="dc.creator" content="OpenLink Software Documentation Team ; " /> <meta name="dc.copyright" content="OpenLink Software, 1999 - 2009" /> <link rel="top" href="index.html" title="OpenLink Virtuoso Universal Server: Documentation" /> <link rel="search" href="/doc/adv_search.vspx" title="Search OpenLink Virtuoso Universal Server: Documentation" /> <link rel="parent" href="sqlprocedures.html" title="Chapter Contents" /> <link rel="prev" href="createassembly.html" title="CREATE ASSEMBLY Syntax - External Libraries" /> <link rel="next" href="ASYNCEXECMULTITHREAD.html" title="Asynchronous Execution and Multithreading in Virtuoso/PL" /> <link rel="shortcut icon" href="../images/misc/favicon.ico" type="image/x-icon" /> <link rel="stylesheet" type="text/css" href="doc.css" /> <link rel="stylesheet" type="text/css" href="/doc/translation.css" /> <title>9. SQL Procedure Language Guide</title> <meta http-equiv="Content-Type" content="text/xhtml; charset=UTF-8" /> <meta name="author" content="OpenLink Software Documentation Team ; " /> <meta name="copyright" content="OpenLink Software, 1999 - 2009" /> <meta name="keywords" content="" /> <meta name="GENERATOR" content="OpenLink XSLT Team" /> </head> <body> <div id="header"> <a name="createexthostproc" /> <img src="../images/misc/logo.jpg" alt="" /> <h1>9. SQL Procedure Language Guide</h1> </div> <div id="navbartop"> <div> <a class="link" href="sqlprocedures.html">Chapter Contents</a> | <a class="link" href="createassembly.html" title="CREATE ASSEMBLY Syntax - External Libraries">Prev</a> | <a class="link" href="ASYNCEXECMULTITHREAD.html" title="Asynchronous Execution and Multithreading in Virtuoso/PL">Next</a> </div> </div> <div id="currenttoc"> <form method="post" action="/doc/adv_search.vspx"> <div class="search">Keyword Search: <br /> <input type="text" name="q" /> <input type="submit" name="go" value="Go" /> </div> </form> <div> <a href="http://www.openlinksw.com/">www.openlinksw.com</a> </div> <div> <a href="http://docs.openlinksw.com/">docs.openlinksw.com</a> </div> <br /> <div> <a href="index.html">Book Home</a> </div> <br /> <div> <a href="contents.html">Contents</a> </div> <div> <a href="preface.html">Preface</a> </div> <br /> <div class="selected"> <a href="sqlprocedures.html">SQL Procedure Language Guide</a> </div> <br /> <div> <a href="GENERALPRINCIPLES.html">General Principles</a> </div> <div> <a href="SCOPEOFDECLARATION.html">Scope of Declarations</a> </div> <div> <a href="sqlplDATATYPES.html">Data Types</a> </div> <div> <a href="RESULTSETS.html">Handling Result Sets</a> </div> <div> <a href="ARRAYS.html">Result Sets and Array Parameters</a> </div> <div> <a href="EXCEPTIONS.html">Exception Semantics</a> </div> <div> <a href="PLREF.html">Virtuoso/PL Syntax</a> </div> <div> <a href="EXECSQLPROCSELECT.html">Execute Stored Procedures via SELECT statement</a> </div> <div> <a href="EXECSQLPROCFORK.html">Execute Stored Procedures In Background</a> </div> <div> <a href="createassembly.html">CREATE ASSEMBLY Syntax - External Libraries</a> </div> <div class="selected"> <a href="createexthostproc.html">CREATE PROCEDURE Syntax - External hosted procedures</a> </div> <div> <a href="ASYNCEXECMULTITHREAD.html">Asynchronous Execution and Multithreading in Virtuoso/PL</a> </div> <div> <a href="PERFTIPS.html">Performance Tips</a> </div> <div> <a href="PROCEDURES_TRANSACTIONS.html">Procedures and Transactions</a> </div> <div> <a href="twopcimplementation.html">Distributed Transaction & Two Phase Commit</a> </div> <div> <a href="TRIGGERS.html">Triggers</a> </div> <div> <a href="charescaping.html">Character Escaping</a> </div> <div> <a href="PLSCROLLCRSRS.html">Virtuoso/PL Scrollable Cursors</a> </div> <div> <a href="plmodules.html">Virtuoso PL Modules</a> </div> <div> <a href="handlingplcondit.html">Handling Conditions In Virtuoso/PL Procedures</a> </div> <div> <a href="pldebugger.html">Procedure Language Debugger</a> </div> <div> <a href="rowlevelsecurity.html">Row Level Security</a> </div> <br /> </div> <div id="text"> <a name="createexthostproc" /> <h2>9.11. CREATE PROCEDURE Syntax - External hosted procedures</h2> <p>Virtuoso provides a syntax shortcut for calling static method from hosted user defined types without first defining a Virtuoso external hosted user defined type:</p> <div> <pre class="programlisting"> 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></pre> </div> <p>This compiles into an functional equivalent of :</p> <div> <pre class="programlisting"> 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; } </pre> </div> <p>For more details see <a href="udt.html#udtcreatetypestmt">CREATE TYPE</a> and <a href="runtimehosting.html">Runtime hosting</a> chapters.</p> <a name="ex_createexthostproc_jvm" /> <div class="example"> <div class="exampletitle">CREATE PROCEDURE for a Java method:</div> <p>Here is an example for CREATE PROCEDURE and the hosted Java VM:</p> <div> <pre class="programlisting"> create procedure get_property (in x varchar) returns varchar language java external name 'java.lang.System.getProperty';</pre> </div> <p>Here's how that procedure is called:</p> <div> <pre class="programlisting"> SQL> select get_property ('java.vm.name'); callret VARCHAR _______________________________________________________________________________ Java HotSpot(TM) Client VM </pre> </div> </div> <a name="ex_createexthostproc_clr" /> <div class="example"> <div class="exampletitle">CREATE PROCEDURE for a CLR method:</div> <p>Here is an example for CREATE PROCEDURE and the hosted CLR:</p> <div> <pre class="programlisting"> create procedure curr_thr_id () returns integer language CLR external name 'mscorlib/System.AppDomain.GetCurrentThreadId';</pre> </div> <p>Here's how that procedure is called:</p> <div> <pre class="programlisting"> SQL> select curr_thr_id(); callret INTEGER _______________________________________________________________________________ 2156 </pre> </div> </div> <table border="0" width="90%" id="navbarbottom"> <tr> <td align="left" width="33%"> <a href="createassembly.html" title="CREATE ASSEMBLY Syntax - External Libraries">Previous</a> <br />CREATE ASSEMBLY Syntax - External Libraries</td> <td align="center" width="34%"> <a href="sqlprocedures.html">Chapter Contents</a> </td> <td align="right" width="33%"> <a href="ASYNCEXECMULTITHREAD.html" title="Asynchronous Execution and Multithreading in Virtuoso/PL">Next</a> <br />Asynchronous Execution and Multithreading in Virtuoso/PL</td> </tr> </table> </div> <div id="footer"> <div>Copyright© 1999 - 2009 OpenLink Software All rights reserved.</div> <div id="validation"> <a href="http://validator.w3.org/check/referer"> <img src="http://www.w3.org/Icons/valid-xhtml10" alt="Valid XHTML 1.0!" height="31" width="88" /> </a> <a href="http://jigsaw.w3.org/css-validator/"> <img src="http://jigsaw.w3.org/css-validator/images/vcss" alt="Valid CSS!" height="31" width="88" /> </a> </div> </div> </body> </html>