麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 數據庫 > PostgreSQL > 正文

PostgreSQL7.0手冊-用戶手冊-19. SQL命令-CREATE FUNCTION

2019-09-08 23:33:00
字體:
來源:轉載
供稿:網友
CREATE FUNCTION
名稱
CREATE FUNCTION ― 定義一個新函數 

語法
CREATE FUNCTION name ( [ ftype [, ...] ] )
    RETURNS rtype
    AS definition   
    LANGUAGE 'langname'
    [ WITH ( attribute [, ...] ) ]
CREATE FUNCTION name ( [ ftype [, ...] ] )
    RETURNS rtype
    AS obj_file , link_symbol  
    LANGUAGE 'C'
    [ WITH ( attribute [, ...] ) ]
輸入
name 
要創建的函數名. 
ftype 
函數參數的數據類型.輸入類型可以是基本類型,組合類型或者 opaque。opaque 表明該函數接受一個非法的象 char * 這樣的類型。. 
rtype 
返回數據類型.輸入類型可以是基本類型,組合類型,setof type或者 opaque。setof 修改器表示該函數將返回套條目,而不是單條條目。 
attribute 
一個關于函數的可選信息,用于優化。目前唯一支持的屬性是 iscachable。iscachable 表示此函數在輸入相同時總是返回相同的值(也就是說,它不做數據庫查找或者是使用沒有直接在它的參數列表出現的信息)。優化器使用 iscachable 來認知對該函數的調用進行預先計算是否安全。 
definition 
一個定義函數的字串;其含義取決于(用的)語言。可以是一個內部函數名,一個指向一個目標文件的路徑,一個SQL查詢或者一種過程語言的文本。 
obj_file , link_symbol 
這種形式的 AS 子句用于動態鏈接的 C 語言函數,這時該函數在 C 源代碼里的名稱和 SQL 函數的名稱不同。字符串 obj_file 是含有可動態裝載的對象的文件名,而 link_symbol 是對象的鏈接符號,這個符號與 C 源代碼里的函數名相同。 
langname 
可以是 'C','sql','internal' 或 'plname',這里 'plname' 是所創建過程的語言名.參考  CREATE LANGUAGE 獲取詳細信息. 
輸出
CREATE 
命令成功地執行返回的信息. 

描述
CREATE FUNCTION 允許一個 Postgres 用戶在一個數據庫里注冊一個函數.同樣這個用戶將被看作這個函數的所有者. 
  
注意
請參閱PostgreSQL 程序員手冊 關于通過函數擴展 Postgres 的章節獲取更多關于書寫外部函數的信息.Use DROP FUNCTION to remove user-defined functions. 
Postgres 允許函數“重載”;也就是說,同一個函數名可以用于幾個不同的函數,只要它們的參數可以區分它們。不過,這個功能在用于 INTERNAL 和 C 語言的函數時要小心。 

允許輸入參數和返回值使用全部 SQL92 類型語法.不過,有些類型聲明的細節(例如, numeric 類型的精度域)是由下面的函數實現負責的,并且被 CREATE FUNCTION  命令悄悄的吞并了(也就是說,不再被識別或強制). 

兩個內部函數擁有相同 C 名稱時肯定會發生鏈接時錯誤。要解決這個問題,賦予它們不同的 C 名稱(例如,使用參數類型做為 C 名稱的一部分),然后在 CREATE FUNCTION 的 AS 子句里面聲明這些名字。如果 AS 子句為空,那么 CREATE FUNCTION 假設函數的 C 名稱與SQL名稱一樣。 

如果用 C 語言函數重載 SQL 函數,給每個 C 語言函數的實例一個獨立的名稱,并且使用 CREATE FUNCTION 語法里的 AS 子句的不同形式來確保重載的 SQL 函數名稱正確地解釋為相應動態鏈接對象。 
 

函數不能返回一套數值(結果). 

用法
創建一個簡單的 SQL 函數: 
CREATE FUNCTION one() RETURNS int4
    AS 'SELECT 1 AS RESULT'
    LANGUAGE 'sql';
SELECT one() AS answer;

     answer 
--------
      1
這個例子通過調用一個用戶創建的共享庫的路徑創建一個 C 函數.該路徑計算一個檢測位并且如果函數參數里的檢測位正確就返回一個 TRUE .這些是通過使用一個 CHECK 約束實現的. 
CREATE FUNCTION ean_checkdigit(bpchar, bpchar) RETURNS bool
    AS '/usr1/proj/bray/sql/funcs.so' LANGUAGE 'c';
    
CREATE TABLE product (
    id        char(8) PRIMARY KEY,
    eanprefix char(8) CHECK (eanprefix ~ '[0-9]{2}-[0-9]{5}')
                      REFERENCES brandname(ean_prefix),
    eancode   char(6) CHECK (eancode ~ '[0-9]{6}'),
    CONSTRAINT ean    CHECK (ean_checkdigit(eanprefix, eancode))
);
這個例子創建一個在用戶定義類型 complex 和內部類型 point 之間做類型轉換的函數。該函數是用一個從 C 源代碼編譯的動態裝載的對象來實現的。對于 Postgres 而言,要自動尋找類型轉換函數,sql 函數必須和返回類型同名,而且不能重載。該函數名通過使用 SQL定義里 AS 子句的第二種類型來重載 
CREATE FUNCTION point(complex) RETURNS point
    AS '/home/bernie/pgsql/lib/complex.so', 'complex_to_point'
    LANGUAGE 'c';
該函數的 C 定義是: 
Point * complex_to_point (Complex *z)
{
        Point *p;

        p = (Point *) palloc(sizeof(Point));
        p->x = z->x;
        p->y = z->y;
                
        return p;
}
兼容性
SQL92
CREATE FUNCTION 是 Postgres 語言的擴展. 

SQL/PSM
注意: PSM 表示連續存儲模塊 (Persistent Stored Modules).它是一個過程化的語言,最初希望 PSM 將在1996年晚些時候正式批準為官方標準.但到了 1998年中,這些還沒有成為現實,但 PSM 有希望最終成為一個標準.
SQL/PSM CREATE FUNCTION 語法如下: 
CREATE FUNCTION name
    ( [ [ IN | OUT | INOUT ] type [, ...] ] )
     RETURNS rtype
     LANGUAGE 'langname'
     ESPECIFIC routine
     SQL-statement
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 久久国产一级 | 国内自拍网址 | 日本中文不卡视频 | av免费在线观看免费 | 日韩精品中文字幕在线播放 | av日韩在线免费观看 | 污视频在线免费 | 操碰97 | 小视频成人 | 性猛aa久久久 | 性高跟鞋xxxxhd4kvideos | 黄色特级视频 | 毛片视频播放 | 天天碰天天操 | 一区二区三区欧美在线观看 | 午夜精品在线视频 | 国产精品视频六区 | a级毛片免费观看在线播放 日本aaa一级片 | xx53xx | 在线成人免费视频 | 久久老司机精品视频 | 久久精品亚洲一区二区 | 91网址在线播放 | 羞羞电影在线观看 | 欧产日产国产精品乱噜噜 | 91在线播放国产 | 欧美日韩大片在线观看 | 久久国语对白 | 亚洲精品久久久久www | 一级黄片毛片免费看 | 亚洲影视中文字幕 | 久久久久亚洲a | 精品国产一区二区亚洲人成毛片 | 成年免费大片黄在线观看岛国 | 欧美成人一级片 | 成人 在线 | 中文日产幕无线码6区免费版 | 国产成人自拍av | 日本一道aⅴ不卡免费播放 久久久久久久高清 | 国产精品一区二区三区在线 | 香蕉成人在线视频 |