postgresSQL 函数的例子

--例子1:
--用函数实现将一个表中插入100条顺序数据 顺序:可以是时间或是序列都可以
CREATE OR REPLACE FUNCTION r_add()
RETURNS integer AS
$BODY$
DECLARE
r RECORD;
BEGIN

FOR r IN 1..100 LOOP
INSERT INTO d_table( d_id, d_name) VALUES (r, 'aa');
END LOOP;

return 0;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE
COST 100;
ALTER FUNCTION r_add() OWNER TO sqluser;


--例子2:
--在插入的列表中 每第10条记录 的字段中 做一个标记
CREATE OR REPLACE FUNCTION r_update()
RETURNS integer AS
$BODY$
DECLARE
_testvalue int := 0;
r RECORD;
sql varchar;
BEGIN
sql = $$ select d_id,d_name from d_table order by d_id $$;
FOR r IN EXECUTE sql LOOP
_testvalue := _testvalue+1;
if(_testvalue%10=0) then
update d_table set d_name = d_name||'标记' where d_id = r.d_id;
else
continue;
end if;
END LOOP;

return _testvalue;
END;
$BODY$
LANGUAGE 'plpgsql' V
OLATILE
COST 100;
ALTER FUNCTION r_update() OWNER TO sqluser;

--例子3:
--将修改过的记录存在一个备份表中 然后删除原来表中标记过的记录
CREATE OR REPLACE FUNCTION r_detele()
RETURNS integer AS
$BODY$
DECLARE
BEGIN
insert into d_table2 select d_id,d_name from d_table where d_name like '%标记%' order by d_id ;
delete from d_table where d_name like '%标记%';
return null;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE
COST 100;
ALTER FUNCTION r_detele() OWNER TO sqluser;

--例子4:
--把三个过程联立起来
--插入100条记录 循环标记每第10条to 1条记录 要求每次标记不同 并按顺序备份到 备份表中同时 清空原表
CREATE TABLE d_table
(
d_id integer,
d_name text
)
WITH (
OIDS=FALSE
);
ALTER TABLE d_table OWNER TO sqluser;

CREATE TABLE d_table2
(
d_id integer,
d_name text
)
WITH (
OIDS=FALSE
);
ALTER TABLE d_table2 OWNER TO sqluser;

-- Function: r_update()

-- DROP FUNCTION r_update();

CREATE OR REPLACE FUNCTION r_all()
RETURNS integer AS
$BODY$
DECLARE
i int;
l RECORD;
r RECORD;
n int := 10;
sql varchar;
BEGIN
--插入记录
FOR l IN 1..100 LOOP
INSERT INTO d_table( d_id, d_name) VALUES (l, 'aa');
END LOOP;
--按照规则标记
sql = $$ select d_id,d_name from d_table order by d_id $$;
--先循环最大整除数
while n > 0 LOOP
--每次循环需要重新获取结果集
FOR r IN EXECUTE sql LOOP
i := r.d_id;
if(i%n=0) then
--对一条记录的操作应该在同一个循环中完成
update d_table set d_name = d_name||'被'||n||'整除的标记' where d_id = r.d_id;
insert into d_table2 select d_id,d_name from d_table where d_id = r.d_id;
delete from d_table where d_id = r.d_id;
else
continue;
end if;
end loop;
--循环10次
n := n-1;
END LOOP;
return null;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE
COST 100;
ALTER FUNCTION r_all() OWNER TO sqluser;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值