DB2 纯SQL存储过程与函数的一些限制
*给多个变量赋值
function只能使用
set (a,b,c)=(select a,b,c from #);
procedure只能使用
select a,b,c into a,b,c from #
*function无法嵌套调用带有inout或out参数的procedure,现象为:无法创建。
今天的进展结论是:
function可以调用任何procedure,但必须声明为modifies sql data,同时必须返回table类型,不能使单值或row类型
*procedure可以嵌套调用,哪怕是带inout参数的存储过程.
*function 可以嵌套调用.
*IBM开发者网站一篇文章说:function的效率比procedure高。
我的答案是相反。
同样的语句,function和procedure的首次调用时间有10倍左右的差距。
经过测试有如下结论:
1.如果参数完全一样,两次调用同样的function,首次调用速度很慢(2秒左右),但第二次开始就很快(0.2秒左右),但后来很快的调用应该是采用了缓存机制,而这个缓存的生存期未知。
2.同样的函数,只要参数发生任何变化,那么首次还是会很慢。
3.procedure很稳定,第一次和后面的调用差别不大。并且都是0.2秒级的。
而且最让人纳闷的是哪怕代码仅是一些比较判断,根本不涉及数据,function的效率也不敢恭维。
所以如果是使用频率相当高的代码,无论如何,想方设法都得改成procedure。
*procedure无法进行动态out参数procedure调用。
什么意思呢,就是要调用的procedure不是硬编码的
--这是没有问题的
create procedure out_proc
call in_proc;
end
--这也没有问题的
create procedure out_proc
...
statment='call in_proc()';
prepare s1 from statment;
execute s1;
end
--可以创建,但运行时会报错
create procedure out_proc
...
declare out_param int;
statment='call in_proc('||cast(out_param as char(10))||')';
prepare statment;
execute statment;
end
这些限制完全没有任何的文档可以查询到,是实际测试后得出的结论,特记于此,免得以后又走弯路
目前已经写好了调用procedure的function,性能确实要强过直接调用function。但碰到了新问题:
*调用了procedure的function不能象一般function一样在select语句中查询,比如
func1 returns table()
func2 returns table() --其中调用了procedure
那么
--直接获取func1,正常
select * from table(func1) as tmp
--直接获取func2,正常
select * from t
相关文档:
SQL聚合函
标签:sql聚合函数 杂谈
聚合函数:
1.AVG 返回组中的平均值,空值将被忽略。
例如:use northwind // 操作northwind数据库
Go
Select avg (unitprice) //从表中选择求unitprice的平均值
& ......
公司组织SQL水平考试,看了写教材,写了点总结发上来跟大家分享。
我公司使用的是Sybase ASE12.5,所以下面的一些特性是针对Sybase ASE的。
一:SQL Bisic
1:SQL(Structured Quary Language)特性:
a:标准化
b:非过程化的
c:可优化的
d:面向集合操作的
2:ASE中的数据类型
a:Numberic
b:Character
c:Dat ......
一、字符转换函数
1、ASCII()
返回字符表达式最左端字符的ASCII 码值。在ASCII()函数中,纯数字的字符串可不用‘’括起来,但含其它字符的字符串必须用‘’括起来使用,否则会出错。
2、CHAR()
将ASCII 码转换为字符。如果没有输入0 ~ 255 之间的ASCII 码值,CHAR() 返回NULL 。
3、LOWE ......
原文出处:http://www.dingos.cn/index.php?topic=1874.0
定义和用法
CONVERT() 函数是把日期转换为新数据类型的通用函数。
CONVERT() 函数可以用不同的格式显示日期/时间数据
语法
CONVERT(data_type(length),data_to_be_converted,style)
data_type(length) 规定目标数据类型(带有可选的长度)。data_to_be_conve ......
1、连接Oracle数据库
启动SQL*Plus,要求输入User Name、Password、Host String这三个参数,例如我在安装的时候默认创建的数据库为orcl,也就是SID,密码也为orcl,对应上面的三个参数如下所示:
User Name:orcl
Password:orcl
Host String:orcl as sysdba
就可以登录成功。
或者也可以使用默认的scott来登录:
......