forked from docs/doc-exports
Reviewed-by: Pruthi, Vineet <vineet.pruthi@t-systems.com> Co-authored-by: Lu, Huayi <luhuayi@huawei.com> Co-committed-by: Lu, Huayi <luhuayi@huawei.com>
124 lines
14 KiB
HTML
124 lines
14 KiB
HTML
<a name="EN-US_TOPIC_0000001233708683"></a><a name="EN-US_TOPIC_0000001233708683"></a>
|
|
|
|
<h1 class="topictitle1">Pseudo-Types</h1>
|
|
<div id="body8662426"><p id="EN-US_TOPIC_0000001233708683__a7aa1d2ab1dc5463abb6a899c1955840f"><span id="EN-US_TOPIC_0000001233708683__text1401858424">GaussDB(DWS)</span> has a number of special-purpose entries that are collectively called pseudo-types. A pseudo-type cannot be used as a column data type, but it can be used to declare a function's argument or result type.</p>
|
|
<p id="EN-US_TOPIC_0000001233708683__aa897ae53aced4f48b83e4d0dbcf97154">Each of the available pseudo-types is useful in situations where a function's behavior does not correspond to simply taking or returning a value of a specific SQL data type. <a href="#EN-US_TOPIC_0000001233708683__t6c556c1e17d64480875dad682fb109b4">Table 1</a> lists all pseudo-types.</p>
|
|
|
|
<div class="tablenoborder"><a name="EN-US_TOPIC_0000001233708683__t6c556c1e17d64480875dad682fb109b4"></a><a name="t6c556c1e17d64480875dad682fb109b4"></a><table cellpadding="4" cellspacing="0" summary="" id="EN-US_TOPIC_0000001233708683__t6c556c1e17d64480875dad682fb109b4" frame="border" border="1" rules="all"><caption><b>Table 1 </b>Pseudo-Types</caption><thead align="left"><tr id="EN-US_TOPIC_0000001233708683__r427e8356718e4c37acb0203448065121"><th align="left" class="cellrowborder" valign="top" width="27%" id="mcps1.3.3.2.3.1.1"><p id="EN-US_TOPIC_0000001233708683__aed94175423ea498bbdcaec0ca11de458">Name</p>
|
|
</th>
|
|
<th align="left" class="cellrowborder" valign="top" width="73%" id="mcps1.3.3.2.3.1.2"><p id="EN-US_TOPIC_0000001233708683__a3472729b422348dab17d8d8d0ea818dc">Description</p>
|
|
</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody><tr id="EN-US_TOPIC_0000001233708683__rfc71eb3593a24be59c513b2e40800ec1"><td class="cellrowborder" valign="top" width="27%" headers="mcps1.3.3.2.3.1.1 "><p id="EN-US_TOPIC_0000001233708683__a6b3aa1a02776481aa726ef1841feb5e7">any</p>
|
|
</td>
|
|
<td class="cellrowborder" valign="top" width="73%" headers="mcps1.3.3.2.3.1.2 "><p id="EN-US_TOPIC_0000001233708683__a061a42d621f24cd5b4dbbc06d6519432">Indicates that a function accepts any input data type.</p>
|
|
</td>
|
|
</tr>
|
|
<tr id="EN-US_TOPIC_0000001233708683__r58824307782244d5af7694c1d5c3fe1d"><td class="cellrowborder" valign="top" width="27%" headers="mcps1.3.3.2.3.1.1 "><p id="EN-US_TOPIC_0000001233708683__a62a31151ffc34f5ca60ad4b6d908f768">anyelement</p>
|
|
</td>
|
|
<td class="cellrowborder" valign="top" width="73%" headers="mcps1.3.3.2.3.1.2 "><p id="EN-US_TOPIC_0000001233708683__a73579d88cece4e2982dcbcf25437a589">Indicates that a function accepts any data type.</p>
|
|
</td>
|
|
</tr>
|
|
<tr id="EN-US_TOPIC_0000001233708683__r706b8ff4b04c44a1824ba469e4322a45"><td class="cellrowborder" valign="top" width="27%" headers="mcps1.3.3.2.3.1.1 "><p id="EN-US_TOPIC_0000001233708683__a0c78bd950a144a98aec962c2d1db3795">anyarray</p>
|
|
</td>
|
|
<td class="cellrowborder" valign="top" width="73%" headers="mcps1.3.3.2.3.1.2 "><p id="EN-US_TOPIC_0000001233708683__aad018015a5a846e5b87208d84be2c0aa">Indicates that a function accepts any array data type.</p>
|
|
</td>
|
|
</tr>
|
|
<tr id="EN-US_TOPIC_0000001233708683__r440fbb883298420fb53cfb15a7a270b4"><td class="cellrowborder" valign="top" width="27%" headers="mcps1.3.3.2.3.1.1 "><p id="EN-US_TOPIC_0000001233708683__a86cc76f763124535991920d4b868f3f1">anynonarray</p>
|
|
</td>
|
|
<td class="cellrowborder" valign="top" width="73%" headers="mcps1.3.3.2.3.1.2 "><p id="EN-US_TOPIC_0000001233708683__afab009bc1fba4a78ac84542aa307429b">Indicates that a function accepts any non-array data type.</p>
|
|
</td>
|
|
</tr>
|
|
<tr id="EN-US_TOPIC_0000001233708683__r0a6345de87994bca911cfb87160d6ac8"><td class="cellrowborder" valign="top" width="27%" headers="mcps1.3.3.2.3.1.1 "><p id="EN-US_TOPIC_0000001233708683__a135dd39886454dab9f9f4bba0ae322cc">anyenum</p>
|
|
</td>
|
|
<td class="cellrowborder" valign="top" width="73%" headers="mcps1.3.3.2.3.1.2 "><p id="EN-US_TOPIC_0000001233708683__abd848dcd0fe042afb03aca6838e91648">Indicates that a function accepts any enum data type.</p>
|
|
</td>
|
|
</tr>
|
|
<tr id="EN-US_TOPIC_0000001233708683__r9c7d2e6646e443da878896ba91b9416f"><td class="cellrowborder" valign="top" width="27%" headers="mcps1.3.3.2.3.1.1 "><p id="EN-US_TOPIC_0000001233708683__ab726d43b2d67482ba120ccf4964eab0b">anyrange</p>
|
|
</td>
|
|
<td class="cellrowborder" valign="top" width="73%" headers="mcps1.3.3.2.3.1.2 "><p id="EN-US_TOPIC_0000001233708683__a8afd44f1955342a09ff48768eb1a6007">Indicates that a function accepts any range data type.</p>
|
|
</td>
|
|
</tr>
|
|
<tr id="EN-US_TOPIC_0000001233708683__rd058bd28153740a8991395f7fad09fe7"><td class="cellrowborder" valign="top" width="27%" headers="mcps1.3.3.2.3.1.1 "><p id="EN-US_TOPIC_0000001233708683__a278afe83dcc344ba9c76820a178f6ae3">cstring</p>
|
|
</td>
|
|
<td class="cellrowborder" valign="top" width="73%" headers="mcps1.3.3.2.3.1.2 "><p id="EN-US_TOPIC_0000001233708683__a7e80846276704dab9ea225fc1c5d04bb">Indicates that a function accepts or returns a null-terminated C string.</p>
|
|
</td>
|
|
</tr>
|
|
<tr id="EN-US_TOPIC_0000001233708683__r740e5d815d524fc898199e32d0b13563"><td class="cellrowborder" valign="top" width="27%" headers="mcps1.3.3.2.3.1.1 "><p id="EN-US_TOPIC_0000001233708683__af49fdddb2d7644b89c20089264388234">internal</p>
|
|
</td>
|
|
<td class="cellrowborder" valign="top" width="73%" headers="mcps1.3.3.2.3.1.2 "><p id="EN-US_TOPIC_0000001233708683__a9d015c617b5448eca31903b92a013ce4">Indicates that a function accepts or returns a server-internal data type.</p>
|
|
</td>
|
|
</tr>
|
|
<tr id="EN-US_TOPIC_0000001233708683__r9044bf19910146d18b228e5eee3f6132"><td class="cellrowborder" valign="top" width="27%" headers="mcps1.3.3.2.3.1.1 "><p id="EN-US_TOPIC_0000001233708683__a82d553bc8a07445397c3031695bda4d1">language_handler</p>
|
|
</td>
|
|
<td class="cellrowborder" valign="top" width="73%" headers="mcps1.3.3.2.3.1.2 "><p id="EN-US_TOPIC_0000001233708683__abf1b194eae6d4ab5a22773c7741acaa5">Indicates that a procedural language call handler is declared to return <strong id="EN-US_TOPIC_0000001233708683__b842352706202826">language_handler</strong>.</p>
|
|
</td>
|
|
</tr>
|
|
<tr id="EN-US_TOPIC_0000001233708683__ra8ac9aaea7c24ac2b7ca7f1f51900686"><td class="cellrowborder" valign="top" width="27%" headers="mcps1.3.3.2.3.1.1 "><p id="EN-US_TOPIC_0000001233708683__a9a3bad71a65b4adb8714c2c22cc10028">fdw_handler</p>
|
|
</td>
|
|
<td class="cellrowborder" valign="top" width="73%" headers="mcps1.3.3.2.3.1.2 "><p id="EN-US_TOPIC_0000001233708683__afb0f961aaf28483ea20a072ad19d7bd3">Indicates that a foreign-data wrapper handler is declared to return <strong id="EN-US_TOPIC_0000001233708683__b84235270620291">fdw_handler</strong>.</p>
|
|
</td>
|
|
</tr>
|
|
<tr id="EN-US_TOPIC_0000001233708683__rb810eab6ad684459b2b400e6ddf62c12"><td class="cellrowborder" valign="top" width="27%" headers="mcps1.3.3.2.3.1.1 "><p id="EN-US_TOPIC_0000001233708683__af752fd1c15934b2a9917e624d9dcaa6f">record</p>
|
|
</td>
|
|
<td class="cellrowborder" valign="top" width="73%" headers="mcps1.3.3.2.3.1.2 "><p id="EN-US_TOPIC_0000001233708683__a9ecd1247217843fb9d30de51221822b2">Identifies a function returning an unspecified row type.</p>
|
|
</td>
|
|
</tr>
|
|
<tr id="EN-US_TOPIC_0000001233708683__r810f7958f73740e0afbf1b2085149b2a"><td class="cellrowborder" valign="top" width="27%" headers="mcps1.3.3.2.3.1.1 "><p id="EN-US_TOPIC_0000001233708683__ad3c820e5909d451ea926cf5a4da61876">trigger</p>
|
|
</td>
|
|
<td class="cellrowborder" valign="top" width="73%" headers="mcps1.3.3.2.3.1.2 "><p id="EN-US_TOPIC_0000001233708683__a31a4e9744480405ea075b8bb6e767aa7">Indicates that a trigger function is declared to return <strong id="EN-US_TOPIC_0000001233708683__b842352706203020">trigger</strong>.</p>
|
|
</td>
|
|
</tr>
|
|
<tr id="EN-US_TOPIC_0000001233708683__r4e1b1bfd0a5648a385ccea159b1cec8f"><td class="cellrowborder" valign="top" width="27%" headers="mcps1.3.3.2.3.1.1 "><p id="EN-US_TOPIC_0000001233708683__a8d9e48a9eb3445cc9f7725edd803be6e">void</p>
|
|
</td>
|
|
<td class="cellrowborder" valign="top" width="73%" headers="mcps1.3.3.2.3.1.2 "><p id="EN-US_TOPIC_0000001233708683__a67eeee31e8394faca7dffb8af6465abc">Indicates that a function returns no value.</p>
|
|
</td>
|
|
</tr>
|
|
<tr id="EN-US_TOPIC_0000001233708683__rc9b190e869fb4c3d82dc427e08f97be1"><td class="cellrowborder" valign="top" width="27%" headers="mcps1.3.3.2.3.1.1 "><p id="EN-US_TOPIC_0000001233708683__a35424583b9f742e9adcc1f8c56593cb8">opaque</p>
|
|
</td>
|
|
<td class="cellrowborder" valign="top" width="73%" headers="mcps1.3.3.2.3.1.2 "><p id="EN-US_TOPIC_0000001233708683__a471ee558d3264f98857ee1974da3ae27">Indicates an obsolete type name that formerly served all the above purposes.</p>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<p id="EN-US_TOPIC_0000001233708683__a8969f2959d07496cb84a7d93e485147f">Functions coded in C (whether built in or dynamically loaded) can be declared to accept or return any of these pseudo data types. It is up to the function author to ensure that the function will behave safely when a pseudo-type is used as an argument type.</p>
|
|
<p id="EN-US_TOPIC_0000001233708683__acbbe74187c1840189e834f6ed24007f3">Functions coded in procedural languages can use pseudo-types only as allowed by their implementation languages. At present the procedural languages all forbid use of a pseudo-type as argument type, and allow only <strong id="EN-US_TOPIC_0000001233708683__b84235270620345">void</strong> and <strong id="EN-US_TOPIC_0000001233708683__b842352706203410">record</strong> as a result type. Some also support polymorphic functions using the <strong id="EN-US_TOPIC_0000001233708683__b842352706203520">anyelement</strong>, <strong id="EN-US_TOPIC_0000001233708683__b842352706203527">anyarray</strong>, <strong id="EN-US_TOPIC_0000001233708683__b842352706203534">anynonarray</strong>, <strong id="EN-US_TOPIC_0000001233708683__b842352706203542">anyenum</strong>, and <strong id="EN-US_TOPIC_0000001233708683__b842352706203549">anyrange</strong> types.</p>
|
|
<p id="EN-US_TOPIC_0000001233708683__a505e2cbbdd584b40bc427cf6ee328f68">The <strong id="EN-US_TOPIC_0000001233708683__b842352706203617">internal</strong> pseudo-type is used to declare functions that are meant only to be called internally by the database system, and not by direct call in an SQL query. If a function has at least one <strong id="EN-US_TOPIC_0000001233708683__b842352706203656">internal</strong>-type argument, it cannot be called from SQL. You are not advised to create any function that is declared to return <strong id="EN-US_TOPIC_0000001233708683__b842352706115116">internal</strong> unless the function has at least one <strong id="EN-US_TOPIC_0000001233708683__b922411375245">internal</strong> argument.</p>
|
|
<p id="EN-US_TOPIC_0000001233708683__a71aaee958aee4807b45cb9acb363b5b1">For example:</p>
|
|
<p id="EN-US_TOPIC_0000001233708683__p11383199183413">Create or replace the showall() function:</p>
|
|
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001233708683__screen1864112238347"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
|
|
<span class="normal">2</span>
|
|
<span class="normal">3</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">CREATE</span><span class="w"> </span><span class="k">OR</span><span class="w"> </span><span class="k">REPLACE</span><span class="w"> </span><span class="k">FUNCTION</span><span class="w"> </span><span class="n">showall</span><span class="p">()</span><span class="w"> </span><span class="k">RETURNS</span><span class="w"> </span><span class="k">SETOF</span><span class="w"> </span><span class="n">record</span>
|
|
<span class="k">AS</span><span class="w"> </span><span class="err">$$</span><span class="w"> </span><span class="k">SELECT</span><span class="w"> </span><span class="k">count</span><span class="p">(</span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="k">from</span><span class="w"> </span><span class="n">tpcds</span><span class="p">.</span><span class="n">store_sales</span><span class="w"> </span><span class="k">where</span><span class="w"> </span><span class="n">ss_customer_sk</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">9692</span><span class="p">;</span><span class="w"> </span><span class="err">$$</span>
|
|
<span class="k">LANGUAGE</span><span class="w"> </span><span class="k">SQL</span><span class="p">;</span>
|
|
</pre></div></td></tr></table></div>
|
|
|
|
</div>
|
|
<p id="EN-US_TOPIC_0000001233708683__p638389103414">Invoke the showall() function:</p>
|
|
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001233708683__screen1688093093414"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
|
|
<span class="normal">2</span>
|
|
<span class="normal">3</span>
|
|
<span class="normal">4</span>
|
|
<span class="normal">5</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">SELECT</span><span class="w"> </span><span class="n">showall</span><span class="p">();</span>
|
|
<span class="w"> </span><span class="n">showall</span><span class="w"> </span>
|
|
<span class="c1">---------</span>
|
|
<span class="w"> </span><span class="p">(</span><span class="mi">35</span><span class="p">)</span>
|
|
<span class="p">(</span><span class="mi">1</span><span class="w"> </span><span class="k">row</span><span class="p">)</span>
|
|
</pre></div></td></tr></table></div>
|
|
|
|
</div>
|
|
<p id="EN-US_TOPIC_0000001233708683__p183826910349">Delete the function.</p>
|
|
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001233708683__screen629074013349"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">DROP</span><span class="w"> </span><span class="k">FUNCTION</span><span class="w"> </span><span class="n">showall</span><span class="p">();</span>
|
|
</pre></div></td></tr></table></div>
|
|
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<div class="familylinks">
|
|
<div class="parentlink"><strong>Parent topic:</strong> <a href="dws_06_0008.html">Data Types</a></div>
|
|
</div>
|
|
</div>
|
|
|