存储过程基本语法

合集下载

hive procedure语法

hive procedure语法

Hive是一种开源的数据仓库工具,它提供了一种类似于SQL的查询语言HiveQL来分析大规模的结构化数据。

在Hive中,使用存储过程(procedure)可以方便地管理和执行一系列的SQL语句。

本文将介绍Hive存储过程的语法和用法,帮助读者更好地理解和应用存储过程。

1. 存储过程概述存储过程是一组预先定义好的SQL语句集合,它可以被多次调用执行。

在Hive中,存储过程允许用户将一系列的SQL语句打包成一个单元,并以一定的方式进行管理和执行。

2. 存储过程的创建在Hive中,创建存储过程需要使用CREATE PROCEDURE语句,并且需要在Hive的交互式命令行工具或者Hue等可视化工具中进行操作。

其基本语法如下:```sqlCREATE PROCEDURE procedure_name(param1 type, param2 type, ...)BEGIN--SQL语句...END;```其中,procedure_name为存储过程的名称,param1, param2等为参数的名称和类型,BEGIN和END中为存储过程的具体SQL语句。

3. 存储过程的调用一旦存储过程创建完成,可以使用CALL语句来调用存储过程,并将参数传递给存储过程。

其基本语法如下:```sqlCALL procedure_name(param1, param2, ...);```其中,procedure_name为存储过程的名称,param1, param2等为存储过程接收的参数。

4. 存储过程的示例为了更好地理解和应用存储过程,以下将给出一个简单的存储过程示例,该存储过程用于计算给定两个数字的和:```sqlCREATE PROCEDURE calculate_sum(x INT, y INT)BEGINSELECT x + y;END;```调用该存储过程的语句如下:```sqlCALL calculate_sum(3, 4);```经过调用后,将会返回结果7。

sql存储过程

sql存储过程

SQL存储过程简介SQL存储过程是一种预编译的数据库操作,它被存储在数据库服务器中,并可以由应用程序调用。

存储过程可以包含SQL语句、控制流程和业务逻辑,它们提供了一种更高效、更安全的处理方法。

本文将介绍SQL存储过程的基本语法和用法,并提供一些示例来帮助您更好地理解。

存储过程语法SQL存储过程使用CREATE PROCEDURE语句来创建。

下面是一般存储过程的语法:CREATE PROCEDURE procedure_name[parameter1 data_type, [parameter2 data_type, ...]][OUT return_value data_type]BEGIN-- 存储过程主体,包括SQL语句、控制流程和业务逻辑END;•procedure_name是存储过程的名称,可以自定义。

•parameter1, parameter2, ...是可选参数列表,用于传递数据给存储过程。

参数包括参数名称和数据类型。

•OUT return_value是可选的输出参数,用于返回存储过程的结果。

存储过程示例下面是一个简单的示例,展示了如何创建一个存储过程。

该存储过程接受一个参数,并返回对应参数的平方值:CREATE PROCEDURE calculate_square@input INT,@output INT OUTBEGINSET @output = @input * @input;END;在上面的示例中,calculate_square是存储过程的名称,@input是输入参数,@output是输出参数。

调用存储过程一旦创建了存储过程,可以使用EXECUTE或EXEC语句来调用它。

下面是一个调用存储过程的示例:DECLARE @result INT;EXEC calculate_square 5, @result OUT;SELECT @result;在上面的示例中,@result是一个变量,用于接收存储过程的输出结果。

postgresql 存储过程语法

postgresql 存储过程语法

PostgreSQL存储过程语法1. 概述PostgreSQL是一个开源的关系型数据库管理系统,而存储过程是一种为了完成特定功能而封装在数据库中的一段可重复使用的代码。

存储过程在数据库服务器端执行,可以提供更高效的数据处理和业务逻辑处理能力。

本文将详细介绍PostgreSQL存储过程的语法。

2. 存储过程的创建创建存储过程前,我们首先需要理解存储过程的基本结构。

下面是一个简单的存储过程结构示例:CREATE OR REPLACE FUNCTION procedure_name() RETURNS return_type AS $$ DECLARE-- 声明局部变量variable_name datatype;BEGIN-- 逻辑处理代码-- RETURN语句可选,指定返回值END;$$ LANGUAGE plpgsql;在这个示例中,我们使用CREATE OR REPLACE FUNCTION语句来创建一个存储过程。

procedure_name是存储过程的名称,可以根据具体需求命名。

return_type是存储过程的返回值类型,可以是基本数据类型、复合数据类型或表类型。

接下来,在DECLARE关键字后面声明局部变量,用于存储过程内部的数据处理。

变量的名称可以根据实际需要命名,datatype为变量的数据类型。

在BEGIN和END之间编写存储过程的逻辑处理代码。

根据实际需求,可以使用SQL 语句、逻辑控制结构、异常处理等进行数据处理和业务逻辑控制。

最后,使用$$ LANGUAGE plpgsql;指定存储过程的语言为plpgsql,这是PostgreSQL 存储过程的默认语言。

3. 存储过程的参数存储过程可以接受输入参数和输出参数。

下面是一个接受输入参数和输出参数的存储过程示例:CREATE OR REPLACE FUNCTION procedure_name(input_param1 datatype, OUT output_pa ram1 datatype) RETURNS return_type AS $$DECLARE-- 声明局部变量variable_name datatype;BEGIN-- 逻辑处理代码-- 将结果赋给输出参数output_param1 := some_expression;-- RETURN语句可选,指定返回值END;$$ LANGUAGE plpgsql;在这个示例中,input_param1是输入参数的名称和数据类型,可以根据实际需求声明多个输入参数。

ORACLE存储过程开发基础语法

ORACLE存储过程开发基础语法

1、创建存储过程create or replace procedure test(var_name_1 in type,var_name_2 out type) as--声明变量(变量名变量类型)begin--存储过程的执行体end test;打印出输入的时间信息E.g:create or replace procedure test(workDate in Date) isbegindbms_output.putline('The input date is:'||to_date(workDate,'yyyy-mm-dd'));end test;2、变量赋值变量名 := 值;E.g:create or replace procedure test(workDate in Date) isx number(4,2);beginx := 1;end test;3、判断语句:if 比较式 then begin end; end if;E.gcreate or replace procedure test(x in number) is beginif x >0 thenbeginx := 0 - x;end;end if;if x = 0 then beginx: = 1;end;end if;end test;4、For 循环For ... in ... LOOP--执行语句end LOOP;(1)循环遍历游标create or replace procedure test() asCursor cursor is select name from student; name varchar(20);beginfor name in cursor LOOPbegindbms_output.putline(name);end;end LOOP;end test;(2)循环遍历数组create or replace procedure test(varArray in myPackage.TestArray) as--(输入参数varArray 是自定义的数组类型,定义方式见标题6)i number;begini := 1; --存储过程数组是起始位置是从1开始的,与java、C、C++等语言不同。

DB2存储过程基本语法

DB2存储过程基本语法

DB2存储过程基本语法存储过程的基本语法如下:1.创建存储过程:```sqlCREATE PROCEDURE procedure_name [ (parameter_name parameter_data_type [, ...]) ]BEGIN-- SQL statementsEND;```存储过程使用`CREATEPROCEDURE`语句来创建,指定存储过程的名称以及可选的参数。

然后使用`BEGIN`和`END`之间的SQL语句来定义过程的操作。

2.存储过程参数:存储过程可以接收参数,并且可以设置参数的初始值。

```sqlCREATE PROCEDURE procedure_name (IN parameter_name parameter_data_type [DEFAULT default_value])BEGIN-- SQL statementsEND;```参数可以设置为输入(IN)参数或者输出(OUT)参数,用于接收过程内部的数据或者返回数据。

3.存储过程返回结果:存储过程可以返回结果集或者只是执行一些操作而不返回结果。

```sqlCREATE PROCEDURE procedure_nameDYNAMIC RESULT SETS integerBEGIN-- SQL statementsEND;```使用`DYNAMICRESULTSETS`关键字来指定结果集的数量。

如果存储过程不返回结果集,可以省略这一行。

4.存储过程操作:存储过程可以包含SQL语句,例如SELECT、INSERT、UPDATE和DELETE等操作。

可以使用条件判断、循环等控制流语句来实现复杂的逻辑。

```sqlCREATE PROCEDURE procedure_nameBEGINDECLARE variable_name data_type [DEFAULT value];-- Variable declarationSET variable_name = value;-- Variable assignment-- SQL statementsIF condition THEN-- StatementsELSEIF condition THEN-- StatementsELSE-- StatementsENDIF;WHILE condition DO-- StatementsENDWHILE;FOR variable_name [AS] data_type [DEFAULT value] TO value DO -- StatementsENDFOR;REPEAT-- StatementsUNTIL condition END REPEAT;-- Other control flow statementsEND;```使用`DECLARE`关键字声明变量,使用`SET`关键字为变量赋值。

tdsql-c的存储过程写法

tdsql-c的存储过程写法

tdsql-c的存储过程写法TDSQLC(TDengine Structured Query Language Compiler)是TDengine数据库中的一种存储过程写法。

存储过程是在数据库中预先定义、编译和保存的一组SQL语句,用户可以通过调用存储过程来执行这组SQL语句,从而实现特定的业务逻辑。

存储过程的优点包括提高性能、简化开发和维护、保护数据安全等。

下面将详细介绍TDSQLC的存储过程写法。

一、存储过程的基本语法TDSQLC的存储过程使用类似于其他数据库的存储过程的基本语法,包括创建存储过程、执行存储过程和删除存储过程等。

1. 创建存储过程使用CREATE PROCEDURE语句可以创建一个存储过程,语法如下:CREATE PROCEDURE procedure_name[ ( parameter_data_type1 [ ,...n ] ) ]LANGUAGE TDSQLC ASBEGIN存储过程的SQL语句...END;其中,procedure_name是存储过程的名称,parameter_data_type是存储过程的参数类型,TDSQLC是编写存储过程的语言。

2. 执行存储过程使用CALL语句可以执行一个存储过程,语法如下:CALL procedure_name ( [ argument1 [, argument2 ] ] );其中,procedure_name是要执行的存储过程的名称,argument是传递给存储过程的参数。

3. 删除存储过程使用DROP PROCEDURE语句可以删除一个存储过程,语法如下:DROP PROCEDURE procedure_name;其中,procedure_name是要删除的存储过程的名称。

二、存储过程的参数存储过程可以接收输入参数和输出参数,用于在执行过程中进行数据的传递和处理。

1. 输入参数输入参数是在调用存储过程时传递给存储过程的参数,用于提供数据给存储过程进行处理。

sqlserver存储过程的编写

sqlserver存储过程的编写

SQL Server存储过程是一种预先编译的SQL语句集,存储在数据库中,可以通过存储过程的名称和参数来调用。

存储过程的编写可以大大提高数据库的性能和安全性,同时也可以简化复杂的数据库操作。

下面将从存储过程的基本语法、参数传递、错误处理、性能优化等方面来介绍SQL Server存储过程的编写。

一、存储过程的基本语法1.1 创建存储过程在SQL Server中,可以使用CREATE PROCEDURE语句来创建存储过程,例如:```sqlCREATE PROCEDURE proc_nameASBEGIN-- 存储过程的逻辑代码END```1.2 存储过程的参数存储过程可以接受输入参数和输出参数,例如:```sqlCREATE PROCEDURE proc_nameparam1 INT,param2 VARCHAR(50) OUTPUTASBEGIN-- 存储过程的逻辑代码END```1.3 调用存储过程使用EXECUTE语句可以调用存储过程,例如:```sqlEXECUTE proc_name param1, param2 OUTPUT```二、参数传递2.1 输入参数输入参数用于向存储过程传递数值、字符等数据,可以在存储过程内部进行计算和逻辑操作。

2.2 输出参数输出参数用于从存储过程内部传递数据到外部,通常用于返回存储过程的计算结果或状态信息。

2.3 默认参数在创建存储过程时可以指定默认参数值,当调用存储过程时如果未传入参数,则使用默认值。

三、错误处理3.1 TRY...CATCH语句使用TRY...CATCH语句可以捕获存储过程中的异常并进行处理,例如:```sqlBEGIN TRY-- 存储过程的逻辑代码END TRYBEGIN CATCH-- 异常处理代码END CATCH```3.2 R本人SEERROR函数可以使用R本人SEERROR函数来抛出自定义的异常信息,例如: ```sqlR本人SEERROR('Custom error message', 16, 1)```四、性能优化4.1 索引优化在存储过程中执行的SQL语句涉及到大量数据查询时,可以使用索引来提升查询性能。

存储过程语法

存储过程语法

存储过程语法存储过程是数据库中一组预定义的 SQL 语句集合,经过编译和优化后一起存储在数据库中,供用户调用。

存储过程能够方便地执行复杂的数据库操作,并提供了一种封装数据库逻辑的方式,减少了代码的重复性和提高了数据库的执行效率。

存储过程的创建存储过程的创建语法如下:CREATE PROCEDURE procedure_name[ ( @parameter1 datatype [ = defaultvalue ] [ OUTPUT ][ ,...n ]]ASSQL语句其中,procedure_name是存储过程的名称,@parameter1是参数的名称,datatype是参数的数据类型,defaultvalue是参数的默认值,OUTPUT表示参数是输出参数。

SQL 语句是存储过程需要执行的一系列操作。

例如,我们创建一个简单的存储过程来查询员工表中的数据:CREATE PROCEDURE GetEmployeesASSELECT*FROM Employees存储过程的调用存储过程的调用语法如下:EXEC procedure_name[ @parameter1 = value1[ ,...n ]]其中,procedure_name是要调用的存储过程的名称,@parameter1是参数的名称,value1是参数的值。

例如,如果我们要调用上一节创建的GetEmployees存储过程:EXEC GetEmployees存储过程的参数存储过程可以接受输入参数和输出参数。

输入参数输入参数是传递给存储过程的值,在存储过程的执行过程中可以使用。

输入参数的语法如下:[ @parameter1 datatype ]例如,我们创建一个带有输入参数的存储过程来查询指定部门的员工:CREATE PROCEDURE GetEmployeesByDepartment@department_id INTASSELECT*FROM Employees WHERE DepartmentID = @department_id要调用带有输入参数的存储过程,需要在调用语句中为参数赋值:EXEC GetEmployeesByDepartment @department_id = 1输出参数输出参数是从存储过程返回到调用方的值。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

存储过程1.存储过程例子 (1)2.SQL Server 字符串函数 (4)3. SQL Server 存储过程基本语法 (9)1.存储过程例子以下通过表Student 来了解存储过程,因为是要了解存储过程的简单用法,所以所有例子均很简单。

无参数存储过程:选出Student表中的所有信息,有参数存储过程:全局变量全局变量也称为外部变量,是在函数的外部定义的,它的作用域为从变量定义处开始,到本程序文件的末尾。

选出指定姓名的学生信息:上面是在外部给变量赋值,也可以在内部直接给变量设置默认值也可以把变量的内容输出,使用output以上是全局变量,下面来了解局部变量局部变量也称为内部变量。

局部变量是在函数内作定义说明的。

其作用域仅限于函数内部,离开该函数后再使用这种变量是非法的。

局部变量的定义:必须先用Declare命令定以后才可以使用,declare{@变量名数据类型}局部变量的赋值方法:set{@变量名=表达式}或者select{@变量名=表达式}局部变量的显示:select @变量名那如果是要把局部变量的数据显示出来怎么办呢?2.SQL Server 字符串函数以下所有例子均Studnet表为例:计算字符串长度len()用来计算字符串的长度字符串转换为大、小写lower() 用来将一个字符串转换为小写,upper() 用来将一个字符串转换为大写截去字符串左、右侧空格ltrim() 用来将一个字符串左侧的空格去掉,rtrim()用来将一个字符串右侧的空格去掉返回由重复的空格组成的字符串space(integer_expression)integer_expression 指示空格个数的正整数。

如果 integer_expression 为负,则返回空字符串。

取子字符串substring(string,start_position,length) 可以从任意位置取任意长度的子字符串,left(string,length) 从左侧开始取子字符串right(string,length)从右侧开始取子字符串字符串替换replace(string,要被替换的字符串,替换的字符串)返回字符串值的逆向值reverse(string_expression)删除指定长度的字符,并在指定的起点处插入另一组字符stuff(character_expression , start , length ,character_expression)start 一个整数值,指定删除和插入的开始位置。

length 一个整数,指定要删除的字符数。

以指定的次数重复字符串值replicate(string_expression ,integer_expression)返回字符串中指定表达式的开始位置charindex(expression1 ,expression2 , start_location )或charindex(expression1 ,expression2 )expression1在expression2 中的开始位置返回指定表达式中模式第一次出现的开始位置patindex('%pattern%',expression) 返回指定表达式中某模式第一次出现的起始位置;如果在全部有效的文本和字符数据类型中没有找到该模式,则返回零。

返回输入表达式的第一个字符的整数值unicode( 'ncharacter_expression' )' ncharacter_expression '为nchar 或 nvarchar 表达式。

返回由数字数据转换来的字符数据str(float_expression , length ,decimal )float_expression 带小数点的近似数字(float) 数据类型的表达式。

length 总长度。

它包括小数点、符号、数字以及空格。

默认值为10。

decimal 小数点右边的小数位数。

decimal 必须小于等于16。

如果 decimal 大于16,则将结果截断为小数点右边的16 位。

结果为:得到字符的ASCII码ascii()用来得到一个字符的ASCII码,它有且只有一个参数,如果参数为字符串,那么取第一个字符的ASCII码得到一个与ASCII码数字对应的字符Char(integer_expression) integer_expression 介于0 和255 之间的整数。

如果该整数表达式不在此范围内,将返回NULL 值。

返回返回具有指定的整数代码的Unicode 字符nchar(integer_expression)integer_expression 介于0 与65535 之间的正整数。

如果指定了超出此范围的值,将返回NULL。

返回带有分隔符的Unicode 字符串,分隔符的加入可使输入的字符串成为有效的SQL Server 分隔标识符。

quotename('character_string') character_string 不得超过128 个字符。

超过128 个字符的输入将返回NULL。

结果为:[abc[]]def] 请注意,字符串 abc[]def 中的右方括号有两个,用于指示转义符。

select QUOTENAME('abcdef','''') --分隔符是两个单引号-- 'abcdef'select QUOTENAME('abcdef') --分隔符是]-- [abcdef]select QUOTENAME('abcdef','{}') --分隔符是}-- {abcdef}发音匹配度有时候我们并不知道一个人姓名的拼写,但是我们知道他的发音,这时我们可以进行发音的匹配度测试。

soundex()用于计算一个字符串的发音特征性,这个特征值为一个四个字符的字符串,特征性的第一个字符总是初始字符串中的第一个字符,而后是一个三位数的数值。

结果为:发音特征值的含义非常复杂,如果要根据两个发音特征值来分析两个字符串的发音相似度的话非常麻烦。

可以使用difference()来简化两个字符串的发音相似度比较,它可以计算两个字符串的发音特征值,并且比较它们,然后返回一个0~4之间的值来反映两个字符串的发音相似度,这个值越大则表示两个字符串的发音相似度越大。

结果为:3.SQL Server 存储过程基本语法一、定义变量--简单赋值declare @a intset @a=5print @a--使用select语句赋值declare @user1 nvarchar(50)select @user1='张三'print @user1declare @user2 nvarchar(50)select @user2 = Name from ST_User where ID=1 print @user2--使用update语句赋值declare @user3 nvarchar(50)update ST_User set @user3 = Name where ID=1 print @user3二、表、临时表、表变量--创建临时表1create table #DU_User1([ID] [int] NOT NULL,[Oid] [int] NOT NULL,[Login] [nvarchar](50) NOT NULL,[Rtx] [nvarchar](4) NOT NULL,[Name] [nvarchar](5) NOT NULL,[Password] [nvarchar](max) NULL,[State] [nvarchar](8) NOT NULL);--向临时表1插入一条记录insert into #DU_User1 (ID,Oid,[Login],Rtx,Name,[Password],State) values (100,2,'LS','0000','临时','321','特殊');--从ST_User查询数据,填充至新生成的临时表select * into #DU_User2 from ST_User where ID<8--查询并联合两临时表select * from #DU_User2 where ID<3 union select * from #DU_User1--删除两临时表drop table #DU_User1drop table #DU_User2--创建临时表CREATE TABLE #t([ID] [int] NOT NULL,[Oid] [int] NOT NULL,[Login] [nvarchar](50) NOT NULL,[Rtx] [nvarchar](4) NOT NULL,[Name] [nvarchar](5) NOT NULL,[Password] [nvarchar](max) NULL,[State] [nvarchar](8) NOT NULL,)--将查询结果集(多条数据)插入临时表insert into #t select * from ST_User--不能这样插入--select * into #t from dbo.ST_User--添加一列,为int型自增长子段alter table #t add [myid] int NOT NULL IDENTITY(1,1)--添加一列,默认填充全球唯一标识alter table #t add [myid1] uniqueidentifier NOT NULL default(newid())select * from #tdrop table #t--给查询结果集增加自增长列--无主键时:select IDENTITY(int,1,1)as ID, Name,[Login],[Password] into #t from ST_Userselect * from #t--有主键时:select (select SUM(1) from ST_User where ID<= a.ID) as myID,* from ST_User a order by myID --定义表变量declare @t table(id int not null,msg nvarchar(50) null)insert into @t values(1,'1')insert into @t values(2,'2')select * from @t三、循环--while循环计算1到100的和declare @a intdeclare @sum intset @a=1set @sum=0while @a<=100beginset @sum+=@aset @a+=1endprint @sum四、条件语句--if,else条件分支if(1+1=2)beginprint '对'endelsebeginprint '错'end--when then条件分支declare @today intdeclare @week nvarchar(3)set @today=3set @week=casewhen @today=1 then '星期一'when @today=2 then '星期二'when @today=3 then '星期三'when @today=4 then '星期四'when @today=5 then '星期五'when @today=6 then '星期六'when @today=7 then '星期日'else '值错误'endprint @week五、游标declare @ID intdeclare @Oid intdeclare @Login varchar(50)--定义一个游标declare user_cur cursor for select ID,Oid,[Login] from ST_User --打开游标open user_curwhile @@fetch_status=0begin--读取游标fetch next from user_cur into @ID,@Oid,@Loginprint @ID--print @Loginendclose user_cur--摧毁游标deallocate user_cur六、触发器触发器中的临时表:Inserted存放进行insert和update 操作后的数据Deleted存放进行delete 和update操作前的数据--创建触发器Create trigger User_OnUpdateOn ST_Userfor UpdateAsdeclare @msg nvarchar(50)--@msg记录修改情况select @msg = N'姓名从“' + + N'”修改为“' + + '”' from Inserted,Deleted--插入日志表insert into [LOG](MSG)values(@msg)--删除触发器drop trigger User_OnUpdate七、存储过程--创建带output参数的存储过程CREATE PROCEDURE PR_Sum@a int,@b int,@sum int outputASBEGINset @sum=@a+@bEND--创建Return返回值存储过程CREATE PROCEDURE PR_Sum2@a int,@b intASBEGINReturn @a+@bEND--执行存储过程获取output型返回值declare @mysum intexecute PR_Sum 1,2,@mysum outputprint @mysum--执行存储过程获取Return型返回值declare @mysum2 intexecute @mysum2= PR_Sum2 1,2print @mysum2八、自定义函数函数的分类:1)标量值函数2)表值函数a:内联表值函数b:多语句表值函数3)系统函数--新建标量值函数create function FUNC_Sum1(@a int,@b int)returns intasbeginreturn @a+@bend--新建内联表值函数create function FUNC_UserTab_1(@myId int)returns tableasreturn (select * from ST_User where ID<@myId)--新建多语句表值函数create function FUNC_UserTab_2(@myId int)returns @t table([ID] [int] NOT NULL,[Oid] [int] NOT NULL,[Login] [nvarchar](50) NOT NULL,[Rtx] [nvarchar](4) NOT NULL,[Name] [nvarchar](5) NOT NULL,[Password] [nvarchar](max) NULL,[State] [nvarchar](8) NOT NULL)asbegininsert into @t select * from ST_User where ID<@myIdreturnend--调用表值函数select * from dbo.FUNC_UserTab_1(15)--调用标量值函数declare @s intset @s=dbo.FUNC_Sum1(100,50)print @s--删除标量值函数drop function FUNC_Sum1谈谈自定义函数与存储过程的区别:一、自定义函数:1. 可以返回表变量2. 限制颇多,包括不能使用output参数;不能用临时表;函数内部的操作不能影响到外部环境;不能通过select返回结果集;不能update,delete,数据库表;3. 必须return 一个标量值或表变量自定义函数一般用在复用度高,功能简单单一,争对性强的地方。

相关文档
最新文档