今天帮同事写了一个小的数据库存储过程的DEMO,发现有两种不同的执行语句的实现方式。

列出如下。

 

1、有时候我们利用数据库的存储过程来执行一些比较耗时间的SELECT操作,存储过程类似于函数,它可以单独执行。以下为执行方式一,支持SQL语句的动态拼接。

CREATE OR REPLACE FUNCTION func_test() RETURNS INTEGER AS
$BODY$

DECLARE
sqlstr VARCHAR;

number INTEGER;

BEGIN
    

         sqlstr = 'SELECT COUNT(*) FROM tbl_res';   

         EXCUTE sqlstr INTO number;     

 

          RETURN 0;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;

 

2、有时候我们想对结果集遍历操作,可以用如下偷懒方式。

 

CREATE OR REPLACE FUNCTION func_test() RETURNS INTEGER AS
$BODY$

DECLARE
sqlstr VARCHAR;

result RECORD;

BEGIN

    sqlstr = 'SELECT * FROM tbl_res'; 

    FOR result IN EXCUTE sqlstr LOOP

    END LOOP;

 

RETURN 0;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;