function中使用动态sql和游标

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;



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在设计 SQL Server 网上购物系统时,游标和函数是非常有用的工具。游标可用于处理一系列数据行,而函数可用于执行特定的操作并返回结果。 以下是创建游标和函数的步骤: 创建游标: 1. 使用 DECLARE 语句声明游标变量,并指定要查询的数据集。 2. 使用 OPEN 语句打开游标并将游标指向数据集的第一行。 3. 使用 FETCH 语句检索当前游标指向的行,并将该行的数据存储到变量。 4. 使用 WHILE 循环遍历游标,直到到达数据集的末尾。 5. 在处理完数据后,使用 CLOSE 和 DEALLOCATE 语句关闭游标。 以下是一个示例创建游标的 SQL 代码: ``` DECLARE @ProductName varchar(100) DECLARE @ProductPrice money DECLARE ProductCursor CURSOR FOR SELECT ProductName, ProductPrice FROM Products OPEN ProductCursor FETCH NEXT FROM ProductCursor INTO @ProductName, @ProductPrice WHILE @@FETCH_STATUS = 0 BEGIN PRINT 'Product name: ' + @ProductName PRINT 'Product price: ' + CAST(@ProductPrice AS varchar(20)) FETCH NEXT FROM ProductCursor INTO @ProductName, @ProductPrice END CLOSE ProductCursor DEALLOCATE ProductCursor ``` 创建函数: 1. 使用 CREATE FUNCTION 语句创建函数。 2. 在函数编写 SQL 代码,执行特定的操作。 3. 使用 RETURN 语句返回结果。 以下是一个示例创建函数的 SQL 代码: ``` CREATE FUNCTION GetProductCountByCategory ( @CategoryName varchar(50) ) RETURNS int AS BEGIN DECLARE @ProductCount int SELECT @ProductCount = COUNT(*) FROM Products WHERE CategoryName = @CategoryName RETURN @ProductCount END ``` 在以上示例,函数名为 GetProductCountByCategory,它接收一个参数 CategoryName,并返回该类别下的产品数量。在函数使用 COUNT 函数计算产品数量,并将结果存储在变量 @ProductCount ,最后使用 RETURN 语句返回结果。 总的来说,游标和函数都是非常有用的 SQL Server 工具,可以帮助您更好地处理数据和执行特定的操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值