- 1、本文档共25页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Greenplum函数开发_V1.0
学习 ·创造 ·超越 · 共享
Greenplum-PL/pgSQL开发
P9平台组
林舒杨
PL/pgSQL过程语言
?标准PostgreSQL支持四种过程语言
? PL/pgSQL
? PL/Tcl
? PL/Perl
? PL/Python
?用户可以定义其它语言
?PL/pgSQL所支持的功能最为丰富
PL/pgSQL块结构
[ label ]
[ DECLARE
declarations ]
BEGIN
statements
END;
PL/pgSQL函数结构
CREATE OR REPLACE FUNCTION somefunc() RETURNS integer AS $$
DECLARE
quantity integer := 30;
BEGIN
RAISE NOTICE Quantity here is %, quantity;
quantity := 50;
DECLARE
quantity integer := 80;
BEGIN
RAISE NOTICE Quantity here is %, quantity;
END;
RAISE NOTICE Quantity here is %, quantity;
RETURN quantity;
END;
$$ LANGUAGE plpgsql IMMUTABLE;
quantity=30
quantity=80
quantity=50
函数属性
?IMMUTABLE
? 该函数在同样的参数值下总返回相同的结果
?STABLE
? 表示在一次表扫描里,对于相同的参数值,该
函数将返回相同的值
?VOLATILE
? 该函数值可以在一次表扫描内改变,因此不会
做任何优化
注释
?行注释
-- comment
?块注释
/*
…
*/
声明
?变量声明语法:
name [ CONSTANT ] type [ NOT NULL ]
[ { DEFAULT | := } expression ];
?CONSTANT
? 避免了该变量值被修改
?NOT NULL
? 赋予该变量NULL值将导致一个运行时错误。
? 所有声明为NOT NULL的变量还必须声明一个
非空的缺省值。
变量类型
?拷贝类型
? name variable%TYPE
?行类型
? name table_name%ROWTYPE;
?记录类型
? name RECORD;
? 无预定义结构
? SELECT/FOR命令中获取实际的行结构
基本语句
?赋值
? identIFier := expression;
?SELECT INTO
? SELECT INTO target select_expressions
FROM …;
? 判断是否查询到记录
SELECT INTO myrec * FROM emp WHERE empname =
myname;
IF NOT FOUND THEN
RAISE EXCEPTION employee % not found,
myname;
END IF;
执行动态命令
?EXECUTE command-string;
?不能使用SELECT INTO语法
?可使用FOR-IN-EXECUTE语法获取查询结
果
?获取结果状态
? GET DIAGNOSTICS var_integer = ROW_COUNT;
控制结构 - 从函数返回
?RETURN
? RETURN expression;
?RETURN NEXT
? 函数声明为返回:SETOF type
? 要返回的项在 RETURN NEXT 命令中声明
? 最后使用不带参数的RETURN结束函数执行
? 调用方法:SELECT * FROM some_func();
控制结构 – RETURN NEXT
条件
?IF…THEN…END IF;
?IF…THEN…ELSE…END IF;
?IF…THEN…ELSEIF…END IF;
?IF…THEN…ELSIF…THEN…ELSE…END IF;
?IF…THEN…ELSEIF…THEN…ELSE…END IF;
循环 - LOOP
[label]
LOOP
statements
END LOOP;
?LOOP定义一个无条件的无限循环
?由EXIT或者RETURN语句终止
循环 - WHILE
[label]
WHILE expression LOOP
statements
END LOOP;
WHILE amount_owed 0 AND gift_certificate_balance 0
LOOP
-- DO SOMETHING
END LOOP;
WHILE NOT BOOLEAN_expression LOOP
--
您可能关注的文档
- EMC PowerPathVE的简单测试.pdf
- EMI drive by PI.pdf
- EMPIRICAL EXCHANGE RATE MODELS OF THE SEVENTIES.pdf
- EMERSON R系列质量流量计.pdf
- EG-Declaration example_KE_seat_control_valve-1935_2004_e.pdf
- EMH2T2R;UMH2NTN;中文规格书,Datasheet资料.pdf
- Ended March 31,2008 Head OfficeSumitomo Fudosan Ueno.pdf
- Endoscopic Sphincterotomy for Lemmel Syndrome presenting with Severe Acute Pancreatitis --A Case Rep.pdf
- Energy Conservation in Datacenters through Cluster Memory Management and Barely-Alive Memory Servers.pdf
- Energy Efficient Ethernet.pdf
文档评论(0)