亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? manual_adding_functions.html

?? MySQL參考手冊中文版
?? HTML
?? 第 1 頁 / 共 2 頁
字號:
<html>

<head>
<meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb2312">
<style type="text/css">
<!--
.p14{font-size:14.8px;font-family:宋體;line-height:14pt;}
.p5{ border: 1px solid rgb(146,201,201) }
.a:hover{color:red;}
a.t1:visited{color:red;}
-->
</style>
<title>MySQL中文參考手冊-14 向MySQL增加新函數(shù)</title>
</head>

<body BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#101090" VLINK="#7030B0" class="p4">

<h1><img src="Img/mysql-logo.gif" alt="mysql-logo.gif (3082 bytes)" WIDTH="127" HEIGHT="60"><font color="#FF0000">MySQL中文參考手冊</font></h1>

<p>翻譯:<a href="mailto:clyan@sohu.com">晏子</a>(yanzi) 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 主頁:<a href="http://linuxdn.yeah.net">http://linuxdb.yeah.net</a></p>

<hr>

<p><a HREF="manual_Introduction.html">第一章</a>, <a HREF="manual_Maintenance.html">前一章</a>, 
<a HREF="manual_Adding_procedures.html">下一章</a>, <a HREF="manual_Concept_Index.html">最后一章</a>,<a HREF="manual_toc.html">目錄</a>. </p>

<hr>

<h1><a NAME="Adding_functions" HREF="manual_toc.html#Adding_functions">14 為MySQL增加新函數(shù)</a></h1>

<p>有2種方法把新函數(shù)加到<strong>MySQL</strong>中: 

<ul>
  <li>你可以通過用戶定義函數(shù)(UDF)接口加入函數(shù)。用戶定義函數(shù)用<code>CREATE 
    FUNCTION</code>和<code>DROP FUNCTION</code>語句動態(tài)地增加和刪除。見<a HREF="manual_Reference.html#CREATE_FUNCTION">7.30<code> CREATE FUNCTION/DROP FUNCTION</code>句法</a>。</li>
  <li>你可以加入函數(shù)作為一個原生的(內(nèi)置的)<strong>MySQL</strong>函數(shù)。原生函數(shù)被編譯進<code>mysqld</code>服務(wù)器并且在一個永久的基礎(chǔ)上可得到。</li>
</ul>

<p>每種方法都有優(yōu)點和缺點: 

<ul>
  <li>如果你編寫一個用戶定義函數(shù),你必須安裝服務(wù)器外還得自己安裝對象文件。如果你編譯函數(shù)進服務(wù)器中,你不需要那樣做。</li>
  <li>你能把UDF加到<strong>MySQL</strong>二進制代碼發(fā)行中。原生函數(shù)要求你修改源代碼分發(fā)。</li>
  <li>如果你升級你的<strong>MySQL</strong>分發(fā),你能繼續(xù)使用你的以前安裝的UDF。對于原生函數(shù),你必須在每次升級時重復(fù)你的修改。 
  </li>
</ul>

<p>無論你使用哪種方法增加新函數(shù),他們可以象原生函數(shù)例如<code>ABS()</code>或<code>SOUNDEX()</code>那樣使用。</p>

<p><a NAME="IDX674"></a> <a NAME="IDX675"></a> <a NAME="IDX676"></a> </p>

<h2><a NAME="Adding_UDF" HREF="manual_toc.html#Adding_UDF">14.1 
增加一個新的用戶定義函數(shù)</a></h2>

<p>對于UDF的工作機制,函數(shù)必須用C或C++編寫并且你的操作系統(tǒng)必須支持動態(tài)裝載。<strong>MySQL</strong>源代碼分發(fā)包括一個文件<tt>“sql/udf_example.cc”</tt>,它定義了5個新函數(shù)。請教這個文件看UDF調(diào)用約定怎樣工作。</p>

<p>對每一個你想在SQL語句中使用的函數(shù),你應(yīng)該定義對應(yīng)的C(或 C++)函數(shù)。在下面的討論中,“xxx”用于一個函數(shù)名的例子。為了區(qū)別SQL和C/C++用法,<code>XXX()</code>(大寫)表明SQL函數(shù)調(diào)用,而<code>xxx()</code>((小寫)表明C/C++函數(shù)調(diào)用。</p>

<p>你編寫實現(xiàn)<code>XXX()</code>的接口的C/C++函數(shù)是: 

<dl COMPACT="Adding_UDF">
  <dt><code>xxx()</code>(必需的)</dt>
  <dd>主函數(shù)。這是計算函數(shù)結(jié)果的地方。SQL 類型于你的C/C++函數(shù)返回類型的對應(yīng)關(guān)系如下:<table BORDER="1" WIDTH="100%" NOSAVE="#101090" class="p4">
      <tr>
        <td><strong>SQL 類型</strong> </td>
        <td><strong>C/C++ 類型</strong> </td>
      </tr>
      <tr>
        <td><code>STRING</code> </td>
        <td><code>char *</code> </td>
      </tr>
      <tr>
        <td><code>INTEGER</code> </td>
        <td><code>long long</code> </td>
      </tr>
      <tr>
        <td><code>REAL</code> </td>
        <td><code>double</code> </td>
      </tr>
    </table>
  </dd>
  <dt><code>xxx_init()</code>(可選)</dt>
  <dd>為<code>xxx()</code>的初始化函數(shù),它可用于: <ul>
      <li>檢查傳到<code>XXX()</code>的參數(shù)數(shù)量。 </li>
      <li>檢查參數(shù)是一種所需的類型,或,另外地,當(dāng)主函數(shù)被調(diào)用時,告訴<strong>MySQL</strong>,為了強制參數(shù)到你想要的類型。</li>
      <li>分配任何由主函數(shù)所需的內(nèi)存。</li>
      <li>指定結(jié)果的最大長度。</li>
      <li>指定(對<code>REAL</code>函數(shù))小數(shù)位的最大數(shù)目。</li>
      <li>指定結(jié)果是否能是<code>NULL</code>。</li>
    </ul>
  </dd>
  <dt><code>xxx_deinit()</code>(可選)</dt>
  <dd>為<code>xxx()</code>的結(jié)束函數(shù),它應(yīng)該釋放初始化函數(shù)分配了的任何內(nèi)存。</dd>
</dl>

<p>當(dāng)一條SQL語句調(diào)用<code>XXX()</code>時,<strong>MySQL</strong>調(diào)用初始化函數(shù)<code>xxx_init()</code>,讓它執(zhí)行任何所需的設(shè)置,例如參數(shù)檢查或內(nèi)存分配。如果<code>xxx_init()</code>返回一個錯誤,SQL語句用一條錯誤消息并被放棄而主函數(shù)和結(jié)束函數(shù)不被調(diào)用,否則,為每行調(diào)用主函數(shù)<code>xxx()</code>一次。在所有行被處理完后,結(jié)束函數(shù)<code>xxx_deinit()</code>被調(diào)用,因此它能執(zhí)行任何必要的清除。</p>

<p>所有函必須是線程安全的(不只是主函數(shù),還有初始化和結(jié)束函數(shù))。這意味著,你不允許分配任何改變的全局或靜態(tài)變量!如果你需要內(nèi)存,你應(yīng)該在<code>xxx_init()</code>種分配它并且在<code>xxx_deinit()</code>中釋放它。</p>

<h3><a NAME="UDF_calling_sequences" HREF="manual_toc.html#UDF_calling_sequences">14.1.1 
UDF的調(diào)用順序</a></h3>

<p>主函數(shù)應(yīng)該如下定義。注意返回類型和參數(shù)不同,取決于你是否在<code>CREATE 
FUNCTION</code>語句中聲明SQL函數(shù)<code>XXX()</code>返回<code>STRING</code>、<code>INTEGER</code>或<code>REAL</code>: 
</p>

<p>對<code>STRING</code>函數(shù):</p>

<pre>char *xxx(UDF_INIT *initid, UDF_ARGS *args,
              char *result, unsigned long *length,
              char *is_null, char *error);
</pre>

<p>對<code>INTEGER</code>函數(shù): </p>

<pre>long long xxx(UDF_INIT *initid, UDF_ARGS *args,
              char *is_null, char *error);
</pre>

<p>對于<code>REAL</code>函數(shù): </p>

<pre>double xxx(UDF_INIT *initid, UDF_ARGS *args,
              char *is_null, char *error);
</pre>

<p>初始化和結(jié)束函數(shù)象這樣被聲明:</p>

<pre>my_bool xxx_init(UDF_INIT *initid, UDF_ARGS *args, char *message);

void xxx_deinit(UDF_INIT *initid);
</pre>

<p><code>initid</code>參數(shù)被傳給所有3個函數(shù),它指向一個<code>UDF_INIT</code>結(jié)構(gòu),被用來在函數(shù)之間傳遞信息。<code>UDF_INIT</code>結(jié)構(gòu)成員列在下面。初始化函數(shù)應(yīng)該填寫它想要改變的任何成員。(對一個成員使用缺省值,不改變它。) 

<dl COMPACT="UDF_calling_sequences">
  <dt><code>my_bool maybe_null</code> </dt>
  <dd>如果<code>xxx()</code>能返回<code>NULL</code>,<code>xxx_init()</code>應(yīng)該設(shè)置<code>maybe_null</code>為<code>1</code>。如果參數(shù)的任何一個被聲明<code>maybe_null</code>,缺省值是<code>1。</code></dd>
  <dt><code>unsigned int decimals</code> </dt>
  <dd>小數(shù)位數(shù)目。缺省值是在被傳給主函數(shù)的參數(shù)中小數(shù)位的最大數(shù)目。(例如,如果函數(shù)傳遞<code>1.34</code>、<code>1.345</code>和<code>1.3</code>,缺省值將是3,因為<code>1.345</code>有3個小數(shù)位。</dd>
  <dt><code>unsigned int max_length</code> </dt>
  <dd>字符串結(jié)果的最大長度。缺省值不同,取決于函數(shù)的結(jié)果類型。對字符串函數(shù),缺省是最長的參數(shù)的長度。對整數(shù)函數(shù),缺省是21位。對實數(shù)函數(shù),缺省是13加上由<code>initid-&gt;decimals</code>指出的小數(shù)位數(shù)。(對數(shù)字函數(shù),長度包括任何符號位或小數(shù)點字符。)</dd>
  <dt><code>char *ptr</code> </dt>
  <dd>函數(shù)可為它自己的目的使用的一個指針。例如,函數(shù)能使用<code>initid-&gt;ptr</code>在函數(shù)之間傳遞分配的內(nèi)存。在<code>xxx_init()</code>中,分配內(nèi)存并將它賦給這個指針:<pre>initid-&gt;ptr = allocated_memory;
</pre>
    <p>在<code>xxx()</code>和<code>xxx_deinit()</code>中,參照<code>initid-&gt;ptr</code>來使用或釋放內(nèi)存。</p>
  </dd>
</dl>

<h3><a NAME="UDF_arguments" HREF="manual_toc.html#UDF_arguments">14.1.2 參數(shù)處理</a></h3>

<p><code>args</code>參數(shù)指向一個<code>UDF_ARGS</code>成員,其結(jié)構(gòu)列在下面: 

<dl COMPACT="UDF_arguments">
  <dt><code>unsigned int arg_count</code> </dt>
  <dd>參數(shù)個數(shù)。如果你想要函數(shù)用一個特定數(shù)量的參數(shù)被調(diào)用,在初始化函數(shù)中檢查這個值。例如:<pre>if (args-&gt;arg_count != 2)
{
    strcpy(message,&quot;XXX() requires two arguments&quot;);
    return 1;
}
</pre>
  </dd>
  <dt><code>enum Item_result *arg_type</code> </dt>
  <dd>為每個參數(shù)的類型。可能的類型值是<code>STRING_RESULT</code>、<code>INT_RESULT</code>和<code>REAL_RESULT</code>。為了確保參數(shù)是一種給定的類型,而如果他們不是,返回一個錯誤,在初始化函數(shù)中檢查<code>arg_type</code>數(shù)組。例如:<pre>if (args-&gt;arg_type[0] != STRING_RESULT
      &amp;&amp; args-&gt;arg_type[1] != INT_RESULT)

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
51精品久久久久久久蜜臀| 欧美国产97人人爽人人喊| 久久久久久久久久久久久女国产乱| 欧美国产精品一区二区| 午夜精品一区二区三区三上悠亚| 国产麻豆精品95视频| 99精品在线免费| 精品黑人一区二区三区久久| 亚洲精品视频自拍| 成人网页在线观看| 91精品国产综合久久久久| 亚洲蜜桃精久久久久久久| 国产精品主播直播| 日韩一级视频免费观看在线| 亚洲小说欧美激情另类| 99九九99九九九视频精品| 国产欧美视频一区二区| 麻豆国产精品官网| 欧美一区二区三区视频| 亚洲综合免费观看高清完整版 | 热久久国产精品| 欧美综合色免费| 亚洲欧洲性图库| 成人av网站在线| 国产精品三级av| 成人高清视频免费观看| 国产偷国产偷精品高清尤物| 激情综合色综合久久综合| 精品精品国产高清a毛片牛牛| 日韩电影在线免费观看| 欧美日韩亚洲综合| 亚洲一区电影777| 欧美性生活影院| 亚洲国产视频一区| 欧美色电影在线| 午夜成人免费视频| 在线不卡中文字幕播放| 日韩电影在线一区二区| 日韩视频永久免费| 精品中文av资源站在线观看| 欧美r级电影在线观看| 精品亚洲国产成人av制服丝袜 | 国产欧美日韩在线观看| 美女视频一区在线观看| 日韩精品一区二区三区四区视频| 另类小说欧美激情| 久久精品日韩一区二区三区| 国产成人综合亚洲91猫咪| 国产精品午夜在线| 波多野结衣中文字幕一区二区三区| 国产精品私人自拍| 欧美麻豆精品久久久久久| 秋霞国产午夜精品免费视频| 精品美女被调教视频大全网站| 黄色成人免费在线| 国产精品麻豆99久久久久久| 91麻豆蜜桃一区二区三区| 亚洲一区二区三区在线播放| 日韩一卡二卡三卡国产欧美| 成人综合婷婷国产精品久久蜜臀 | 日韩av一区二区三区四区| 欧美tickle裸体挠脚心vk| 成人一区在线观看| 亚洲二区在线观看| xnxx国产精品| 色婷婷精品久久二区二区蜜臀av | 亚洲综合丝袜美腿| 精品国精品自拍自在线| 色综合久久久久综合体桃花网| 日韩黄色小视频| 日本一区二区三级电影在线观看 | 91一区二区三区在线观看| 视频一区中文字幕国产| 国产欧美日韩综合精品一区二区| 欧美视频在线观看一区二区| 久久99精品国产.久久久久久| 亚洲天天做日日做天天谢日日欢| 欧美成人综合网站| 91黄色激情网站| 国产中文一区二区三区| 一区二区三区不卡视频在线观看| 精品少妇一区二区三区免费观看 | 成人性生交大片免费看视频在线| 亚洲成人免费电影| 国产精品久久久久久久浪潮网站 | 欧美揉bbbbb揉bbbbb| 国产一区二区免费看| 亚洲风情在线资源站| 国产精品每日更新| 久久久不卡影院| 日韩精品中文字幕一区| 欧洲人成人精品| av男人天堂一区| 国产精品 欧美精品| 麻豆91精品视频| 亚洲成人综合视频| 亚洲品质自拍视频| 中文字幕成人在线观看| 欧美大胆一级视频| 欧美日韩一区国产| 91官网在线免费观看| 成人高清视频免费观看| 国产99久久久精品| 国产尤物一区二区| 久88久久88久久久| 日本不卡1234视频| 日本不卡一区二区| 日韩精品欧美精品| 午夜欧美在线一二页| 一区二区三区四区国产精品| 1024国产精品| 亚洲欧洲日本在线| 1024精品合集| 亚洲视频网在线直播| 国产精品久久二区二区| 欧美国产精品劲爆| 国产精品视频免费看| 国产欧美日韩精品a在线观看| 久久网站最新地址| 国产亚洲成av人在线观看导航| 精品99999| 久久精品视频一区| 18成人在线观看| 亚洲综合一区二区精品导航| 亚洲自拍偷拍欧美| 日韩高清国产一区在线| 久久99最新地址| 国产成人aaa| 不卡一卡二卡三乱码免费网站| 99这里都是精品| 在线免费观看一区| 欧美肥妇free| 亚洲精品一区二区三区99| 国产欧美一区二区精品忘忧草| 中文字幕一区二区三区在线观看| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 自拍偷自拍亚洲精品播放| 夜夜嗨av一区二区三区四季av| 五月激情综合网| 国产永久精品大片wwwapp| www.成人在线| 欧美视频一二三区| 久久综合九色综合久久久精品综合 | 久久精品亚洲一区二区三区浴池| 国产日产精品一区| 亚洲精品国产视频| 日本aⅴ精品一区二区三区| 国产精品一二三在| 色视频一区二区| 欧美大片拔萝卜| 亚洲卡通欧美制服中文| 日韩和的一区二区| 成人免费视频网站在线观看| 欧美日韩欧美一区二区| 亚洲精品一区二区三区在线观看 | 午夜精品在线看| 成人免费高清在线| 欧美美女一区二区在线观看| 国产三级久久久| 丝袜美腿亚洲色图| av网站免费线看精品| 91精品国产综合久久福利软件 | 精品久久人人做人人爰| 亚洲欧美在线aaa| 免费看欧美女人艹b| 91视视频在线观看入口直接观看www| 欧美一区二区在线不卡| 中文字幕视频一区| 精品一区二区三区在线播放 | 日韩三级视频中文字幕| 欧美激情自拍偷拍| 免费看欧美女人艹b| 91视频.com| 日本一区二区成人| 九九在线精品视频| 欧美精品 国产精品| 亚洲柠檬福利资源导航| 国产成人精品aa毛片| 日韩欧美综合在线| 午夜精品久久久久久久| 91小视频免费观看| 国产日本一区二区| 久草这里只有精品视频| 欧美一区二区视频观看视频| 亚洲国产精品嫩草影院| 91蝌蚪porny| 国产精品欧美极品| 国产成a人亚洲精品| 久久蜜桃香蕉精品一区二区三区| 日韩精品1区2区3区| 欧美日韩精品一区二区三区| 亚洲美女视频一区| 91一区二区三区在线观看| 中文字幕免费不卡在线| 国产成人在线视频网站| 亚洲国产精华液网站w| 国产 欧美在线| 久久精品视频一区二区三区| 国产伦精品一区二区三区在线观看| 日韩精品一区二区三区在线|