存储过程怎么写!急急急!要完整的准确的(考研要考)

存储过程怎么写!急急急!要完整的准确的(考研要考),第1张

DELIMITER //
DROP PROCEDURE IF EXISTS DoctorUpdate ; //如果存在就删除,免得同名,但用意不一样
CREATE PROCEDURE IN DoctorUpdate (loop_times INT) //声明一个存储过程
BEGIN
DECLARE var INT DEFAULT 0; //从序列为0的开始为第一行
WHILE var<loop_times DO
SET var=var+1; //这个是不断递增的i++的意思
UPDATE Doctors (DID,AcaCredentials) SET AcaCredentials = "博士" WHERE DID = 1;
END WHILE; //循环语句的结束
END
//
DELIMITER ; //存储建好
call DoctorUpdate (1);//运行存储,这行是向表里插入多少条数据,括号里写几就是几条,以从0序列号,这里就是一条,如果是10序列号,这里写11,就是1条
DROP PROCEDURE IF EXISTS DoctorUpdate ; //就是按英文可以翻译出什么意思,存储过程一般是向表里插入大量数据用的,你这个更改一个字段,直接用update就可以了啊,验证就是去表里查有没有更改数据

create procedure p_add
as
begin
insert into c select aid,aa,bb from a inner join b on aid=bid
end
go
exec p_add

一、整体格式。存储过程的格式如下:
CREATE PROCEDURE [creator]"proc_name" ( / parameters, / )
/ RESULT ( column-name, ) /
BEGIN
;
END
其中creator是用户名,比如dba;proc_name是你自己起的过程名;后面的参数可有可无,视自己情况定,如果有格式如(a integer,b char(50));再下面的RESULT应该是返回值,这个没用过不知道怎么回事!
二、内容。把这些都写好了可能是这样:
CREATE PROCEDURE dbamyProcedure ( @a integer,@b char(50))
BEGIN
;
END
但是这样子还是不能编译的,因为整个过程体是空的,而我学习的结果是过程中至少要有一个SQL语句。所以要这样写才不会出错:
CREATE PROCEDURE dbamyProcedure ( 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是数据库中存储过程的名字,下面的传入的参数。

建一个存储过程
在里面写个循环就行了
datetime := 20120407--起点值
while datetime<20150428 loop --截止时间
sqlstr='insert into calendar(c_date) values('||datetime||')';
execute immediate sqlstr;
datetime=to_char(to_date(datetime,'yyyymmdd')+1,'yyyymmdd');--取下一天
end loop;


欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/yw/13336550.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-17
下一篇 2023-07-17

发表评论

登录后才能评论

评论列表(0条)

保存