Postgresql function

Postgresql function,第1张

概述语法 CREATE [ OR REPLACE ] FUNCTION name ( [ [ argmode ] [ argname ] argtype [ { DEFAULT | = } default_expr ] [, ...] ] ) [ RETURNS rettype | RETURNS TABLE ( column_name column_type [, ... 语法
CREATE [ OR REPLACE ] FUNCTION    name ( [ [ argmode ] [ argname ] argtype [ { DEFAulT | = } default_expr ] [,...] ] )    [ RETURNS rettype      | RETURNS table ( column_name column_type [,...] ) ]  { LANGUAGE lang_name    | WINDOW    | IMMUtable | Stable | VolATILE | [ NOT ] LEAKPROOF    | CALLED ON NulL input | RETURNS NulL ON NulL input | STRICT    | [ EXTERNAL ] Security INVOKER | [ EXTERNAL ] Security defineR    | COST execution_cost    | ROWS result_rows    | SET configuration_parameter { TO value | = value | FROM CURRENT }    | AS 'deFinition'    | AS 'obj_file','link_symbol'  } ...    [ WITH ( attribute [,...] ) ]

注:中括号[]表示可选,有没有都行;大括号{ | }表示必选且只能选一个,选项用|分隔;省略号...表示重复前面的项;小括号()跟前面三个不一样,这个就是函数后面的括号。

其中:

name 为函数名,可以带上schema进行限定;

argmode 为参数模式,in out inout或VARIADIC;argname就是参数名字;argtype是参数类型。值得注意的是,argmode和argname都是可以省略的,argmod省略后默认是IN,argname省略后用,去获取;

rettype 返回值类型,这个跟out作用相似,两者在使用的时候会有一定冲突,需要注意;

language lang_name 包括sql、plpgsql等,不同的语言决定了函数体的写法;

as 后就可以跟函数体了。

另外,在些函数体开始和结束的时候一般会看到$ $符号,所有被$ $包起来的字符串都是常量字符串,其中的任何字符都不需要转义,包括$本身,另外$符号中间还可以加tag,如$body$,这个tag的目的是为了识别字符串常量的开始和结束,这样也方便进行常量字符串的嵌套。

例子
CREATE FUNCTION dup(in int,out f1 int,out f2 text)    AS $$ SELECT ,CAST( AS text) || ' is text' $$    LANGUAGE sql;SELECT * FROM dup(42);

注:||是字符串连接符


CREATE FUNCTION check_password(uname TEXT,pass TEXT)RETURNS BOolEAN AS $$DECLARE passed BOolEAN;BEGIN        SELECT  (pwd = ) INTO passed        FROM    pwds        WHERE   username = ;        RETURN passed;END;$$  LANGUAGE plpgsql    Security defineR    -- Set a secure search_path: trusted schema(s),then 'pg_temp'.    SET search_path = admin,pg_temp;

注:

1、plpsql的函数体的基本结构是declare --声明表量(不声明不能用)-- begin --函数体-- end

2、需要有return

create or replace function demo(IN startDate date,IN endDate date) returns setof date as	$body$	declare		days int;		d int;		wd workdays%rowtype;	begin		select (endDate - startDate) into days;		for d in 0..days loop			execute 'insert into workdays select ('''||startDate||'''::date+'||d||')';		end loop;		for wd in select * from workdays loop			return next wd;		end loop;	end	$body$	language plpgsql;select * from demo('20141220','20141225');

CREATE OR REPLACE FUNCTION insert_new_item()  RETURNS trigger AS$BODY$declare	maxorder int;	count int;begin	select count(1) from demo into count;	if(count = 0) then		NEW.torder := 0;	else		select max(torder) from demo into maxorder;		NEW.torder := maxorder + 1;	end if;	return NEW;end$BODY$  LANGUAGE plpgsql VolATILE  COST 100;ALTER FUNCTION insert_new_item()  OWNER TO postgres;
CREATE OR REPLACE FUNCTION test_func()  RETURNS table(lID character varying,mID character varying) AS$BODY$begin	return query select layerID,mAPId from map_layers;end;$BODY$  LANGUAGE plpgsql VolATILE  COST 100  ROWS 1000;ALTER FUNCTION test_func()  OWNER TO postgres;
参考

PostgreSQL 9.3.5 Documentation:CREATE FUNCTION

简单的Postgresql RETURN NEXT 应用

PostgreSQL的存储过程简单入门

 总结

以上是内存溢出为你收集整理的Postgresql function全部内容,希望文章能够帮你解决Postgresql function所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1176492.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存