午夜视频免费看_日韩三级电影网站_国产精品久久一级_亚洲一级在线播放_人妻体内射精一区二区三区_91夜夜揉人人捏人人添红杏_91福利在线导航_国产又粗又猛又黄又爽无遮挡_欧美日韩一区在线播放_中文字幕一区二区三区四区不卡 _日日夜夜精品视频免费观看_欧美韩日一区二区三区

主頁 > 知識庫 > PostgreSQL教程(十九):SQL語言函數

PostgreSQL教程(十九):SQL語言函數

熱門標簽:外呼調研系統 漯河外呼電話系統 地圖標注和圖片名稱的區別 打電話智能電銷機器人授權 重慶自動外呼系統定制 辦公外呼電話系統 合肥公司外呼系統運營商 美容工作室地圖標注 海豐有多少商家沒有地圖標注

一、基本概念:

    SQL函數可以包含任意數量的查詢,但是函數只返回最后一個查詢(必須是SELECT)的結果。在簡單情況下,返回最后一條查詢結果的第一行。如果最后一個查詢不返回任何行,那么該函數將返回NULL值。如果需要該函數返回最后一條SELECT語句的所有行,可以將函數的返回值定義為集合,即SETOF sometype。

    SQL函數的函數體應該是用分號分隔的SQL語句列表,其中最后一條語句之后的分號是可選的。除非函數聲明為返回void,否則最后一條語句必須是SELECT。事實上,在SQL函數中,不僅可以包含SELECT查詢語句,也可以包含INSERT、UPDATE和DELETE等其他標準的SQL語句,但是和事物相關的語句不能包含其中,如BEGIN、COMMIT、ROLLBACK和SAVEPOINT等。

    CREATE FUNCTION命令的語法要求函數體寫成一個字符串文本。通常來說,該文本字符串常量使用美元符($$)圍住,如:
 

復制代碼 代碼如下:

    CREATE FUNCTION clean_emp() RETURNS void AS $$
        DELETE FROM emp WHERE salary 0;
    $$ LANGUAGE SQL;
 

    最后需要說明的是SQL函數中的參數,PostgreSQL定義$1表示第一個參數,$2為第二個參數并以此類推。如果參數是復合類型,則可以使用點表示法,即$1.name訪問復合類型參數中的name字段。需要注意的是函數參數只能用作數據值,而不能用于標識符,如:
 
復制代碼 代碼如下:

    INSERT INTO mytable VALUES ($1);   --合法
    INSERT INTO $1 VALUES (42);          --不合法(表名屬于標示符之一)
   

二、基本類型:
    
    最簡單的SQL函數可能就是沒有參數且返回基本類型的函數了,如:
 
復制代碼 代碼如下:

    CREATE FUNCTION one() RETURNS integer AS $$
        SELECT 1 AS result;
    $$ LANGUAGE SQL;
 

    下面的例子聲明了基本類型作為函數的參數。
 
復制代碼 代碼如下:

    CREATE FUNCTION add_em(integer, integer) RETURNS integer AS $$
        SELECT $1 + $2;
    $$ LANGUAGE SQL;
    # 通過select調用函數。
    postgres=# SELECT add_em(1,2) AS answer;
     answer
    --------
          3
    (1 row)
 

    在下面的例子中,函數體內包含多個SQL語句,它們之間是用分號進行分隔的。
 
復制代碼 代碼如下:

    CREATE FUNCTION tf1 (integer, numeric) RETURNS numeric AS $$
        UPDATE bank SET balance = balance - $2 WHERE accountno = $1;
        SELECT balance FROM bank WHERE accountno = $1;
    $$ LANGUAGE SQL;

三、復合類型:

    見如下示例:

    1). 創建數據表,這樣與之對應的復合類型也隨之生成。
 

復制代碼 代碼如下:

    CREATE TABLE emp (
        name        text,
        salary      numeric,
        age         integer,
    );
 

    2). 創建函數,其參數為復合類型。在函數體內,可以像引用基本類型參數那樣引用復合類型,如$1。訪問復合類型的字段使用點表達式即可,如:$1.salary。
   
復制代碼 代碼如下:

 CREATE FUNCTION double_salary(emp) RETURNS integer AS $$
        SELECT ($1.salary * 2)::integer AS salary;
    $$ LANGUAGE SQL;
 

    3). 在select語句中,可以使用emp.*表示emp表的一整行數據。
 
復制代碼 代碼如下:

    SELECT name, double_salary(emp.*) AS dream FROM emp WHERE age > 30;
 

    4). 我們也可以使用ROW表達式構造自定義的復合類型,如:
 
復制代碼 代碼如下:

    SELECT name, double_salary(ROW(name, salary*1.1, age)) AS dream FROM emp;
 

    5). 創建一個函數,其返回值為復合類型,如:
 
復制代碼 代碼如下:

    CREATE FUNCTION new_emp() RETURNS emp AS $$
        SELECT ROW('None', 1000.0, 25)::emp;
    $$ LANGUAGE SQL;
 

    6). 調用返回復合類型的函數。
 
復制代碼 代碼如下:

    SELECT new_emp();
 

    7). 調用返回復合類型的函數,同時訪問該返回值的某個字段。
 
復制代碼 代碼如下:

    SELECT (new_emp()).name;
 

四、帶輸出參數的函數:

    還有一種方法可以用于返回函數執行的結果,即輸出參數,如:
 

復制代碼 代碼如下:

    CREATE FUNCTION add_em2 (IN x int, IN y int, OUT sum int) AS $$
        SELECT $1 + $2
    $$ LANGUAGE SQL;
 

    調用方法和返回結果與add_em(帶有返回值的函數)完全一致,如:
 
復制代碼 代碼如下:

    SELECT add_em(3,7);
   

    這個帶有輸出參數的函數和之前的add_em函數沒有本質的區別。事實上,輸出參數的真正價值在于它為函數提供了返回多個字段的途徑。如,
 
復制代碼 代碼如下:

    CREATE FUNCTION sum_n_product (x int, y int, OUT sum int, OUT product int) AS $$
        SELECT $1 + $2, $1 * $2
    $$ LANGUAGE SQL;
 

    調用方式沒有改變,只是返回結果多出一列。
 
復制代碼 代碼如下:

    SELECT * FROM sum_n_product(11,42);
     sum | product
    -----+---------
      53 |     462
    (1 row)
 

    在上面的示例中,IN用于表示該函數參數為輸入參數(缺省值,可以忽略),OUT則表示該參數為輸出參數。

五、返回結果作為表數據源:

    所有SQL函數都可以在查詢的FROM子句里使用。該方法對于返回復合類型的函數而言特別有用,如果該函數定義為返回一個基本類型,那么該函數生成一個單字段表,如果該函數定義為返回一個復合類型,那么該函數生成一個復合類型里每個屬性組成的行。見如下示例:
    1). 創建一個數據表。
 

復制代碼 代碼如下:

    CREATE TABLE foo (
        fooid    int,
        foosubid int,
        fooname  text
    );
 

    2). 創建SQL函數,其返回值為與foo表對應的復合類型。
 
復制代碼 代碼如下:

    CREATE FUNCTION getfoo(int) RETURNS foo AS $$
        SELECT * FROM foo WHERE fooid = $1;
    $$ LANGUAGE SQL;
 

    3). 在FROM子句中調用該函數。
 
復制代碼 代碼如下:

    SELECT *, upper(fooname) FROM getfoo(1) AS t1;
 

六、返回集合的SQL函數:

    如果SQL函數的返回值為SETOF sometype,那么在調用該函數時,將返回最后一個SELECT查詢的全部數據。這個特性通常用于把函數放在FROM子句里調用,見如下示例:
    CREATE FUNCTION getfoo(int) RETURNS setof foo AS $$
        SELECT * FROM foo WHERE fooid = $1;
    $$ LANGUAGE SQL;   
    在FROM子句中調用了返回復合類型集合的函數,其結果等同于:SELECT * FROM (SELECT * FROM foo WHERE fooid = 1) t1;
    SELECT * FROM getfoo(1) AS t1;    
   
七、多態的SQL函數:

    SQL函數可以聲明為接受多態類型(anyelement和anyarray)的參數或返回多態類型的返回值,見如下示例:
    1). 函數參數和返回值均為多態類型。
 

復制代碼 代碼如下:

    CREATE FUNCTION make_array(anyelement, anyelement) RETURNS anyarray AS $$
        SELECT ARRAY[$1, $2];
    $$ LANGUAGE SQL;
 

    其調用方式和調用其它類型的SQL函數完全相同,只是在傳遞字符串類型的參數時,需要顯式轉換到目標類型,否則將會被視為unknown類型,如:
 
復制代碼 代碼如下:

    SELECT make_array(1, 2) AS intarray, make_array('a'::text, 'b') AS textarray;
 

    2). 函數的參數為多態類型,而返回值則為基本類型。
 
復制代碼 代碼如下:

    CREATE FUNCTION is_greater(anyelement, anyelement) RETURNS boolean AS $$
        SELECT $1 > $2;
    $$ LANGUAGE SQL;
 

    3). 多態類型用于函數的輸出參數。
 
復制代碼 代碼如下:

    CREATE FUNCTION dup (f1 anyelement, OUT f2 anyelement, OUT f3 anyarray) AS $$
        SELECT $1, ARRAY[$1,$1]
    $$ LANGUAGE sql;

八、函數重載:

    多個函數可以定義成相同的函數名,但是它們的參數一定要有所區分。換句話說,函數名可以重載,此規則有些類似于面向對象語言中的函數重載,見如下示例:
 

復制代碼 代碼如下:

    CREATE FUNCTION test(int, real) RETURNS ...
    CREATE FUNCTION test(smallint, double) RETURNS ...

    由于在PostgreSQL中函數支持重載,因此在刪除函數時,也必須指定參數列表,如:
 
復制代碼 代碼如下:

    DROP FUNCTION test(int, real);
    DROP FUNCTION test(smallint,double);
 

您可能感興趣的文章:
  • PostgreSQL中的XML操作函數代碼
  • PostgreSQL 正則表達式 常用函數的總結
  • 深入解讀PostgreSQL中的序列及其相關函數的用法
  • PostgreSQL教程(七):函數和操作符詳解(3)
  • PostgreSQL教程(五):函數和操作符詳解(1)
  • PostgreSQL教程(六):函數和操作符詳解(2)
  • PostgreSQL Node.js實現函數計算方法示例
  • PostgreSQL數據庫中窗口函數的語法與使用

標簽:蚌埠 珠海 來賓 晉城 株洲 烏海 衡陽 錦州

巨人網絡通訊聲明:本文標題《PostgreSQL教程(十九):SQL語言函數》,本文關鍵詞  PostgreSQL,教程,十九,SQL,語言,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《PostgreSQL教程(十九):SQL語言函數》相關的同類信息!
  • 本頁收集關于PostgreSQL教程(十九):SQL語言函數的相關信息資訊供網民參考!
  • 推薦文章
    亚洲小说欧美另类激情| 亚洲精品国产一区二区三区四区在线 | 日本欧美国产在线| 欧美色国产精品| 国产成人高清视频| 亚洲免费黄色网址| 黄色三级视频在线播放| 一区二区三区四区视频在线| 欧美精品免费播放| 欧美在线观看一二区| 国产福利一区二区三区| 国产成人在线免费观看视频| 免费看涩涩视频| 日韩av不卡播放| 国产老熟妇精品观看| 在线成人性视频| 亚洲欧美国产日韩天堂区| 亚洲欧美国产精品久久久久久久| 亚洲在线色站| 日本乱子伦xxxx| 亚洲日本香蕉视频| 久久se这里有精品| 91麻豆成人精品国产| 国产一区二区三区在线观看精品| 综合五月激情网| 免费一区二区三区在线观看| 日韩欧美国产二区| 国产成人在线免费看| 无码任你躁久久久久久久| 五月天激情小说综合| 免费精品视频一区二区三区| 无套内谢丰满少妇中文字幕| 成人久久精品人妻一区二区三区| 欧美精品自拍偷拍动漫精品| 78m国产成人精品视频| 自拍av一区二区三区| 国产成人啪午夜精品网站男同| 五月婷婷色丁香| 中文字幕亚洲欧美在线不卡| 国产成人精品久久| 侵犯稚嫩小箩莉h文系列小说| 五月天婷婷综合| 久久久免费电影| 欧美日韩综合色| ㊣最新国产の精品bt伙计久久| 色综合久久久久久久久久久| 亚洲精品欧美综合四区| 激情综合五月天| 成人av无码一区二区三区| 国产成人无码www免费视频播放| 欧美又粗又大又长| 国产传媒视频在线| 91影院在线观看| 日韩成人免费电影| 国产麻豆91视频| 国产午夜福利一区二区| 亚洲网中文字幕| 三级黄色片在线观看| 久久这里只有精品9| 色一情一乱一乱一区91av| 天堂中文在线网| 国产午夜精品无码| 国产成人精品一区二区色戒| 久草视频一区二区| 中文字幕一区二区三区在线不卡 | 欧美日韩一区二区三区在线视频| 久久66热这里只有精品| 在线免费看污网站| 无码人妻精品一区二区三| 亚洲a级黄色片| 日本中文字幕高清| 亚洲福利av在线| 日本在线一二三区| 特级毛片www| 久久 天天综合| 亚洲观看黄色网| 国产精品久久久免费观看| 国产第100页| 日本91福利区| 国产精品丝袜久久久久久app| 中文成人av在线| 欧美一级国产精品| 国产精品99一区| 精品午夜一区二区| 国产精品毛片一区二区| 日韩av不卡在线观看| 色偷偷偷亚洲综合网另类| 青春草在线视频免费观看| 91中文字幕在线视频| 日本大胆人体视频| 91欧美一区二区三区| 黄色日韩网站视频| 精品无码av无码免费专区| 九九热精品免费视频| 亚洲色图在线视频| 欧美一级免费播放| 日韩不卡视频在线| 国产欧美日韩三区| 人妻精品无码一区二区三区 | 神马午夜伦理影院| www.麻豆av| 91精品国产色综合久久久蜜香臀| 69堂成人精品免费视频| 在线观看精品自拍私拍| 超碰97在线资源| 好吊色视频一区二区三区| 亚洲人成在线观| 青青草成人免费| 亚洲电影一区二区| 日韩人妻精品一区二区三区| 99免费精品在线| 亚洲小说欧美激情另类| 亚洲av无码成人精品国产| 精品日韩在线观看| 亚洲春色一区二区三区| 91亚洲一区二区| 久久久成人精品| 蜜桃av噜噜一区| 日韩在线导航| 亚洲女人18毛片水真多| 成人在线激情视频| 91欧美日韩麻豆精品| 亚洲欧美在线免费观看| 亚洲娇小娇小娇小| 夜夜嗨av一区二区三区中文字幕 | 国产精品久久久久久久美男| 天堂v在线观看| 亚洲老妇xxxxxx| 色噜噜狠狠永久免费| 3751色影院一区二区三区| 精品人妻一区二区三区麻豆91 | 在线亚洲一区观看| 波多野结衣加勒比| 中文在线免费一区三区高中清不卡| 国产视频欧美视频| 国产精品一区二区6| 欧美一区二区网站| 亚洲精品高清无码视频| 欧美性大战xxxxx久久久| 国产黄色片免费观看| 久久久久久成人精品| 亚洲天堂中文在线| 久久综合九九| 亚洲av综合色区无码另类小说| 亚洲娇小xxxx欧美娇小| 一女二男一黄一片| 欧美日韩在线免费观看视频| 欧美乱妇20p| 麻豆视频在线免费看| 欧美一区二区免费视频| 久草资源在线视频| 国产精品h在线观看| 99超碰在线观看| 亚洲欧美日本另类| 天天爱天天干天天操| 好吊操视频这里只有精品| 日韩久久免费电影| 成人激情四射网| 国产精品一区二区三区在线播放| 中文字幕永久在线| 欧美精彩一区二区三区| 欧美性20hd另类| 久久天天做天天爱综合色| av资源免费看| aaaaa级少妇高潮大片免费看| 久久er99热精品一区二区三区| 亚洲欧洲一区二区在线播放| 亚洲制服在线观看| 另类专区欧美制服同性| 麻豆精品久久久| 美女100%露胸无遮挡| 亚洲人成伊人成综合网久久久| av加勒比在线| 在线观看av中文字幕| 杨幂一区欧美专区| 在线成人午夜影院| 久久激情五月婷婷| 少妇视频在线播放| 亚洲一区在线播放| 成人午夜福利视频| 国产中文字幕视频在线观看| 欧美在线播放一区二区| 国产精品美女黄网| 国产伦精品一区二区三区精品视频| 欧美网站一区二区| 91丨porny丨蝌蚪视频| 美女视频黄免费| 色综合久综合久久综合久鬼88| 国产欧美日韩精品a在线观看| 久久久久亚洲av无码a片| 亚洲区一区二区三区| 国产在线精品不卡| 国产精品视频中文字幕| 欧美极品第一页| 亚洲国产天堂久久综合网| 久久一综合视频| 人妻丰满熟妇aⅴ无码| 亚洲图片小说在线| 国产精品欧美一区喷水| 性色av蜜臀av浪潮av老女人| 国产精品无码av在线播放 | 99久热re在线精品视频| 国产伦精品一区二区| 国产一区再线| 国产色综合一区二区三区| 成人福利在线观看| 欧美在线视频不卡| 国产乱子伦精品无码码专区| 亚洲图片第一页| 精品视频高清无人区区二区三区| 美女少妇精品视频| 99精品久久免费看蜜臀剧情介绍| 星空大象在线观看免费播放| 亚洲人成网站在线观看播放| 欧美日韩在线精品| 91影视免费在线观看| 日韩av最新在线观看| 在线看一区二区| 91l九色lporny| 成人免费观看毛片| 日韩成人av电影在线| 啪一啪鲁一鲁2019在线视频| 亚洲欧美变态国产另类| 538在线一区二区精品国产| av在线不卡观看免费观看| 午夜精品一区二| 四虎永久免费网站| 国产精品入口免费| 2021国产精品视频| 亚洲一区在线观看免费 | 91免费视频网站| 成人蜜桃视频| 少妇高潮久久77777| 欧美体内谢she精2性欧美| 中文字幕欧美一| 一区二区伦理片| 国产一区二区三区小说| 精品国产_亚洲人成在线| 国产精品高精视频免费| 国产伦精品一区二区三区免.费| 伊人久久大香线蕉精品| 欧美性大战久久| 一区二区三区精| 免费人成自慰网站| 一区二区在线视频播放| 狠狠色综合播放一区二区| 精品国产午夜福利在线观看| 欧美怡红院视频一区二区三区| 91网上在线视频| 欧美日韩在线视频免费播放| 欧洲视频一区二区三区| 日韩一卡二卡三卡| 精品人妻无码一区二区三区蜜桃一| 男人插女人视频在线观看| 色婷婷av一区二区三区久久| 99久久精品国产导航| 欧美一级片在线视频| 日韩国产一区久久| 日韩久久免费电影| 成人三级伦理片| 五月婷婷一区二区| 超碰在线免费观看97| 亚洲人成网站色ww在线| 久久精品夜夜夜夜久久| 精品少妇久久久久久888优播| av动漫免费观看| 草民午夜欧美限制a级福利片| 国产精品久久久久永久免费观看 | 欧美专区在线播放| 亚洲国产精品久久久男人的天堂| 国产日韩免费视频| www.欧美com| 国产一区二区精品在线| 日韩三区在线观看| 国产成人精品免费| 日韩成人av毛片| 国产第一页视频| 国产精品久久久久久久久久小说| 日本精品视频一区二区三区| 蜜臀av一区二区在线免费观看 | 中文字幕乱码在线人视频| 亚洲专区在线视频| 日韩电影大片中文字幕 | 国产在线视视频有精品| 久久久久久国产精品视频| av免费观看大全| 国产中文字幕日韩| 日韩电影大片中文字幕| 国产精品久久毛片a| 高潮毛片7777777毛片| 在线观看福利片| 三级在线免费观看| 欧美孕妇性xx| 日韩欧美一区二区在线视频| 久久久精品天堂| 国内精品国产成人国产三级| 少妇按摩一区二区三区| 伊人再见免费在线观看高清版| 欧洲美女7788成人免费视频| 91麻豆精品国产91久久久使用方法| 成人妖精视频yjsp地址| 中文人妻av久久人妻18| 三级黄色片播放| 致1999电视剧免费观看策驰影院| 欧美精品xxx| 日韩欧美资源站| 亚洲人精品午夜| 免费成人在线观看视频| 中文 欧美 日韩| 在线不卡av电影| 成人观看免费完整观看| 久久www免费人成精品| 久久免费在线观看| 精品久久国产字幕高潮| 亚洲一区二区三区激情| 成人精品视频网站| 亚洲xxxx天美| 亚洲国产精品成人无久久精品| 中国男女全黄大片| 欧美亚洲色图视频| 国产在线精品一区二区中文| 国模视频一区二区三区| 日韩成人中文电影| 91激情五月电影| 亚洲欧美一区二区视频| 国产69精品久久99不卡| 成人午夜免费福利| 波多野结衣在线观看视频| 神马久久精品综合| 韩国三级在线播放| 国产亚洲综合视频| 一区二区三区四区欧美日韩| 91视频国产精品| 97热精品视频官网| 日韩视频免费看| 亚洲国产精品福利| 91久久久免费一区二区| 亚洲精品国产精华液| 久久久亚洲精品一区二区三区 | 亚洲精品久久久久久久久久久久久久| 免费无遮挡无码永久在线观看视频 | 日韩中文字幕影院| 最近国语视频在线观看免费播放| 无码黑人精品一区二区| 国产吞精囗交久久久| 99国产精品免费视频| 亚洲国产精品毛片av不卡在线| 青青草影院在线观看| 日本欧美精品久久久| 精品无码久久久久国产| 成人中文字幕在线观看| 国产91色在线免费| 97不卡在线视频| 性色av一区二区三区红粉影视| 久久精品夜夜夜夜夜久久| 亚洲视频日韩精品| 亚洲精品国产拍免费91在线| 日韩三级高清在线| 91精品国产手机| 91精品国产综合久久婷婷香蕉| 一本色道综合亚洲| 日韩欧美aⅴ综合网站发布| 午夜精品一区二区三区电影天堂| 一区二区三区精品在线| 亚洲午夜在线观看视频在线| 一区二区三区欧美视频| 亚洲最新在线观看| 一区二区三区高清| 调教+趴+乳夹+国产+精品| 午夜精品福利一区二区三区av| 亚洲一区二区欧美激情| 亚洲精品欧美综合四区| 国产精品第一页第二页第三页| 国产精品第四页| 一区二区三区四区中文字幕| 亚洲大片一区二区三区| 欧美视频中文字幕在线| 欧美午夜片在线观看| 777xxx欧美| 日韩av在线天堂网| 中文字幕9999| 欧美国产日韩一区二区| 欧美亚洲伦理www| 成人女保姆的销魂服务| 成人免费91在线看| 少妇免费毛片久久久久久久久| 日韩精品久久久免费观看 | 久久久777| 精品中文字幕一区二区小辣椒| 国产麻豆精品在线| 国产午夜亚洲精品羞羞网站| 亚洲人成精品久久久久| 欧美性xxxxx极品娇小| 91精品国产高清一区二区三区蜜臀| 欧美精品一区二区三区蜜桃视频 | 四虎成人精品永久免费av| 欧美精品一二三四区| 国产精品一区二区三区在线免费观看| 超碰福利在线观看| 黄网站免费久久| 国产欧美日韩在线看| 精品久久久久久久中文字幕| 91麻豆精品国产综合久久久久久 | 亚洲精品乱码久久久久久按摩观| 中文字幕一精品亚洲无线一区| 日本不卡免费高清视频| 高清国产一区| 国产资源在线视频| 成人手机在线免费视频| 97超碰人人干|