postgresql 存储过程 把一个表的部分数据插入另一个表中(条件:传入的某些参数作为检索条件并且可能为空值)

来源:互联网 发布:c多线程编程实例 pdf 编辑:程序博客网 时间:2024/05/21 09:29

说明:

把一个表1的部分数据插入另一个表2中根据id,mac作为检索条件,但是id、mac有一个为空。如果id为空,先从另一个表2中查出id值,insert 表1中,如果不为空时,直接插入。


CREATE OR REPLACE FUNCTION     存储过程名(

    in_id integer,
    in_mac text,

    参数2,

    参数3)

  RETURNS boolean AS
$BODY$
DECLARE
  v_count int;
  v_select int;
  num int;
  v_number int;
BEGIN
IF in_id IS  NULL THEN       
UPDATE    表名1
SET     字段 = 参数2
WHERE   表1字段 = in_mac;
GET DIAGNOSTICS v_count = ROW_COUNT;    //获取执行sql语句成功的行数;
    IF v_count = 0 THEN
   SELECT sid  INTO num
   FROM   表2
WHERE  表2 里字段 = in_mac;
GET DIAGNOSTICS v_select = ROW_COUNT;   //获取执行sql语句成功的行数;
      IF v_select = 0 THEN
RETURN FALSE;
      ELSE        
INSERT 
INTO  一个表名(
sid,
mac,
其他字段)
VALUES(
num,
in_mac,
其他参数
    );
 RETURN TRUE;
END IF;
   ELSE
       RETURN TRUE;
   END IF;  


ELSE
              UPDATE  表1  
              SET       mac = in_mac,
                       其他字段
        WHERE    sid = in_id;
      GET DIAGNOSTICS v_number = ROW_COUNT;       //获取执行sql语句成功的行数;
          IF v_number = 0 THEN 
            INSERT 
    INTO   表1(
sid,
mac,
其他字段)
   VALUES(
in_id,
in_mac,
其他参数
          );
    RETURN TRUE;
   END IF;
END IF;
END;
$BODY$
  LANGUAGE plpgsql VOLATILE;
0 0