
其实它就是函数!
它可以传入参数和传出参数!
具体声明为:
CREATE PROC 名称
@变量名 类型 INPUT,
@变量名 类型 OUTPUT
AS
BEGIN
函数体。。。。。。。
END
你在SQL上可以查到帮助的!
好好看看!
oracle中function是函数,而procedure是存储过程。函数:
函数用于返回特定数据。执行时得找一个变量接收函数的返回值。
语法如下:
create or replace function function_name
(
argu1 [mode1] datatype1,
argu2 [mode2] datatype2, ........
)
return datatype
is
begin
end存储过程:
存储过程(Stored
Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL
语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。
语法如下:
CREATE OR REPLACE PROCEDURE 存储过程名
IS
BEGIN
NULL
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.myProcedure ( @a integer,@b char(50))
BEGIN
END
但是这样子还是不能编译的,因为整个过程体是空的,而我学习的结果是过程中至少要有一个SQL语句。所以要这样写才不会出错:
CREATE PROCEDURE dba.myProcedure ( 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是数据库中存储过程的名字,下面的传入的参数。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)