sql函数创建
‘壹’ 在sql plus 中创建存储函数然后然后通过系别查询学生叫表中学生的人数并调用
在 sql plus 中创建存储函数需要使用 create or replace function 语句。例如,如果要创建一个名为 get_student_count 的存储函数,可以使用以下语句:create or replace function get_student_count(p_department_id number)
return number
as
v_student_count number;
begin
select count(*)
into v_student_count
from student
where department_id = p_department_id;
return v_student_count;
end;
/
上面的语句定义了一个名为 get_student_count 的存储函数,该函数接收一个名为 p_department_id 的参数,并返回一个数值。在函数体中,我们首先执行一条查询语句,统计 student 表中给定系别的学生人数,并将结果存储在变量 v_student_count 中。最后,我们返回变量 v_student_count 的值作为函数的返回值。
要调用这个存储函数,可以在 select 语句中使用函数名作为一列,并传入所需的参数。例如,如果要查询系别为 1 的学生人数,可以执行以下语句:
Copy code
select get_student_count(1) from al;
该语句会调用 get_student_count 函数,并将系别为 1 的学生人数作为查询结果返
继续
回。
需要注意的是,上面的存储函数假设 student 表中存在 department_id 字段,并且该字段用于存储学生所属的系别。如果不存在该字段,或者该字段的名称不同,那么需要根据实际情况修改存储函数的定义。
另外,在实际应用中,可能需要根据需要对存储函数进行更复杂的编写,例如添加更多的参数,或者进行更复杂的逻辑操作。如果有这样的需求,那么可以根据实际情况进行修改,以满足实际需求。
‘贰’ 自己编写sql函数
create function [dbo].[Get_StrArrayStrOfIndex]
(
@str varchar(1024), --要分割的字符串
@split varchar(10), --分隔符号
@index int --取第几个元素
)
returns varchar(1024)
as
begin
declare @location int
declare @start int
declare @next int
declare @seed int
set @str=ltrim(rtrim(@str))
set @start=1
set @next=1
set @seed=len(@split)
set @location=charindex(@split,@str)
while @location<>0 and @index>@next
begin
set @start=@location+@seed
set @location=charindex(@split,@str,@start)
set @next=@next+1
end
if @location =0 select @location =len(@str)+1
--这儿存在两种情况:1、字符串不存在分隔符号 2、字符串中存在分隔符号,跳出while循环后,@location为0,那默认为字符串后边有一个分隔符号。
return substring(@str,@start,@location-@start)
end
使用举例:
select id,code=dbo.Get_StrArrayStrOfIndex(code,'.',4) from code_table