存储过程

mysql中没有 alter procedure,需要先执行的drop然后再create

drop procedure if exists myprocedure

create procedure myprocedure(IN account_ varchar(32), OUT count int)
comment '注释信息'
begin
     declare v1 varchar(32);
     set v1 = account_ ;
	 select count(*) into count from ts_user where account=v1 ;
end

调用
call myprocedure(‘admin’,@num)
查看
select @num

备注:IN表示输入参数;OUT表示输出参数; INOUT表示既可以是输入,也可以是输出。
MySQL中默认的语句结束符为分号(;)。MySQL中可以使用declare关键字来定义变量。存储过程中的SQL语句需要分号来 结束。为了避免冲突,首先用"DELIMITER &&"将MySQL的结束符设置为&&。最后再用"DELIMITER ;"来将结束符恢复成分号。

delimiter &&      
create procedure myprocedure2(in account_ varchar(32), out count int)
    begin
    	select count(*) into count from ts_user where account=account_;
    end
 delimiter ;   

oracle:
create or replace procedure 存储过程名
参数名不能重复, 参数传递方式:IN, OUT, IN OUT
变量声明块:紧跟着的as (is )关键字,用于声明变量。
从begin 关键字开始为过程的语句块。存储过程的具体逻辑在这里来实现。
异常处理块:关键字为exception ,为处理语句产生的异常。该部分为可选.
结束块:由end关键字结果。

新建一个Package包,将所有过程放到包里,便于管理

create or replace package PKG_TT is
  -- Author  : xx
  -- Created : 2017/3/30 
  -- Purpose : 首页报表
   PROCEDURE P_Total;
end PKG_TT;


create or replace package body PKG_TT is
  -- 首页需求描述
  PROCEDURE P_Total IS
  begin
     --汇总责任人数据 
     P_ZRR;
     --汇总责任科室数据
     P_ZRKS;       
     --汇总责任部门数据
     P_ZRBM;      
     --汇总责任单位数据
     P_ZRDW;  
     commit;
  END;
  
    PROCEDURE P_ZRR IS
      BEGIN  
          P_ZRR_ALL;
          P_ZRR_IMP;
          P_ZRR_TOPQ_MX;
          P_ZRR_ACCOUNT;
      END;
      
      PROCEDURE P_ZRR_ALL IS
      BEGIN  
          /*DELETE TT_ZRR_ALL;
          INSERT INTO TT_ZRR_ALL VALUES()*/          
      EXCEPTION
        WHEN OTHERS THEN
          DBMS_OUTPUT.PUT_LINE('sql执行错误:' + SQLCODE || '---' || SQLERRM);             
      END;      
end PKG_TT;

基本语法:

CREATE OR REPLACE PROCEDURE 存储过程名字
(
    参数1 IN NUMBER,
    参数2 IN NUMBER
) IS
变量1 INTEGER :=0;
变量2 DATE;
BEGIN
    SELECT col1,col2 into 变量1,变量2 FROM typestruct where xxx;
     EXCEPTION
      WHEN NO_DATA_FOUND THEN
          xxxx; 
END 存储过程名字

sqlserver

if exists(select * from sys.procedures where name='noreferencepro')
drop procedure dbo.noreferencepro;
go


CREATE PROCEDURE PR_Sum 
    @a int, 
    @b int, 
    @sum int output
AS
BEGIN
    set @sum=@a+@b 
END

声明变量时必须在变量前加@符号
变量赋值时变量前必须加set

ALTER PROCEDURE IsTable(
  @tableName varchar(128),
  @sourceTable varchar(128),
  @result    int output)
as
  declare @sql nvarchar(262);
  declare @index_sql nvarchar(262);
  declare @sql02 nvarchar(262);
  set @sql = 'select * into '+@tableName+' from '+@sourceTable+' where 1<>1';
  set @index_sql = 'create index csv_index on '+@tableName+'(file_name,apparatus_code)';
  set @sql02 = 'alter table '+@tableName+' add default (getdate()) for create_time ';
  begin
    if(@sourceTable = 'TB_ET_CMM_ACCESS')
      begin
        set @index_sql = 'create index access_index on '+@tableName+'(avTime)';
      end
    if object_id(@tableName) is not null
      begin
        set @result = 1
      end
    else
      begin
        EXEC(@sql);
        EXEC(@index_sql);
        EXEC(@sql02);
      end
  end

postgresql

CREATE OR REPLACE FUNCTION totalRecords ()  
RETURNS integer AS $total$  
declare  
    total integer:=0;  
BEGIN  
   SELECT count(*) into total FROM ts_user;  
   RETURN total;  
END;  
$total$ LANGUAGE plpgsql;

select totalRecords();

所有关键字都不区分大小写。标识符被隐含地转换成小写字符,除非被双引号包围

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值