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();
所有关键字都不区分大小写。标识符被隐含地转换成小写字符,除非被双引号包围