1.  

语法:

  1.  
  1. CREATE [OR REPLACE] FUNCTION function_name (arguments)
  2. RETURNS return_datatype AS $variable_name$
  3. DECLARE
  4. declaration;
  5. [...]
  6. BEGIN
  7. < function_body >
  8. [...]
  9. RETURN { variable_name | value }
  10. END; LANGUAGE plpgsql;

参数说明

  • function_name:指定函数的名称。
  • [OR REPLACE]:是可选的,它允许您修改/替换现有函数。
  • RETURN:它指定要从函数返回的数据类型。它可以是基础,复合或域类型,或者也可以引用表列的类型。
  • function_bodyfunction_body包含可执行部分。
  • plpgsql:它指定实现该函数的语言的名称
  1. #时间函数
    CREATE OR REPLACE FUNCTION "public"."addtime"(difftype varchar, incrementvalue int4, inputdate timestamptz)
  2. RETURNS "pg_catalog"."timestamp" AS $BODY$
  3. DECLARE
  4. YEAR_CONST Char(15) := 'year';
  5. MONTH_CONST Char(15) := 'month';
  6. WEEK_CONST Char(15) := 'week';
  7. DAY_CONST Char(15) := 'day';
  8. HOUR_CONST Char(15) := 'hour';
  9. MIN_CONST Char(15) :='mi';
  10. SECOND_CONST Char(15) :='ss';
  11. dateTemp timestamp;
  12. intervals interval;
  13. BEGIN
  14. IF lower($1) = lower(YEAR_CONST) THEN
  15. select cast(cast(incrementvalue as character varying) || ' year' as interval) into intervals;
  16. ELSEIF lower($1) = lower(MONTH_CONST) THEN
  17. select cast(cast(incrementvalue as character varying) || ' months' as interval) into intervals;
  18. ELSEIF lower($1) = lower(WEEK_CONST) THEN
  19. select cast(cast(incrementvalue as character varying) || ' week' as interval) into intervals;
  20. ELSEIF lower($1) = lower(DAY_CONST) THEN
  21. select cast(cast(incrementvalue as character varying) || ' day' as interval) into intervals;
  22. ELSEIF lower($1) = lower(HOUR_CONST) THEN
  23. select cast(cast(incrementvalue as character varying) || ' hour' as interval) into intervals;
  24. ELSEIF lower($1) = lower(MIN_CONST) THEN
  25. select cast(cast(incrementvalue as character varying) || ' minute' as interval) into intervals;
  26. ELSEIF lower($1) = lower(SECOND_CONST) THEN
  27. select cast(cast(incrementvalue as character varying) || ' second' as interval) into intervals;
  28. END IF;
  29.  
  30. dateTemp:= inputdate + intervals;
  31.  
  32. RETURN dateTemp;
  33. END;
  34. $BODY$
  35. LANGUAGE 'plpgsql' VOLATILE COST 100
  36. ;
  1. CREATE OR REPLACE FUNCTION "public"."end_purchase_price"(refcursor)
  2. RETURNS "pg_catalog"."refcursor" AS $BODY$
  3. begin
  4. open $1 for
  5. SELECT p1.name_template,p2.material,p2.cust_spec,p0.price_unit::double precision,p3.name
  6. FROM purchase_origin_line p0
  7. LEFT JOIN product_product p1 ON p0.product_id=p1.id
  8. LEFT JOIN product_template p2 ON p1.product_tmpl_id=p2.id
  9. LEFT JOIN product_uom p3 ON p2.uom_id=p3.id
  10. WHERE p2.active ='t' AND p0.id IN ( SELECT MAX(id)
  11. FROM purchase_origin_line
  12. where state<>'cancel' AND product_id >0
  13. GROUP BY product_id
  14. );
  15. return $1;
  16. end;
  17. $BODY$
  18. LANGUAGE 'plpgsql' VOLATILE COST 100
  19. ;
  1. CREATE OR REPLACE FUNCTION "public"."prod_line_zd"( refcursor, gsid int4, sd varchar, ed varchar, gxstateid int4, workname varchar, lotname varchar, ename varchar, pname varchar, pgg varchar, gxname varchar)
  2. RETURNS "pg_catalog"."refcursor" AS $BODY$
  3. BEGIN
  4. if gxstateid=3 then
  5. open $1 for EXECUTE'
  6. select t2.sequence,to_char(timeadd(''hour'',8,t1.date),''yyyy-mm-dd''),t3.name_template,t4.material,t4.cust_spec,t0.name workname,t5.name lotname,t2.lqty_ok,t2.lkgweight,t2.lqty,t2.lqty_no,t7.login,t8.name,t6.sequence,t6.name,t6.produce_description,case t2.lstate when 1 then ''领'' else ''交'' end,t1.name,t9.name_template,t9.cust_spec,t2.lremark from mrp_production t0
  7. left join mrp_production_report t1 on t0.id=t1.workname
  8. left join mrp_production_report_line t2 on t1.id=t2.line_id and t0.id=t2.lworkname
  9. left join product_product t3 on t0.product_id=t3.id
  10. left join product_template t4 on t3.product_tmpl_id=t4.id
  11. left join mrp_production_report_lot t5 on t5.id=t2.lot_id
  12. left join mrp_routing_workcenter t6 on t6.id=t2.lprocedure
  13. left join res_users t7 on t7.id=t2.lemployee
  14. left join res_partner t8 on t8.id=t7.partner_id
  15. left join (select t0.id,t2.name_template,t3.material,t3.cust_spec from mrp_bom t0 left join mrp_bom_line t1 on t0.id=t1.bom_id
  16. left join product_product t2 on t1.product_id=t2.id
  17. left join product_template t3 on t3.id=t2.product_tmpl_id)t9 on t9.id=t0.bom_id
  18. where t0.company_id='|| gsid ||' and timeadd(''hour'',8,t1.date)>='''|| sd ||''' and timeadd(''hour'',8,t1.date)<='''|| ed ||''' and exists(select 1 from mrp_production_report where workname=t0.id) and t0.state<>''cancel''
  19. and t0.name like ''%'|| workname ||'%'' and t5.name like ''%'|| lotname ||'%'' and t8.name like ''%'|| ename ||'%'' and t3.name_template like ''%'|| pname ||'%'' and t4.cust_spec like ''%'|| pgg ||'%''and t6.name like ''%'|| gxname ||'%'' order by t1.date,t1.name,t2.sequence;';
  20. ELSE
  21. open $1 for EXECUTE'
  22. select t2.sequence,to_char(timeadd(''hour'',8,t1.date),''yyyy-mm-dd''),t3.name_template,t4.material,t4.cust_spec,t0.name workname,t5.name lotname,t2.lqty_ok,t2.lkgweight,t2.lqty,t2.lqty_no,t7.login,t8.name,t6.sequence,t6.name,t6.produce_description,case t2.lstate when 1 then ''领'' else ''交'' end,t1.name,t9.name_template,t9.cust_spec,t2.lremark from mrp_production t0
  23. left join mrp_production_report t1 on t0.id=t1.workname
  24. left join mrp_production_report_line t2 on t1.id=t2.line_id and t0.id=t2.lworkname
  25. left join product_product t3 on t0.product_id=t3.id
  26. left join product_template t4 on t3.product_tmpl_id=t4.id
  27. left join mrp_production_report_lot t5 on t5.id=t2.lot_id
  28. left join mrp_routing_workcenter t6 on t6.id=t2.lprocedure
  29. left join res_users t7 on t7.id=t2.lemployee
  30. left join res_partner t8 on t8.id=t7.partner_id
  31. left join (select t0.id,t2.name_template,t3.material,t3.cust_spec from mrp_bom t0 left join mrp_bom_line t1 on t0.id=t1.bom_id
  32. left join product_product t2 on t1.product_id=t2.id
  33. left join product_template t3 on t3.id=t2.product_tmpl_id)t9 on t9.id=t0.bom_id
  34. where t0.company_id='|| gsid ||' and timeadd(''hour'',8,t1.date)>='''|| sd ||''' and timeadd(''hour'',8,t1.date)<='''|| ed ||''' and t2.lstate='|| gxstateid ||' and exists(select 1 from mrp_production_report where workname=t0.id) and t0.state<>''cancel''
  35. and t0.name like ''%'|| workname ||'%'' and t5.name like ''%'|| lotname ||'%'' and t8.name like ''%'|| ename ||'%'' and t3.name_template like ''%'|| pname ||'%'' and t4.cust_spec like ''%'|| pgg ||'%''and t6.name like ''%'|| gxname ||'%'' order by t1.date,t1.name,t2.sequence;';
  36. end if;
  37. return $1;
  38. END;
  39. $BODY$
  40. LANGUAGE 'plpgsql' VOLATILE COST 100
  41. ;

sql函数创建的更多相关文章

  1. SQL函数创建错误

    [Err] 1418 - This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration a ...

  2. SQL server 创建 修改表格 及表格基本增删改查 及 高级查询 及 (数学、字符串、日期时间)函数[转]

    SQL server 创建 修改表格 及表格基本增删改查 及 高级查询 及 (数学.字符串.日期时间)函数   --创建表格 create table aa ( UserName varchar(50 ...

  3. SQL语句-创建索引

    语法:CREATE [索引类型] INDEX 索引名称ON 表名(列名)WITH FILLFACTOR = 填充因子值0~100 GO USE 库名GO IF EXISTS (SELECT * FRO ...

  4. SQL函数说明大全

    一旦成功地从表中检索出数据,就需要进一步操纵这些数据,以获得有用或有意义的结果.这些要求包括:执行计算与数学运算.转换数据.解析数值.组合值和聚合一个范围内的值等. 下表给出了T-SQL函数的类别和描 ...

  5. 使用sql语句创建修改SQL Server标识列(即自动增长列)

    一.标识列的定义以及特点SQL Server中的标识列又称标识符列,习惯上又叫自增列.该种列具有以下三种特点:1.列的数据类型为不带小数的数值类型2.在进行插入(Insert)操作时,该列的值是由系统 ...

  6. oracle的sql函数

    只读事务set transaction read only当一个用户添加了只读事务,则查询时只会查到设置只读事务之前的内容,在并发量大的系统中,通过设置只读事务 便于统计 oracle的sql函数的使 ...

  7. SQL函数说明大全 (转)

    一旦成功地从表中检索出数据,就需要进一步操纵这些数据,以获得有用或有意义的结果.这些要求包括:执行计算与数学运算.转换数据.解析数值.组合值和聚合一个范围内的值等. 下表给出了T-SQL函数的类别和描 ...

  8. 在SQL中使用PL/SQL函数存在的问题

    -----------------------------Cryking原创------------------------------ -----------------------转载请注明出处, ...

  9. sql函数(转)

    一旦成功地从表中检索出数据,就需要进一步操纵这些数据,以获得有用或有意义的结果.这些要求包括:执行计算与数学运算.转换数据.解析数值.组合值和聚合一个范围内的值等. 下表给出了T-SQL函数的类别和描 ...

随机推荐

  1. 正则与python的re模块

    一.正则表达式的语法 正则表达式使用反斜杠字符('\')来表示特殊的形式或者来允许使用特殊的字符而不要启用它们特殊的含义.这与字符串字面值中相同目的的相同字符的用法冲突:例如,要匹配一个反斜线字面值, ...

  2. 【代码笔记】Web-JavaScript-JavaScript注释

    一,效果图. 二,代码. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...

  3. 【读书笔记】iOS-加速计与陀螺仪

    一,数据的“滤波” 直接从加速度计获得的原始数据,往往不能直接使用,而是需要去除一些干扰数据,这个过程称为“滤波”.“滤波”一词来源于无线电技术中对无线电信号的处理过程.事实上从数学角度而言它们是一样 ...

  4. asp.net core中IHttpContextAccessor和HttpContextAccessor的妙用

    分享一篇文章,关于asp.net core中httpcontext的拓展. 现在,试图围绕HttpContext.Current构建你的代码真的不是一个好主意,但是我想如果你正在迁移一个企业类型的应用 ...

  5. 工作中常用到的Vim命令

    最近工作中需要到linux服务器上更改文件,苦于对vim的各种命令不熟悉,今天特此总结并熟悉一下各种vim命令,好提高工作效率.后期持续更新 vim编辑器个人设置 先复制一份vim配置模板到个人目录下 ...

  6. zookeeper.Net

    原文转至:http://www.cnblogs.com/shanyou/p/3221990.html 之前整理过一篇文章<zookeeper 分布式锁服务>,本文介绍的 Zookeeper ...

  7. aws s3文件上传设置accesskey、secretkey、sessiontoken

    背景: 最近跟进的项目会封装aws S3资源管理细节,对外提供获取文件上传凭证的API,业务方使用获取到的凭证信息直接请求aws进行文件上传.因此,测试过程需要验证S3文件上传的有效性.aws官网有提 ...

  8. 三步搞定Centos 7 上特定版本的 docker 安装

    由于国内网络原因,使用centos的用户yum源常用国内的阿里云.现在把centos7上安装docker的详细过程记录如下: 一.配置centos7的yum源(阿里云) 1.cd  /etc/yum. ...

  9. 洗礼灵魂,修炼python(50)--爬虫篇—基础认识

    爬虫 1.什么是爬虫 爬虫就是昆虫一类的其中一个爬行物种,擅长爬行. 哈哈,开玩笑,在编程里,爬虫其实全名叫网络爬虫,网络爬虫,又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者 ...

  10. 如何猜出 Y combinator

    先约定几个记号: 定义用一个冒号加等号表示":=", 表达式全等用两个等号表示"==", 归约意义上的相等用一个等号表示"="," ...