mysql和oracle存储过程和函数 编写

存储过程和函数的区别参考
https://www.cnblogs.com/xuan666/articles/10638068.html
具体编写语法参考
https://blog.csdn.net/weixin_38673554/article/details/86627587

写自动化用例时,多少会写一些sql 脚本,可是如果遇到mysql 和oracle 两种数据库,有些sql 就无法通用。
可以采用编写过程或者函数,把需要的语句包一层,这样就可以避免一个sql 写两遍,因为过程或者函数 的调用方式是一样的。

一、过程 有入参无出参

比如,清空表数据的过程,过程名称是truncate_table,入参是传入的表名
mysql 和oracle 调用方式都是是 call truncate_table(‘table_name’)

oracle

CREATE OR REPLACE
procedure truncate_table(vc_tbname in VARCHAR2 ) is
	 v_sql VARCHAR2(4000);
	  iCountNum NUMBER:= 0;
BEGIN
	-- 首先判断是否存在表,再清空表
	select count(1) into iCountNum from all_tables a where a.OWNER = 'root' and table_name =upper(vc_tbname);
	if iCountNum>0 THEN
		v_sql:='truncate table '|| vc_tbname ;
		EXECUTE IMMEDIATE v_sql;
		COMMIT;
	end if;
	
END truncate_table;

mysql

DROP PROCEDURE IF EXISTS `truncate_table`;
DELIMITER //
CREATE  PROCEDURE truncate_table(IN vc_tbname varchar(32))
BEGIN
	declare iCountNum int DEFAULT 0; 
	-- 首先判断是否存在表,再清空表
	select count(1) into iCountNum from Information_schema.tables where table_name =vc_tbname and  table_schema ='root';
	if iCountNum>0 THEN
		set @v_sql=concat('truncate table ',vc_tbname,';');
		PREPARE stmt FROM @v_sql; 
		EXECUTE stmt; 
		DEALLOCATE PREPARE stmt;
	end if;
	
END ;
//
DELIMITER ;

二、函数 有入参有出参

比如一个获取日期函数,函数名称是 function_get_date,入参num是数字,num>0取后面日期,num<0取前面日期,num=0取当前日期
调用方式如下
select function_get_date(0) from dual;-- 查当前DB日期
select function_get_date(2) from dual;-- 查后两日
select function_get_date(-2) from dual;-- 查前两日

oracle

CREATE OR REPLACE FUNCTION function_get_date(num NUMBER)
return varchar2 as
v_get_date VARCHAR2(40); 

BEGIN
   select to_char(sysdate+num,'YYYYMMDD')  into v_get_date  from dual ;
   return v_get_date;
END;

mysql

DROP FUNCTION IF EXISTS `function_get_date`;
DELIMITER //
CREATE FUNCTION function_get_date( num int ) 
RETURNS INT
BEGIN
	DECLARE v_get_date VARCHAR(100);
	case 
	when  num=0  then
			select date_format(now(),'%Y%m%d')  into v_get_date  from dual;
	when num<>0  then
			select date_format(date_sub(curdate(),interval 0-num day),'%Y%m%d') into v_get_date ; 
			
	end case;
	RETURN v_get_date;
END 
//

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值