Oracle存储过程的使用

          最近在项目中需要写存储过程,于是在自己学习了一段时间,总结下,希望对大家学习有些帮助;

先上模板:

create or replace procedure 要创建的存储过程名称(入参a in varchar2, 出参b out varchar2) 
is     
       v_sql  varchar(1000) ;  
       c   varchar2(2000);     //中间变量   (数据类型要知道长度,否则会报错)
	   d  number(10);         //中间变量

begin 

if   a=1   then c := '是' ;      //判断语句
else    c := '否'                //赋值语句
end if;

 v_sql:='select语句';     //执行sql

 execute immediate v_sql into b;  //把查询的结果放到b中输出; 


MSG := 'success';    //成功的标识

end;

以下面例子为例:
 

create or replace procedure vsql_test(project_id INT DEFAULT 999999, v_sql varchar  ,resjson out varchar,res out varchar) 
is 
            v_asql      varchar(4000)      :='';
			v_month         VARCHAR(10)    :='2019-04-06';
			year_month_day   VARCHAR(10)    :='2019-04-06';
            v_a1 			           INT  		:=1;
            v_a2 					   INT  		:=1;
            v_a3 					   INT  		:=1;
            v_a4 					   DOUBLE  		:=1;
begin 

//获取系统时间
year_month_day:=to_char(SYSDATE,'yyyy-mm-dd');

//判断时间
if substr(year_month_day,1,4) = '2019' then 
v_month:= '2019-04-21';
else 
v_month:= '201904-22';
end if;

//为了提高过程的可用性,加入了v_sql变量,用于改动sql
v_asql:=  'select count(1),count(distinct set_row_id)
		   from aa.test  
		   where date= '''||v_month_now|| '''  ' || v_sql;      //   '''||v_month_now|| '''  用于在sql中连接定义的变量
execute immediate v_asql  into v_a1,v_a2 ;   //赋值



v_asql:=  'select  count(distinct set_row_id)
            from aa.test1 
            where date= '''||v_month|| ''' '   || v_sql ;
execute immediate  v_asql into v_a3 ;

--计算v_a4的值
 v_a4:=nvl((v_a2+v_a1+v_a3)/4,0)  ;


--将所得结果以json的格式返回
resjson :=  '{"v_a4:"'||to_char(v_a4)||",v_a3:"||to_char(v_a3)||'}' ;

res := 'success';
end; 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值