function中使用动态sql和游标
2015-04-27 21:56
381 查看
create table test(id int,name text);
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;
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;
相关文章推荐
- 如何在定义游标的时候使用动态sql语句?
- 【原创】定义游标时使用动态SQL语句
- oracle pl/sql 入门+ 数组使用+游标+动态SQL
- 如何在定义游标的时候使用动态sql语句?
- 如何在定义游标的时候使用动态sql语句
- 删除所有的用户表,存储过程,游标的应用,动态SQL的使用
- 删除所有的用户表,存储过程,游标的应用,动态SQL的使用
- 在PL/SQL使用游标获取数据及动态SQL
- 游标变量、动态sql及变量绑定的使用
- 游标使用 和sp_executesql动态sql
- 如何在游标for循环中使用动态SQL语句?
- 如何在游标for循环中使用动态SQL语句?
- Sql Server游标使用 exec函数执行动态sql
- 在PL/SQL中使用游标、动态sql和绑定变量的小例子
- ORACLE动态游标及动态SQL使用实例
- 为表添加排序字段 (动态SQL、游标的使用)
- MS-SQL 动态sql使用游标
- 定义游标时使用动态SQL
- 游标变量、动态sql及变量绑定的使用
- 使用DBMS_SQL实现动态sql游标