语法:


CREATE [OR REPLACE] FUNCTION function_name (arguments)
RETURNS return_datatype AS $variable_name$
DECLARE
declaration;
[...]
BEGIN
< function_body >
[...]
RETURN { variable_name | value }
END; LANGUAGE plpgsql;

参数说明

  • function_name:指定函数的名称。
  • [OR REPLACE]:是可选的,它允许您修改/替换现有函数。
  • RETURN:它指定要从函数返回的数据类型。它可以是基础,复合或域类型,或者也可以引用表列的类型。
  • function_bodyfunction_body包含可执行部分。
  • plpgsql:它指定实现该函数的语言的名称
#时间函数
CREATE OR REPLACE FUNCTION "public"."addtime"(difftype varchar, incrementvalue int4, inputdate timestamptz)
RETURNS "pg_catalog"."timestamp" AS $BODY$
DECLARE
YEAR_CONST Char(15) := 'year';
MONTH_CONST Char(15) := 'month';
WEEK_CONST Char(15) := 'week';
DAY_CONST Char(15) := 'day';
HOUR_CONST Char(15) := 'hour';
MIN_CONST Char(15) :='mi';
SECOND_CONST Char(15) :='ss';
dateTemp timestamp;
intervals interval;
BEGIN
IF lower($1) = lower(YEAR_CONST) THEN
select cast(cast(incrementvalue as character varying) || ' year' as interval) into intervals;
ELSEIF lower($1) = lower(MONTH_CONST) THEN
select cast(cast(incrementvalue as character varying) || ' months' as interval) into intervals;
ELSEIF lower($1) = lower(WEEK_CONST) THEN
select cast(cast(incrementvalue as character varying) || ' week' as interval) into intervals;
ELSEIF lower($1) = lower(DAY_CONST) THEN
select cast(cast(incrementvalue as character varying) || ' day' as interval) into intervals;
ELSEIF lower($1) = lower(HOUR_CONST) THEN
select cast(cast(incrementvalue as character varying) || ' hour' as interval) into intervals;
ELSEIF lower($1) = lower(MIN_CONST) THEN
select cast(cast(incrementvalue as character varying) || ' minute' as interval) into intervals;
ELSEIF lower($1) = lower(SECOND_CONST) THEN
select cast(cast(incrementvalue as character varying) || ' second' as interval) into intervals;
END IF; dateTemp:= inputdate + intervals; RETURN dateTemp;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE COST 100
;
CREATE OR REPLACE FUNCTION "public"."end_purchase_price"(refcursor)
RETURNS "pg_catalog"."refcursor" AS $BODY$
begin
open $1 for
SELECT p1.name_template,p2.material,p2.cust_spec,p0.price_unit::double precision,p3.name
FROM purchase_origin_line p0
LEFT JOIN product_product p1 ON p0.product_id=p1.id
LEFT JOIN product_template p2 ON p1.product_tmpl_id=p2.id
LEFT JOIN product_uom p3 ON p2.uom_id=p3.id
WHERE p2.active ='t' AND p0.id IN ( SELECT MAX(id)
FROM purchase_origin_line
where state<>'cancel' AND product_id >0
GROUP BY product_id
);
return $1;
end;
$BODY$
LANGUAGE 'plpgsql' VOLATILE COST 100
;
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)
RETURNS "pg_catalog"."refcursor" AS $BODY$
BEGIN
if gxstateid=3 then
open $1 for EXECUTE'
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
left join mrp_production_report t1 on t0.id=t1.workname
left join mrp_production_report_line t2 on t1.id=t2.line_id and t0.id=t2.lworkname
left join product_product t3 on t0.product_id=t3.id
left join product_template t4 on t3.product_tmpl_id=t4.id
left join mrp_production_report_lot t5 on t5.id=t2.lot_id
left join mrp_routing_workcenter t6 on t6.id=t2.lprocedure
left join res_users t7 on t7.id=t2.lemployee
left join res_partner t8 on t8.id=t7.partner_id
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
left join product_product t2 on t1.product_id=t2.id
left join product_template t3 on t3.id=t2.product_tmpl_id)t9 on t9.id=t0.bom_id
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''
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;';
ELSE
open $1 for EXECUTE'
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
left join mrp_production_report t1 on t0.id=t1.workname
left join mrp_production_report_line t2 on t1.id=t2.line_id and t0.id=t2.lworkname
left join product_product t3 on t0.product_id=t3.id
left join product_template t4 on t3.product_tmpl_id=t4.id
left join mrp_production_report_lot t5 on t5.id=t2.lot_id
left join mrp_routing_workcenter t6 on t6.id=t2.lprocedure
left join res_users t7 on t7.id=t2.lemployee
left join res_partner t8 on t8.id=t7.partner_id
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
left join product_product t2 on t1.product_id=t2.id
left join product_template t3 on t3.id=t2.product_tmpl_id)t9 on t9.id=t0.bom_id
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''
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;';
end if;
return $1;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE COST 100
;

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. 关于scanf与cin哪个快的问题

    一开始入c++的时候成天跑cin,cout 直到有一天用cin,cout超时 才知道scanf比cin快的多 但是后来又听说加了ios::sync_with_stdio(false);的cin跟飞一样 ...

  2. 【读书笔记】iOS-设置应用的硬件需求

    如果你的应用需要一些特定的硬件设备才能运行,你可以在应用的Info.plist文件中添加应用运行所需的硬件列表.如果设备上没有这些硬件的话,你的应用将不会启动. 如图,找到Info.Plist---& ...

  3. Azure Ubuntu18.04安装lxde桌面记录,Windows远程连接Ubuntu18.04(Linux)

    执行如下命令: 尽量按以下顺序执行,否则可能会发生意向不到的问题(坑) 1.更新数据源 sudo apt-get update 2.更新安装包 sudo apt-get upgrade 3.安装lxd ...

  4. C# winform三种定时方法

    1. 直接用winform 的 timers 拖控件进去 代码 public partial class Form1 : Form     {         public Form1()       ...

  5. 洗礼灵魂,修炼python(14)--模块decimal, fractions,operator,collections以及精度介绍

    decimal 1.作用: 用于浮点数计算.相比内置的二进制浮点数实现 float这个类型有助于 金融应用和其它需要精确十进制表达的场合,控制精度,控制舍入以适应法律或者规定要求,确保十进制数位精度, ...

  6. eclipse中SVN报错解决

    在Eclipse市场上安装完SVN插件后连接SVN时出现以下错误: SVN: '0x00400006: Validate Repository Location' operation finished ...

  7. 4.7 Sublime Text3 中配置 Python环境 --之上安装Sublime 3

    返回总目录 目录: 1.展示效果: 2.缺优分析: 3.下载Sublime Text3 (一)展示效果: 1.能够交互式编写Python代码: 2.可以编写文件式Python代码: 3.能够自动补齐代 ...

  8. JavaScript中遍历数组和对象的方法

    js数组遍历和对象遍历 针对js各种遍历作一个总结分析,从类型用处,分析数组和对象各种遍历使用场景,优缺点等 JS数组遍历: 1,普通for循环,经常用的数组遍历 var arr = [1,2,0,3 ...

  9. Android 用webService产生java.lang.ClassCastException: org.ksoap2.serialization.SoapPrimitive错误的解决(转)

    在做android  Webservice开发的时候一般情况下大家接受webservice服务器返回值的时候都是使用 SoapObject soapObject = (SoapObject) enve ...

  10. 需求规格说明书——阿里八八“好记”APP

    工作流程 ① 组长查阅相关文档.示例文件等,根据本小组项目特点进行定制需求规格说明书目录. ② 根据选题报告工作进行任务分配,追求工作量最小化.效率最大化. ③ 分工编辑文档. ④ 组长搭建Githu ...