zoukankan      html  css  js  c++  java
  • postgres函数之游标

      现有一临时数据表,需要将里面的数据查询出特定的记录Id并根据id更新到实际表中。现在各种查资料终于拼接起来了这个函数。不过话说,postgres都不区分函数与存储过程的么?都是create function,mysql我记得都是区分开的吧。

      SQL开始:前面的声明即为create function updateArea() RETURNS updateRecord AS  $$  

      create function updateArea() RETURNS int AS  $$ 
    1
    DECLARE updateRecord int; court VARCHAR ; building VARCHAR ; unit VARCHAR ; floors VARCHAR ; room VARCHAR ; tmparea VARCHAR ; roomid INT ; 2 curs1 refcursor ;  --声明游标,我之前用cursor报错,然后换refcursor 3 BEGIN 4 OPEN curs1 FOR EXECUTE 'SELECT court,building,unit,FLOOR,room,area FROM sp_temp' ;   --这里的execute后接的需要加引号 5 updateRecord := 1;  --预定义原始值,orcal的写法 := 6 loop 7 FETCH curs1 INTO court, building,unit,floors,room,tmparea ; 8 SELECT 9 room_id INTO roomid 10 FROM 11 view_structure_all 12 WHERE 13 court_name = court 14 AND building_name = building 15 AND unit_name = unit 16 AND floor_nickname = floors 17 AND room_name = room; 18 if found then --当找到时,当初省略了这句一直在查询,没有结果 19 raise notice '%',roomid; --给与输出提示,%占位符 20 update sp_room set area = CAST(tmparea as DECIMAL(12,4)) where room_id = roomid; 21 updateRecord = updateRecord + 1; 22 else exit; 23 end if; 24 end loop; 25   close curs1;   --记得关闭游标 26 return updateRecord; 27 end;
      $$ language plpgsql

      之前还准备用php来查询然后foreach执行update的,但是决定还是用sql直接写函数,不多写写都忘记咯。

    jeyfang
  • 相关阅读:
    LR三:post接口_ajax上传
    LR二:post接口_form表单上传
    Dijkstra优先队列优化
    Misha and Changing Handles
    HDU-1428(记忆化搜索)
    CF-599B
    POJ-1488(字符串应用)
    New Year Permutation(Floyd+并查集)
    HDU-1078
    HDU-5532(LIS-nlogn)
  • 原文地址:https://www.cnblogs.com/jeyfang/p/6604444.html
Copyright © 2011-2022 走看看