易截截图软件、单文件、免安装、纯绿色、仅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 创建作业 日期转换 约束 游标

创建作业:
DECLARE @jobid uniqueidentifier, @jobname sysname
SET @jobname = N'作业名称'
IF EXISTS(SELECT * from msdb.dbo.sysjobs WHERE name=@jobname)
EXEC msdb.dbo.sp_delete_job @job_name=@jobname
EXEC msdb.dbo.sp_add_job
@job_name = @jobname,
@job_id = @jobid OUTPUT
--定义作业步骤
DECLARE ......

sql 常用

公司组织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 ......

SQL字符串处理函数汇总

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

通过分析SQL语句的执行计划优化SQL

通过分析SQL语句的执行计划优化SQL(总结)
做 DBA快7年了,中间感悟很多。在DBA的日常工作中,调整个别性能较差的SQL语句时一项富有挑战性的工作。其中的关键在于如何得到SQL语句的执行计划和如何从SQL语句的执行计划中发现问题。总是想将日常经验的点点滴滴总结一下,但是直到最近才下定决心,总共花了3个周末时间,才将其 ......

Free BarCode128 SQL编码

CREATE   FUNCTION StringToBarcode
 (@Value Varchar(50)   )
RETURNS NVarchar(100)
AS
BEGIN
 Declare @charCount int
 Declare  @charPos int, @minCharPos int
 declare @currentChar int, @checksum int
   Declare @isTableB int,@isValid int
 &n ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号