易截截图软件、单文件、免安装、纯绿色、仅160KB

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、ASCII()
返回字符表达式最左端字符的ASCII 码值。在ASCII()函数中,纯数字的字符串可不用‘’括起来,但含其它字符的字符串必须用‘’括起来使用,否则会出错。
2、CHAR()
将ASCII 码转换为字符。如果没有输入0 ~ 255 之间的ASCII ......

SQL Databases Don't Scale (简译)

我经常问的一个问题是:你是如何来扩展SQL Database的?有很多的方法可以做到,比如使用缓存,共享或者用其他的技术将压力从数据库释放,但实际上我们没有。SQL Database从根本上来说是不具有扩展性的,我们也没有魔法使它忽然具有扩展性。
什么是扩展性?
必须具有几下几点:
横向扩展:更多的server可以带来更高的性能 ......

sql server系统表详细说明

 sql server系统表详细说明
sysaltfiles
 主数据库 保存数据库的文件
syscharsets
 主数据库字符集与排序顺序
sysconfigures
主数据库 配置选项
 syscurconfigs
主数据库当前配置选项
  sysdatabases
主数据库服务器中的数据库
  syslanguages
主数据库语言
&n ......

SQL语句使用 一个题目涉及到的50个Sql语句

转载自:http://www.diybl.com/course/7_databases/sql/sqlServer/2009124/154621_2.html
一个题目涉及到的50个Sql语句
Student(S#,Sname,Sage,Ssex) 学生表
Course(C#,Cname,T#) 课程表
SC(S#,C#,score) 成绩表
Teacher(T#,Tname) 教师表
问题:
1、查询“001”课程比“002”课程成绩高的 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号