现在的项目用到的是postgresql,之前的开发人员喜欢将逻辑之类的全部放在数据库层面进行,导致现在数据库中存在200多个函数,短的一两百行,长的到一千多行,实在是看的贼费力,只好一步步的进行学习。
pgsql的函数,大概的模板就是一个:
CREATE OR REPLACE FUNCTION function_name ( arg argtype,......)
RETURNS return_type<1> as
$$
DECLARE
定义变量;
BEGIN
body
return;
END;
$$
LANGUAGE PLPGSQL;
我现在主要说的只是在returns TABLE(name1 varchar,name2 varchar,phone bigint) as $BODY$和 returns setof record as $BODY$的区别
CREATE OR REPLACE FUNCTION "public"."test_fun3"()
RETURNS SETOF "pg_catalog"."record" AS $BODY$
BEGIN
return query
select stu.name as stuName,tea.teacher_name as teaName,tea.phone as phone
from student as stu left join teacher as tea on stu.teacher_id = tea.teacher_id;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100
ROWS 1000
/********************************************************/
CREATE OR REPLACE FUNCTION "public"."test_fun4"()
RETURNS TABLE("name1" varchar, "name2" varchar, "phone" int8) AS $BODY$
BEGIN
return query
(select stu.name as stuName,tea.teacher_name as teaName,tea.phone as phone
from student as stu left join teacher as tea on stu.teacher_id = tea.teacher_id );
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100
ROWS 1000
在调用test_fun3的时候,要select * from test_fun3() as (name1 varchar,name2 varchar,name3 bigint)这种调,中间的as暂时不知道是什么意思,随便写字母单词都行,就是要将as后面的那部分声明为record,我是这么理解的,不知道对不对。
在调用test_fun4的时候,select * from test_fun4() 这样就可以得出结果了,因为在内部已经声明好了。
这两种我个人比较喜欢第一种,调用的sql比较短一些。
第二种的话,个人感觉比较适合,多个接口都在调同一个,且返回的名称不同的时候调用。
能看到的,有什么不对的请指出来,初学pgsql函数,见谅。共进步