A. sql server 中的自定义函数应该如何调用
select dbo. get_supinfo('content ','table')
B. sql2005中 表值函数是什么
表值函数是数据库中一种较为特殊的函数类型,它的悔唤返回值不再只是一个数值搜指或一个字符串,而是一张数据表。也就是说表值函数返回的是 table 数据类型。对于内联表值函数,没有函数主体;表是单个 SELECT 语句的结果集。使用表值函数的时候,把函数直接当成是表或视图使用,表世前配值函数的参数传入方法与标量函数没有区别。
C. 用T-SQL语句自定义一表值函数
declare @sql varchar(8000)
set @sql='select * from '
if flag=1
set @sql=@sql+'CP1'
if flag=2
set @sql=@sql+'XSS1'谨嫌态祥源
if flag=3
set @sql=@sql+'者谈XSCP1'
exec(@sql)
D. SQL SERVER函数之深入表值函数的处理分析
有些情况可能用下表值函数,表值函数主要用于数据计算出来返回结果集,可以带参数(和视图的一个大的区别),如果函数中没有过多的逻辑处理,如变量的定义,判断等,
表值函数返回结果集可以简单向下面这么写:
复制代码
代码如下:
CREATE
FUNCTION
Fun_GetReportNews(@type
varchar(10))
RETURNS
TABLE
AS
RETURN
(
SELECT
TPR_ID,TPR_Title,TPR_Date
FROM
TP_ReportNews
WHERE
TPR_Type
=
@type
)
调用的时候就
SELECT
XX
FROM
Fun_GetReprotNews('xx')
如果函数中要定义变量,进行判断计算处理什么的,写法有点不一样了,要定义表变量才行,表值函数里是不允许创建临时表的,只能是表变量。
举个简单的写法样式,如下:
复制代码
代码如下:
CREATE
FUNCTION
FUN_GetInfoList(@type
varchar(10))
RETURNS
@Table
TABLE(TPR_ID
int,TPR_Title
nvarchar(100),TPR_PubDate
datetime)
AS
BEGIN
DECLARE
@a
varchar(10)
SELECT
@a
=
xx
FROM
XX
WHERE
xx
=
@type
INSERT
@Table
SELECT
XX,XX,XX
FROM
TableName
WHERE
XX
=
@a
--表变量里定义的列数和取值列数要一致
RETURN
END
如果进行多表操作,可以在函数体内定义表变量来存放结果集再进行关联查询。
标量值函数也贴一个样子好了,老掉牙的了,呵呵~~
复制代码
代码如下:
CREATE
FUNCTION
FUN_DataFormat
(@strDate
datetime)
RETURNS
varchar(20)
AS
BEGIN
declare
@date
varchar(20)
set
@date
=
DATENAME(YY,@strDate)+'年'+Convert(VARCHAR,MONTH(@strDate))+'月'+Convert(VARCHAR,DAY(@strDate))+'日'
return
@date
END
访问标量值函数时一般在函数名前加dbo,不然会被认为是系统内置函数,却因又不是系统内置函数而会报错。
上面的可以这么测试
select
dbo.FUN_DataFormat(getdate())
就忽悠这些了~~~~~~~
E. java 调用sql表值函数不成功 返回“结果集没有当前行”
String sql_daystate="select rid from daystate('"+in+"','"+out+"')";
in和out在字符串sql_daystate中自动转换成为了String,和函数参数类型不匹配。无法运行。
不信你讲sql_daystate打印出来看看。
F. java调用oracle存储过程 关于sql里面in函数参数的问题
调用存储过程是java 把组合起来的字唤乱搜符串传到数据库后台操作,如果你in ( pkStagesPersonArray),传到数据库后台还是 in ( pkStagesPersonArray) 而非你想要的 in('1330251','1336140' )所以你应和历该把pkStagesPersonArray 里面的内容转换成 '1330251','陪谨1336140' 再拼接起来
G. plsql自定义函数 不需要返回值怎样写
游标变量
通过游标,我们可以取得返回结果集(往往是select语句查询的结果集)中的任何一行数据,从而提高共享的效率。
参照变量refcursor使用:
定义游标:
1.定义一个游标类型:
Type自定义游标名isrefcursor;2.定义一个游标变量:变量名自定义游标名;
打开游标:
Open游标变量forselect语句;
取出当前游标指向的行:
Fetch游标变量into其他变量;
判断游标是否指向记录最后:
游标变量%notfound;关闭游标:Close游标名。
第二种:
var变量名变量类型
call函数名(参数值,...)into:变量名;print变量名第三种:
select函数名(参数,...)fromal;
案例:请编写一个函数,可以接收用户名并返回该用户的年薪。createfunctioninName_outSal(v_in_namevarchar2)returnnumberis
v_annual_salnumber;begin
select(sal+nvl(comm,0))*13intov_annual_salfromempwhereename=v_in_name;returnv_annual_sal;end;/
函数和过程的区别:
1、函数必须有返回值,而过程可以没有;2、函数和过程在java中调用的方式不一样;
java中调用oracle函数可以在select语句中直接调用,如:select自定义的函数名(参数)from表;
过程则是使用CallableStatement完成调用。
Java调用函数方式:packagecom.test;
importjava.sql.ResultSet;importjava.sql.SQLException;publicclassTestFunction{
//如何在java中调用自己编写的函数
publicstaticvoidmain(String[]args){
Stringsql="selectinName_outSal('KING')annualfromal";ResultSetrs=SQLHelper.executeQuery(sql,null);try{
if(rs.next()){
System.out.println(rs.getDouble("annual"));//此处可以用数字或别名接收返回值}
}catch(SQLExceptione){e.printStackTrace();}finally{
if(rs!=null){try{
rs.close();
}catch(SQLExceptione){e.printStackTrace();}}
rs=null;}}
Java调用过程方式:packagecom.test;
importjava.sql.CallableStatement;importjava.sql.Connection;importjava.sql.DriverManager;publicclassTestProcere{
//调用oracle中update_sal存储过程
publicstaticvoidmain(String[]args){Connectionct=null;
CallableStatementcs=null;try{
//加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver");//得到连接
ct=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl","scott","tiger");
//创建CallableStatement接口引用对象
cs=ct.prepareCall("{callupdate_sal(?,?)}");//给?赋值
cs.setString(1,"BOSS");cs.setFloat(2,8888f);//执行我们的语句cs.execute();//提交
ct.commit();
}catch(Exceptione){e.printStackTrace();}finally{try{
if(cs!=null){cs.close();}
if(ct!=null){ct.close();}
}catch(Exceptione2){e2.printStackTrace();}
cs=null;ct=null;}
}}
pl/sql知识--包(扩张了解,自己看)
包用于在逻辑上组合过程和函数,它由包规范和包体两部分组成。1、我们可以使用createpackage命令来创建包:建包基本语法:
create[orreplace]package包名is
procere过程名(变量名变量类型,...);
function函数名(变量名变量类型,...)return数据类型;end;/
包的规范:只包含了过程和函数的说明,但是没有过程和函数的实现代码。包体:用于实现包规范的过程和函数。
请编写一个包,该包有一个过程,该过程可以接收用户名和新的薪水。(将来用于通过用户去更新薪水)还有一个函数,该函数可以接收一个用户名(将来要实现得到该用户的年薪是多少)
createpackageemp_packageis
procereupdate_sal(v_in_enamevarchar2,v_in_newsalnumber);functioninName_outSal(v_in_namevarchar2)returnnumber;end;
2、建立包体可以使用createpackagebody命令建立包体基本语法:
createorreplacepackagebody包名is
procere过程名(变量名变量类型,...)is--声明变量;begin
--执行语句;exception
when异常名then--异常处理;end;
function函数名(变量名变量类型,...)return数据类型is--声明变量;begin
--执行语句;end;end;/
案例:请实现前面定义的包中的过程和函数。
gin
select(sal+nvl(comm,0))*13intov_annual_salfromempwhere
ename=v_in_name;
returnv_annual_sal;end;end;/
细节说明:
1、包体中要现实的函数或过程,应当在包规范中声明;
2、在调用包中的某个函数或过程的时候,需要使用对应的方法才可以调用。3、如何调用包的过程或函数
当调用包的过程或是函数时,在过程和函数前需要带有包名,如果要访问其它方案的包,还需要在包名前加方案名。调用基本方法:
exec方案名.包名.过程名(参数,...);call方案名.包名.函数名(参数,...);
也可以直接用select方案名.包名.函数名(参数,...)fromal;
H. sql server 怎样用select语句调用自定义表值函数
--自定义函数的参数是表的字段,这种情况要用cross apply啦
Select B.* FROM [master].[dbo].[分列测试] A cross apply dbo.f_split(应用行业代码,';') B