--例子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;
分享到:
相关推荐
特征将计算机的文件和目录元数据加载到PostgresSQL中,包括名称,大小,校验和散列以及诸如介质尺寸或长度之类的内容。 智能调度程序可对文件系统进行爬网以进行更改,以使目录数据保持数据库中的最新状态,而不会...
pg中创建函数时可以指定权限检测,有两个可选...我们现在数据库中有两个用户:超级用户postgres和普通用户bill。 接着我们用普通用户创建一个表,并在这个普通用户的表上创建触发器。当超级用户操作这个表,并触发了触
该插件目前支持mysql和postgres数据库。 插件在行动 用法 该插件提供了一个函数来调用完成表和列,以及一个方便的函数来轻松切换提供建议的数据库。 映射函数 您需要在插入模式下映射完整的函数。 这是一个例子。 ...
SQL对象像函数一样可组合 SQL在代码内部看起来更加自然 绑定跟踪已为您处理 值数组得到妥善处理 norm-sql有什么不同? 无需在javascript中设置架构副本,只需开始编写SQL 易于使用的表达逻辑运算符 易于适应...
Knex-Postgis SQL查询构建器中使用postgis函数的扩展。例子此示例显示扩展生成的sql。 const knex = require ( 'knex' ) ;const knexPostgis = require ( 'knex-postgis' ) ;const db = knex ( { client : 'postgres...
PostgreSQL gzip / gunzip函数 动机 有时,您只需要压缩bytea对象,然后再将其返回给客户端即可。 有时,您会从客户端收到压缩的bytea ,因此必须先对其进行解压缩,然后才能使用它。 此扩展用于此。 此扩展名不...
官方给出的指导意见是:当表的大小超过了数据库服务器的物理内存大小则应当使用分区表,接下来结合一个例子具体记录一下创建分区表的详细过程。 创建分区表 首先看一下需求,现在有一张日志表,现在需要按表中的操作...
这些函数的输入可以是pandas DataFrame或SQL连接(当前为postgres, DataFrame或sqlite)。 有关dplyr之类的工具背后的原理的更多信息,请参见本。 有关运行中的siuba的示例,请参见。安装pip install siuba例子...
一般我们都会用到窗口函数去解决这类问题,同样在pg中也支持窗口函数。 例子: 创建测试表,生成10000个分组,1000万条记录。 bill=# create table tbl(c1 int, c2 int, c3 int); CREATE TABLE bill=# create index ...