insert into test(id) values(generate_series(1,10));
select * from test;
输出结果:
highgo=# select * from test;
id | name
----+------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
(10 行记录)
--create
create or replace function delete_insert_value(tablename varchar(240),idname varchar(240))
returns void as $$
declare
sqlstring varchar(240);
mycur refcursor;
id int;
name text;
begin
sqlstring='delete from "'||tablename||'" where "'||idname||'" between 5 and 10;';
execute sqlstring;--支持动态sql语句
open mycur for select * from test;--支持游标的使用
fetch next from mycur into id;
insert into test(name) values('xu');
close mycur;
end;
$$ language plpgsql;
--use function
select delete_insert_value('test','id');
select * from test;
输出结果:
highgo=# select delete_insert_value('test','id');
delete_insert_value
---------------------
(1 行记录)
highgo=# select * from test;
id | name
----+------
1 |
2 |
3 |
4 |
| xu
(5 行记录)
--alter
alter function delete_insert_value(varchar,varchar) rename to delete_insert_value_new;
--view the structure
SELECT n.nspname as "Schema",p.proname as "Name",pg_catalog.pg_get_function_result(p.oid) as "Result data type",pg_catalog.pg_get_function_arguments(p.oid) as "Argument data types",
CASE
WHEN p.proisagg THEN 'agg'
WHEN p.proiswindow THEN 'window'
WHEN p.prorettype = 'pg_catalog.trigger'::pg_catalog.regtype THEN 'trigger'
ELSE 'normal'
END as "Type"
FROM pg_catalog.pg_proc p LEFT JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace WHERE p.proname ~ '^(delete_insert_value_new)$'
AND pg_catalog.pg_function_is_visible(p.oid) ORDER BY 1, 2, 4;
输出结果:
Schema | Name | Result data type | Argument data types | Type
--------+-------------------------+------------------+-------------------------------------------------------+--------
public | delete_insert_value_new | void | tablename character varying, idname character varying | normal
(1 行记录)
--drop
drop function delete_insert_value_new(varchar,varchar);
drop table test;