当前位置:首页 » 服务存储 » 编写存储过程
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

编写存储过程

发布时间: 2022-01-18 16:30:20

⑴ 编写一个存储过程,急急

不需要存储过程

一个sql就行
select 起运港 ,目的地, 船名, 航次 , sum(case when 箱类 = 'GP' then 1 else 0 end ) as GP,
sum(case when 箱类 = 'HQ' then 1 else 0 end ) as HQ,
SUM(case when 箱类 = 'FR' then 1 else 0 end ) as FR,
SUM(case when 箱类 = 'TK' then 1 else 0 end ) as TK
from tcard

⑵ 如何编写数据库存储过程

存储过程代码参考如下:
create
or
replace
procere
bak_pay_list_xxx(local_net
in
varchar2,bak_month
in
varchar2,ret
out
varchar2)
is
ls_sql
varchar2(1024);
ls_sql_del
varchar2(1024);
begin
...
end
bak_pay_list_xxx;

⑶ 存储过程的编写

我是这样理解的:
1、要求根据UserId,查T_Mail_User表,得到MailId,再查T_Mail表获得邮件。
2、同时可以获得用户的收藏邮件。即不但提供UserId输入,而且提供“是否要取收藏记录”的输入参数。
3、同时支持条件查询,比如,按发送日期等查询,默认1=1,即没有条件语句。
这样,存储过程中关键的语句为
if(@filterString is null)
set @filterString='1=1'
declare cmdStr char(256)
if(isGetFavorite)
set cmdStr='select b.* from T_Mail_User a,T_Mail b
where a.isFavorite=1 and a.UserId=@userId and a.MailId=b.MailId and a.MailType=0 and '+@filterString
else
...a.isFavorite=0...
exec(cmdStr)
上面假设收件箱标识为0,如果参数化,此存储过程也可用于查用户的发件箱等。
上面的@filterString就是条件字符串,或者‘1=1’可能由前台提供,此时不必要第一个if。

⑷ 存储过程怎么写简单

可以的
CREATE procere InSertUser
@Username varchar(50),
@UserPwd varchar(50),
@UserDate datetime=getdate,
@Action varchar(50)
as
if(@Action='Create')
BEGIN
INSERT INTO Users
(UserName, UserPwd, UserDate)
VALUES
(
@Username,
@UserPwd,
@UserDate
)
END
else if(@Action='Update')
BEGIN
update xxx set aaa=''
END

GO
通过传递@Action的不同值就可以了 这只是个思路 具体实现你可以自己考虑考虑

⑸ 写一个存储过程。

我觉得你的业务口径没有描述清楚,但是我连猜带蒙的写了一下,你看看符合你的需求否

CREATE OR REPLACE PROCEDURE p_ccrm
(v_depid ccrm_deptment.depid%type)
AS
v_shouliliang number(100);
v_wangchengliang number(100);
v_chaoshiliang number(100);
BEGIN
IF(V_DEPID=0)
THEN
select count(distinct id) shouliliang
,sum(case when workstate='已处理' or workstate='办结' then 1 else 0 end) wanchengliang
,sum(case when workendtime-workstart > XX then 1 else 0 end) chaoshiliang
into v_shouliliang,v_wanchengliang,v_chaoshiliang
from ccrm_service cs,ccrm_userlist cu,ccrm_deptment cd
where cd.depid=cs.depid
and cd.depid=cu.depid
group by deptid;
else
select count(distinct id) shouliliang
,sum(case when workstate='已处理' or workstate='办结' then 1 else 0 end) wanchengliang
,sum(case when workendtime-workstart > XX then 1 else 0 end) chaoshiliang
into v_shouliliang,v_wanchengliang,v_chaoshiliang
from ccrm_service cs,ccrm_userlist cu,ccrm_deptment cd
where cd.depid=cs.depid
and cd.depid=cu.depid
and cd.depid=v_depid
group by id;
end if;
DBMS_OUTPUT.PUT_LINE("受理量:"||v_shouliliang||“;完成量:
”||v_wanchengliang||";超时量:"||v_chaoshiliang);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('Not FOUND RECORD');
END;

⑹ 怎么写存储过程

一、整体格式。存储过程的格式如下:
CREATE PROCEDURE [creator.]"proc_name" ( /* parameters,... */ )
/* RESULT ( column-name,... ) */
BEGIN
;
END
其中creator是用户名,比如dba;proc_name是你自己起的过程名;后面的参数可有可无,视自己情况定,如果有格式如(a integer,b char(50));再下面的RESULT应该是返回值,这个没用过不知道怎么回事!
二、内容。把这些都写好了可能是这样:
CREATE PROCEDURE dba.myProcere ( @a integer,@b char(50))
BEGIN
;
END
但是这样子还是不能编译的,因为整个过程体是空的,而我学习的结果是过程中至少要有一个SQL语句。所以要这样写才不会出错:
CREATE PROCEDURE dba.myProcere ( a integer,b char(50))
BEGIN
SELECT * FROM MyTable
END
三、语法。
1、分号。在写的过程中最郁闷的问题是分号!最后发现好像是这样:
每一句都要加分号,不管是SQl语句还是其它的什么语句,但是最后保存后最后一句的分号会被自动删除!(我用的是Sybase的Sybase Central)。
2、定义变量。
格式为Declare @varName integer;(注意有分号!)“@”号好像可有可无!
3、SELECT语句。
格式为:
SELECT Count(*) INTO @varName FROM MyTable WHERE id = @a;
4、if语句。
格式为:
if(varName > 0) then
return
end if;(注意还有分号!)
5、循环语句。
格式为:
loop
……
end loop;(注意分号!)
6、设置变量值。
格式为:
set @varName = 10;
set @varName = @varName2;
7、字符串。
Declare myString char(50);
set @myString = 'Hello!';
要用单引号!
8、定义游标。
格式为:
declare MyCursor dynamic scroll cursor for
select …… from …… where ……;
9、打开、使用和关闭游标。
Open MyCursor;
fetch next MyCursor into ……;
Close MyCursor;
10、调用方法。
string ls_name="test"
DECLARE ProcName1 PROCEDURE FOR ProcName2
@wg_wellid=2,@wg_wgid=1,@wg_stringsid=1,@bha_wellid=2,@bha_name=:ls_name;
execute ProcName1 ;
close ProcName1 ;
其中ProcName1 是调用程序中自定义的过程名,ProcName2是数据库中存储过程的名字,下面的传入的参数。

⑺ 存储过程怎么写啊

//创建存储过程

CREATE PROCEDURE userData(

IN id INT

)

BEGIN

SELECT * from userdata WHERE userflag = id;

END;

其中IN是传进去的变量;

drop procere userData;//销毁这个存储过程。

call userData(2) //调用存储过程。

(7)编写存储过程扩展阅读:

sql中的存储过程及相关介绍:

CREATE PROCEDURE [拥有者.]存储过程名[;程序编号]

[(参数#1,…参数#1024)]

[WITH

{RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION}

]

[FOR REPLICATION]

AS 程序行

其中存储过程名不能超过128个字。每个存储过程中最多设定1024个参数

(SQL Server 7.0以上版本),参数的使用方法如下:

@参数名数据类型[VARYING] [=内定值] [OUTPUT]。

每个参数名前要有一个“@”符号,每一个存储过程的参数仅为该程序内部使用,参数的类型除了IMAGE外,其他SQL Server所支持的数据类型都可使用。

[内定值]相当于我们在建立数据库时设定一个字段的默认值,这里是为这个参数设定默认值。[OUTPUT]是用来指定该参数是既有输入又有输出值的,也就是在调用了这个存储过程时,如果所指定的参数值是我们需要输入的参数。

同时也需要在结果中输出的,则该项必须为OUTPUT,而如果只是做输出参数用,可以用CURSOR,同时在使用该参数时,必须指定VARYING和OUTPUT这两个语句。

参考资料来源:网络-储存过程



⑻ sql怎样新建存储过程

一:创建没有参数的存储过程:

CREATE PROCEDURE select_all

AS

BEGIN

SELECT * from T_login1

GO

二:创建带参数的存储过程:

CREATE PROCEDURE select_name

@id uniqueidentifier

AS

BEGIN

SELECT * from T_login1 where PSN0001A=@id

GO

(8)编写存储过程扩展阅读

创建存储过程的注意事项:

1、保持事务简短,事务越短,越不可能造成阻塞。

2、在事务中尽量避免使用循环while和游标,以及避免采用访问大量行的语句。

3、在启动事务前完成所有的计算和查询等操作,避免同一事务中交错读取和更新。可以使用表变量预先存储数据。即存储过程中查询与更新使用两个事务实现。

4、超时会让事务不执行回滚,超时后如果客户端关闭连接sqlserver自动回滚事务。如果不关闭,将造成数据丢失,而其他事务将在这个未关闭的连接上执行,造成资源锁定,甚至服务器停止响应。

⑼ 编写存储过程

1 select PersonName from tb_职员 z
left join tb_考勤 k on z.PersonID=k.PersonID
where (k.Cio=i and k.Ctime>N'0830') or (k.Cio=O and k.Ctime<N'1730')

2 select count(*) as num,PersonName,z.PersonID from tb_职员 z
left join tb_考勤 k on z.PersonID=k.PersonID
where (k.Cio=i and k.Ctime>N'0830') or (k.Cio=O and k.Ctime<N'1730') and num>=10
group by z.PersonID