📄 group__g__ora__ret.html
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"><title>OCILIB (C Driver for Oracle): Oracle Returning feature</title><link href="doxygen.css" rel="stylesheet" type="text/css"><link href="tabs.css" rel="stylesheet" type="text/css"></head><body><!-- Generated by Doxygen 1.5.4 --><div class="tabs"> <ul> <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="modules.html"><span>Modules</span></a></li> <li><a href="annotated.html"><span>Data Structures</span></a></li> <li><a href="files.html"><span>Files</span></a></li> </ul></div><h1>Oracle Returning feature</h1><hr><a name="_details"></a><h2>Detailed Description</h2>OCILIB supports the Oracle feature "Returning into" for DML statements.<p>Let's Oracle talk about this features:<p><dl class="user" compact><dt><b></b></dt><dd>"Using the RETURNING clause with a DML statement allows you to essentially combine two SQL statements into one, possibly saving you a server round-trip. This is accomplished by adding an extra clause to the traditional UPDATE, INSERT, and DELETE statements. The extra clause effectively adds a query to the DML statement. In the OCI, the values are returned to the application through the use of OUT bind variables."</dd></dl>OCILIB implements this features by providing a set of functions that allows to register output placeholders for the returned values. Once the DML is executed with <a class="el" href="group__g__exec.html#g7189aa353845909aaedc8d5956429450" title="Execute a prepared SQL statement or PL/SQL block.">OCI_Execute()</a>, the output returned data is available through a regular resultset object that can be fetched.<p><dl class="note" compact><dt><b>Note:</b></dt><dd>Array binding interface is also supported with "returning into" DML statement. Every iteration (or row of given arrays) generates an resultset object. Once a resultset is fetched, the next on can be retrieved with <a class="el" href="group__g__ora__ret.html#g67cbb956e8d721c8397e3f897a57b224" title="Retrieve the next resultset from an executed DML statement using a "SQL returning"...">OCI_GetNextResultset()</a></dd></dl><dl class="user" compact><dt><b></b></dt><dd></dd></dl><dl class="note" compact><dt><b>Note:</b></dt><dd><a class="el" href="struct_o_c_i___long.html" title="Oracle Long datatype.">OCI_Long</a> are not supported for "returning into" clause .This is a limitation imposed by Oracle.</dd></dl><dl class="user" compact><dt><b></b></dt><dd></dd></dl><dl class="note" compact><dt><b>Note:</b></dt><dd><a class="el" href="struct_o_c_i___column.html" title="Oracle SQL Column and Type member representation.">OCI_Column</a> objects retrieved from output <a class="el" href="struct_o_c_i___resultset.html" title="Collection of output columns from a select statement.">OCI_Resultset</a> have the following particularities:</dd></dl><ul><li>their names are the provided bind names to the DML statement (by example, ":out1"). So any call to the functions OCI_GetXXX2() should be aware of it</li><li>The columns detailed SQL attributes might be not all set or accurate. By example, the scale and precision are not set, the SQL type is the one chosen by OCILIB regarding the OCILIB object datatype and might be slightly different from the real one.</li></ul><p><dl class="user" compact><dt><b>Example</b></dt><dd><div class="fragment"><pre class="fragment"><span class="preprocessor">#include "ocilib.h"</span><span class="keywordtype">int</span> main(<span class="keywordtype">void</span>){ <a class="code" href="struct_o_c_i___connection.html" title="Oracle physical connection.">OCI_Connection</a> *cn; <a class="code" href="struct_o_c_i___statement.html" title="Oracle SQL or PL/SQL statement.">OCI_Statement</a> *st; <a class="code" href="struct_o_c_i___resultset.html" title="Collection of output columns from a select statement.">OCI_Resultset</a> *rs; <span class="keywordflow">if</span> (!<a class="code" href="group__g__init.html#gcdb642d75f7c8478e083634144bc813c" title="Initializes the library.">OCI_Initialize</a>(NULL, NULL, OCI_ENV_DEFAULT)) <span class="keywordflow">return</span> EXIT_FAILURE; cn = <a class="code" href="group__g__connect.html#gdb6e2cdf759587dd81c2fda7c5f44338" title="Create a physical connection to an Oracle database server.">OCI_ConnectionCreate</a>(<span class="stringliteral">"db"</span>, <span class="stringliteral">"usr"</span>, <span class="stringliteral">"pwd"</span>, OCI_SESSION_DEFAULT); st = <a class="code" href="group__g__exec.html#g335822f983af0fb5c529431f06a9a17b" title="Create a statement object and return its handle.">OCI_StatementCreate</a>(cn); <a class="code" href="group__g__exec.html#gd5a7fcffe7d24da001e44636cfc06578" title="Prepare a SQL statement or PL/SQL block.">OCI_Prepare</a>(st, <span class="stringliteral">"update products set code = code+10 returning code into :i"</span>); <a class="code" href="group__g__ora__ret.html#g85af8fc84e655f867653ec7eb8de770e" title="Register an integer output bind placeholder.">OCI_RegisterInt</a>(st, <span class="stringliteral">":i"</span>); <a class="code" href="group__g__exec.html#g7189aa353845909aaedc8d5956429450" title="Execute a prepared SQL statement or PL/SQL block.">OCI_Execute</a>(st); rs = <a class="code" href="group__g__fetch.html#gf2a9e28b66a9538ba0ffb62bffb87c16" title="Retrieve the resultset handle from an executed statement.">OCI_GetResultset</a>(st); <span class="keywordflow">while</span> (<a class="code" href="group__g__fetch.html#g36ac26dcea78f6074421781e401f97ba" title="Fetch the next row of the resultset.">OCI_FetchNext</a>(rs)) printf(<span class="stringliteral">"%i\n"</span>, <a class="code" href="group__g__fetch.html#ga8d80dc30b2012eaddd13efa9dfb711d" title="Return the current integer value of the column at the given index in the resultset...">OCI_GetInt</a>(rs, 1)); printf(<span class="stringliteral">"count : %i\n"</span>, <a class="code" href="group__g__fetch.html#g93bd9197720088dbda2bef593ad1c07c" title="Retrieve the number of rows fetched so far.">OCI_GetRowCount</a>(rs)); <a class="code" href="group__g__transac.html#gee1ba614ed2dc5bd83bf788ca08f3e71" title="Commit current pending changes.">OCI_Commit</a>(cn); <a class="code" href="group__g__init.html#g639706aa8e9689c7ebffc018fac6d3ae" title="Clean up all resources allocated by the library.">OCI_Cleanup</a>(); <span class="keywordflow">return</span> EXIT_SUCCESS;}</pre></div> </dd></dl><p><table border="0" cellpadding="0" cellspacing="0"><tr><td></td></tr><tr><td colspan="2"><br><h2>Functions</h2></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">OCI_EXPORT <a class="el" href="struct_o_c_i___resultset.html">OCI_Resultset</a> *OCI_API </td><td class="memItemRight" valign="bottom"><a class="el" href="group__g__ora__ret.html#g67cbb956e8d721c8397e3f897a57b224">OCI_GetNextResultset</a> (<a class="el" href="struct_o_c_i___statement.html">OCI_Statement</a> *stmt)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Retrieve the next resultset from an executed DML statement using a "SQL returning" clause. <a href="#g67cbb956e8d721c8397e3f897a57b224"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">OCI_EXPORT boolean OCI_API </td><td class="memItemRight" valign="bottom"><a class="el" href="group__g__ora__ret.html#ge71203b063524c86e3a359cac74cbec4">OCI_RegisterShort</a> (<a class="el" href="struct_o_c_i___statement.html">OCI_Statement</a> *stmt, const mtext *name)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Register a short output bind placeholder. <a href="#ge71203b063524c86e3a359cac74cbec4"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">OCI_EXPORT boolean OCI_API </td><td class="memItemRight" valign="bottom"><a class="el" href="group__g__ora__ret.html#g93c01ee07b5960ea8f022cea9e9f89c5">OCI_RegisterUnsignedShort</a> (<a class="el" href="struct_o_c_i___statement.html">OCI_Statement</a> *stmt, const mtext *name)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Register an unsigned short output bind placeholder. <a href="#g93c01ee07b5960ea8f022cea9e9f89c5"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">OCI_EXPORT boolean OCI_API </td><td class="memItemRight" valign="bottom"><a class="el" href="group__g__ora__ret.html#g85af8fc84e655f867653ec7eb8de770e">OCI_RegisterInt</a> (<a class="el" href="struct_o_c_i___statement.html">OCI_Statement</a> *stmt, const mtext *name)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Register an integer output bind placeholder. <a href="#g85af8fc84e655f867653ec7eb8de770e"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">OCI_EXPORT boolean OCI_API </td><td class="memItemRight" valign="bottom"><a class="el" href="group__g__ora__ret.html#g06c65bd343bdd68860be0ea52f6b0762">OCI_RegisterUnsignedInt</a> (<a class="el" href="struct_o_c_i___statement.html">OCI_Statement</a> *stmt, const mtext *name)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Register an unsigned integer output bind placeholder. <a href="#g06c65bd343bdd68860be0ea52f6b0762"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">OCI_EXPORT boolean OCI_API </td><td class="memItemRight" valign="bottom"><a class="el" href="group__g__ora__ret.html#g388cf8174d0c7d6e8cbba573dfe3a73b">OCI_RegisterBigInt</a> (<a class="el" href="struct_o_c_i___statement.html">OCI_Statement</a> *stmt, const mtext *name)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Register a big integer output bind placeholder. <a href="#g388cf8174d0c7d6e8cbba573dfe3a73b"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">OCI_EXPORT boolean OCI_API </td><td class="memItemRight" valign="bottom"><a class="el" href="group__g__ora__ret.html#gf4c5515f39b2f29dea9b007bd623006f">OCI_RegisterUnsignedBigInt</a> (<a class="el" href="struct_o_c_i___statement.html">OCI_Statement</a> *stmt, const mtext *name)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Register an unsigned big integer output bind placeholder. <a href="#gf4c5515f39b2f29dea9b007bd623006f"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">OCI_EXPORT boolean OCI_API </td><td class="memItemRight" valign="bottom"><a class="el" href="group__g__ora__ret.html#gc2223b3c43382439afbb09cf70290ecc">OCI_RegisterString</a> (<a class="el" href="struct_o_c_i___statement.html">OCI_Statement</a> *stmt, const mtext *name, unsigned int len)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Register a string output bind placeholder. <a href="#gc2223b3c43382439afbb09cf70290ecc"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">OCI_EXPORT boolean OCI_API </td><td class="memItemRight" valign="bottom"><a class="el" href="group__g__ora__ret.html#g3837000b63ad2e8e11e45cd6fdb15ad7">OCI_RegisterRaw</a> (<a class="el" href="struct_o_c_i___statement.html">OCI_Statement</a> *stmt, const mtext *name, unsigned int len)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Register an raw output bind placeholder. <a href="#g3837000b63ad2e8e11e45cd6fdb15ad7"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">OCI_EXPORT boolean OCI_API </td><td class="memItemRight" valign="bottom"><a class="el" href="group__g__ora__ret.html#g2e1496d575f30dfdcabb2310240c1b8a">OCI_RegisterDouble</a> (<a class="el" href="struct_o_c_i___statement.html">OCI_Statement</a> *stmt, const mtext *name)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Register a double output bind placeholder. <a href="#g2e1496d575f30dfdcabb2310240c1b8a"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">OCI_EXPORT boolean OCI_API </td><td class="memItemRight" valign="bottom"><a class="el" href="group__g__ora__ret.html#gdb32a019872260d7ef4c0e25f7d1b796">OCI_RegisterDate</a> (<a class="el" href="struct_o_c_i___statement.html">OCI_Statement</a> *stmt, const mtext *name)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Register a date output bind placeholder. <a href="#gdb32a019872260d7ef4c0e25f7d1b796"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">OCI_EXPORT boolean OCI_API </td><td class="memItemRight" valign="bottom"><a class="el" href="group__g__ora__ret.html#gc96fe360aba8f53afa1b247beb115ff6">OCI_RegisterTimestamp</a> (<a class="el" href="struct_o_c_i___statement.html">OCI_Statement</a> *stmt, const mtext *name, unsigned int type)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Register a timestamp output bind placeholder. <a href="#gc96fe360aba8f53afa1b247beb115ff6"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">OCI_EXPORT boolean OCI_API </td><td class="memItemRight" valign="bottom"><a class="el" href="group__g__ora__ret.html#gb154c4c3cec8eae34a3b77da2d6d3d10">OCI_RegisterInterval</a> (<a class="el" href="struct_o_c_i___statement.html">OCI_Statement</a> *stmt, const mtext *name, unsigned int type)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Register an interval output bind placeholder. <a href="#gb154c4c3cec8eae34a3b77da2d6d3d10"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">OCI_EXPORT boolean OCI_API </td><td class="memItemRight" valign="bottom"><a class="el" href="group__g__ora__ret.html#g71f75749d87d568f51cddcde34dadb56">OCI_RegisterObject</a> (<a class="el" href="struct_o_c_i___statement.html">OCI_Statement</a> *stmt, const mtext *name, <a class="el" href="struct_o_c_i___type_info.html">OCI_TypeInfo</a> *typinf)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Register an object output bind placeholder. <a href="#g71f75749d87d568f51cddcde34dadb56"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">OCI_EXPORT boolean OCI_API </td><td class="memItemRight" valign="bottom"><a class="el" href="group__g__ora__ret.html#gbb64a69d45293b80324657dec0f76735">OCI_RegisterLob</a> (<a class="el" href="struct_o_c_i___statement.html">OCI_Statement</a> *stmt, const mtext *name, unsigned int type)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Register a lob output bind placeholder. <a href="#gbb64a69d45293b80324657dec0f76735"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">OCI_EXPORT boolean OCI_API </td><td class="memItemRight" valign="bottom"><a class="el" href="group__g__ora__ret.html#gaacdce279df2733602d0b87f8ce0e12f">OCI_RegisterFile</a> (<a class="el" href="struct_o_c_i___statement.html">OCI_Statement</a> *stmt, const mtext *name, unsigned int type)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Register a file output bind placeholder. <a href="#gaacdce279df2733602d0b87f8ce0e12f"></a><br></td></tr><tr><td class="memItemLeft" nowrap align="right" valign="top">OCI_EXPORT boolean OCI_API </td><td class="memItemRight" valign="bottom"><a class="el" href="group__g__ora__ret.html#g2c39ce8e8d4695f7e1ec3c6840a09330">OCI_RegisterRef</a> (<a class="el" href="struct_o_c_i___statement.html">OCI_Statement</a> *stmt, const mtext *name, <a class="el" href="struct_o_c_i___type_info.html">OCI_TypeInfo</a> *typinf)</td></tr><tr><td class="mdescLeft"> </td><td class="mdescRight">Register a Ref output bind placeholder. <a href="#g2c39ce8e8d4695f7e1ec3c6840a09330"></a><br></td></tr></table><hr><h2>Function Documentation</h2><a class="anchor" name="g67cbb956e8d721c8397e3f897a57b224"></a><!-- doxytag: member="ocilib.h::OCI_GetNextResultset" ref="g67cbb956e8d721c8397e3f897a57b224" args="(OCI_Statement *stmt)" --><div class="memitem"><div class="memproto"> <table class="memname"> <tr> <td class="memname">OCI_EXPORT <a class="el" href="struct_o_c_i___resultset.html">OCI_Resultset</a>* OCI_API OCI_GetNextResultset </td> <td>(</td> <td class="paramtype"><a class="el" href="struct_o_c_i___statement.html">OCI_Statement</a> * </td> <td class="paramname"> <em>stmt</em> </td> <td> ) </td> <td width="100%"></td> </tr> </table></div><div class="memdoc"><p>Retrieve the next resultset from an executed DML statement using a "SQL returning" clause. <p><dl compact><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>stmt</em> </td><td>- Statement handle</td></tr> </table></dl><dl class="note" compact><dt><b>Note:</b></dt><dd>SQL statements with a "returning" clause can return multiple resultsets. When arrays of program variables are binded to the statement, Oracle will execute the statement for every row (iteration). Each iteration generates a resultset that can be fetched like regular ones.</dd></dl><dl class="return" compact><dt><b>Returns:</b></dt><dd>A resultset handle on success otherwise NULL </dd></dl><p>Definition at line <a class="el" href="resultset_8c-source.html#l00678">678</a> of file <a class="el" href="resultset_8c-source.html">resultset.c</a>.</p><p>References <a class="el" href="ocilib__types_8h-source.html#l00433">OCI_Statement::cur_rs</a>, <a class="el" href="ocilib__types_8h-source.html#l00432">OCI_Statement::nb_rs</a>, and <a class="el" href="ocilib__types_8h-source.html#l00413">OCI_Statement::rsts</a>.</p></div></div><p><a class="anchor" name="g388cf8174d0c7d6e8cbba573dfe3a73b"></a><!-- doxytag: member="ocilib.h::OCI_RegisterBigInt" ref="g388cf8174d0c7d6e8cbba573dfe3a73b" args="(OCI_Statement *stmt, const mtext *name)" --><div class="memitem"><div class="memproto"> <table class="memname"> <tr> <td class="memname">OCI_EXPORT boolean OCI_API OCI_RegisterBigInt </td> <td>(</td> <td class="paramtype"><a class="el" href="struct_o_c_i___statement.html">OCI_Statement</a> * </td> <td class="paramname"> <em>stmt</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const mtext * </td> <td class="paramname"> <em>name</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td width="100%"></td> </tr> </table></div><div class="memdoc"><p>Register a big integer output bind placeholder. <p><dl compact><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>stmt</em> </td><td>- Statement handle </td></tr> <tr><td valign="top"></td><td valign="top"><em>name</em> </td><td>- Output bind name</td></tr> </table></dl><dl class="return" compact><dt><b>Returns:</b></dt><dd>TRUE on success otherwise FALSE </dd></dl><p>Definition at line <a class="el" href="statement_8c-source.html#l02318">2318</a> of file <a class="el" href="statement_8c-source.html">statement.c</a>.</p></div></div><p><a class="anchor" name="gdb32a019872260d7ef4c0e25f7d1b796"></a><!-- doxytag: member="ocilib.h::OCI_RegisterDate" ref="gdb32a019872260d7ef4c0e25f7d1b796" args="(OCI_Statement *stmt, const mtext *name)" --><div class="memitem"><div class="memproto"> <table class="memname"> <tr> <td class="memname">OCI_EXPORT boolean OCI_API OCI_RegisterDate </td> <td>(</td> <td class="paramtype"><a class="el" href="struct_o_c_i___statement.html">OCI_Statement</a> * </td> <td class="paramname"> <em>stmt</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const mtext * </td> <td class="paramname"> <em>name</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td width="100%"></td> </tr> </table></div><div class="memdoc"><p>Register a date output bind placeholder.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -