功能/特性
MySQL
PostgreSQL
存储过程定义
CREATE PROCEDURE proc_name (params) BEGIN ... END;
CREATE OR REPLACE PROCEDURE proc_name (params) LANGUAGE plpgsql AS $$ BEGIN ... END; $$;
函数定义
CREATE FUNCTION func_name (params) RETURNS type BEGIN ... END;
CREATE OR REPLACE FUNCTION func_name (params) RETURNS type LANGUAGE plpgsql AS $$ DECLARE ... BEGIN ... END; $$;
参数
输入、输出、输入输出参数
输入参数(默认),使用IN、OUT、INOUT指定
变量声明
DECLARE var_name type;
DECLARE var_name type; 在DECLARE块中
异常处理
DECLARE ... HANDLER
EXCEPTION 块
条件控制
IF ... THEN ... ELSE ... END IF;
IF ... THEN ... ELSE ... END IF;
循环控制
WHILE ... DO ... END WHILE;
WHILE ... LOOP ... END LOOP;
结果集处理
SELECT ... INTO var;
SELECT ... INTO var;
2.4.3 示例说明
在MySQL中定义存储过程和函数
– 存储过程
DELIMITER //
CREATE PROCEDURE example_procedure(IN param1 INT)
BEGIN
SELECT * FROM example_table WHERE id = param1;
END //
DELIMITER ;
– 函数
DELIMITER //
CREATE FUNCTION example_function(param1 INT) RETURNS INT
BEGIN
DECLARE result INT;
SELECT column INTO result FROM example_table WHERE id = param1;
RETURN result;
END //
DELIMITER ;
在PostgreSQL中转换存储过程和函数
– 存储过程
CREATE OR REPLACE PROCEDURE example_procedure(param1 INT)
LANGUAGE plpgsql
AS B E G I N S E L E C T ∗ F R O M e x a m p l e t a b l e W H E R E i d = p a r a m 1 ; E N D ; BEGIN SELECT * FROM example_table WHERE id = param1; END; BEGINSELECT∗FROMexampletableWHEREid=param1;END;;
– 函数
CREATE OR REPLACE FUNCTION example_function(param1 INT) RETURNS INT
LANGUAGE plpgsql
AS D E C L A R E r e s u l t I N T ; B E G I N S E L E C T c o l u m n I N T O r e s u l t F R O M e x a m p l e t a b l e W H E R E i d = p a r a m 1 ; R E T U R N r e s u l t ; E N D ; DECLARE result INT; BEGIN SELECT column INTO result FROM example_table WHERE id = param1; RETURN result; END; DECLAREresultINT;BEGINSELECTcolumnINTOresultFROMexampletableWHEREid=param1;RETURNresult;END;;