百度百科是这么描述存储过程的:存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL语句集,存储在数据库中,首次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果有)来执行它。它是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。
特性:
- 存储于数据库服务器
- 一次编译后可多次调用
- 设计良好的数据库应用程序很可能会用到它
- 由SQL和过程语句来定义
- 应用程序通过SQL接口来调用
存储过程举例:
1、参数列表只包含函数输入参数,不包含输出参数
存储过程定义:
CREATE OR REPLACE FUNCTION add(a INTEGER, b NUMERIC)
RETURNS NUMERIC
AS $$
SELECT a+b;
$$ LANGUAGE SQL;
调用方法:
SELECT add(1,3);
SELECT * FROM add(1,3);
结果:
2、同时包含输入参数和输出参数
存储过程定义:
CREATE OR REPLACE FUNCTION plus_and_minus
(IN a INTEGER, IN b NUMERIC, OUT c NUMERIC, OUT d NUMERIC)
AS $$
SELECT a+b, a-b;
$$ LANGUAGE SQL;
调用方法:
SELECT plus_and_minus(6,5);
结果:
调用方法:
SELECT * from plus_and_minus(6,5);
结果:
3、在函数定义中,可以写多个SQL语句,不一定是SELECT语句,可以是其它任意合法的SQL。但最后一条SQL必须是SELECT语句,并且该SQL的结果将作为该函数的输出结果。
注意点:
1、存储过程(FUNCITON)变量可以直接用 || 拼接。
2、存储过程的对象不可以直接用变量,要用 quote_ident(objVar)
3、$1 $2是 FUNCTION 参数的顺序,如1中的 $1 $2交换,USING 后面的不换 结果 :select max(myTableName) from myFeildname
4、注意:SQL语句中的大写全部会变成小写,要想大写存大,必须要用双引号。
参考:https://www.cnblogs.com/ssqhan/p/7289931.html
https://www.cnblogs.com/kuang17/p/8143814.html