db2存储过程参数连接的问题

JS 2011-08-31 03:57:01
在存储过程中定义了参数 DECLARE V_YRMTH VARCHAR(8);
SET V_YRMTH=RTRIM(CHAR(IN_STAT_DATE)); ----例如:'201106'

在后面使用这个时间参数(clndr_dt_id 这个在源表A中定义的是 integer )
A.clndr_dt_id = integer('''||V_YRMTH||''')和 A.clndr_dt_id = '||V_YRMTH||'这两种方式,都是正确的,让我琢磨不透,我知道||是连接符号,知道'''中有一个是转义字符。我就是不明白第二种形式下为什么还要两端加一个 ' , 里面的参数是字符型的,通过||连接之后应该需要转型啊,因为clndr_dt_id 是integer型的,但是它却是加 ' 就可以了 ,请高人帮我解答,小弟在线等高见。

又想到一种情况,如果我定义的参数 DECLARE V_YRMTH integer; 就是整型, 那么
A.CLNDR_DT_ID = ?? (应该怎么写呢)

请大哥大姐们帮帮小弟啊,献高分!!!
...全文
99 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
JS 2011-09-01
  • 打赏
  • 举报
回复
天啊! 我感觉我说的很清楚了,怎么前辈们没有看懂啊。

A.clndr_dt_id = integer('''||V_YRMTH||''')和 A.clndr_dt_id = '||V_YRMTH||' 这两种写法是我从存储过程里面抠出来的,我就是这边不理解

好吧!我举个例子:
(参数声明和定义等一些预操作我就不写了,直接写insert into后面的语句)
SET V_STMT='
INSERT INTO PERSON_COUNT_INFO(
SELECT TIME,
CITY_ID ,
COUNT(DISTINCT PERSON_ID) AS PERSON_COUNT,
FROM PERSON_INFO A
WHERE A.TIME=INTEGER('''||VI_YM||''')
GROUP BY TIME,CITY_ID
)
WITH UR ';
EXECUTE IMMEDIATE V_STMT;

--注释 person_info 表中的time字段定义的是integer ,参数 VI_YM 定义的是传入的月份(字符型)如:'201007'
上面是随手写的统计某月份的人数的例子,问题就在这里。
A.TIME=INTEGER('''||VI_YM||''')
这句 用 A.TIME = '||VI_YM||' 也是正确的 ,其实我的问题就是||连接的问题,请高人帮忙看看,小弟在此侯音!多谢!
zhaojianmi1 2011-09-01
  • 打赏
  • 举报
回复
三个单引号转义为一个
JS 2011-09-01
  • 打赏
  • 举报
回复
前辈您好,您的解答我有点懂了,我想追问一下上面的分解的五句话就是我所问的根本原因吗?还有不是两’’转义为一个’吗?
zhaojianmi1 2011-09-01
  • 打赏
  • 举报
回复
你可以把字符串插入到某个表看看结果是不是这样
zhaojianmi1 2011-09-01
  • 打赏
  • 举报
回复
然后回答你
A.TIME=INTEGER('''||VI_YM||''')
A.TIME = '||VI_YM||'

假设VI_YM = '201007',出来的结果是
字符串:A.TIME=INTEGER('201007')
和字符串A.TIME=201007
zhaojianmi1 2011-09-01
  • 打赏
  • 举报
回复
首先明确变量VI_YM是字符,time字段是数字
然后看整句话:
SET V_STMT='
INSERT INTO PERSON_COUNT_INFO(
SELECT TIME,
CITY_ID ,
COUNT(DISTINCT PERSON_ID) AS PERSON_COUNT,
FROM PERSON_INFO A
WHERE A.TIME=INTEGER('''||VI_YM||''') GROUP BY TIME,CITY_ID
)
WITH UR ';
可以分开写成五句话:
SET V_STMT='
INSERT INTO PERSON_COUNT_INFO(
SELECT TIME,
CITY_ID ,
COUNT(DISTINCT PERSON_ID) AS PERSON_COUNT,
FROM PERSON_INFO A
WHERE A.TIME=INTEGER(';

SET V_STMT=V_STMT||''';
SET V_STMT=V_STMT||VI_YM;
SET V_STMT=V_STMT||''';
SET V_STMT=V_STMT||') GROUP BY TIME,CITY_ID
)
WITH UR ';

其中第二句和第四句的'''是转义为一个'
zhaojianmi1 2011-08-31
  • 打赏
  • 举报
回复
这个代码感觉好奇怪
如果V_YRMTH是整型,那么A.clndr_dt_id = V_YRMTH
WWWWA 2011-08-31
  • 打赏
  • 举报
回复
源代码就是这样?什么版本,DB2是不支持隐形转换的
第1章 性能调整概述 1.1 性能概述 1.2 性能评估 1.3 建立性能目标 1.4 什么时候需要做性能调整 1.5 性能调整准则 1.6 性能调整的方法和过程 1.7 性能调整总结 第2章 存储I/O设计 2.1 存储基本概念 2.2 存储架构 2.3 存储相关性能调整案例 2.4 存储I/O设计总结 第3章 操作系统相关性能问题 3.1 HP-UX系统性能监控综述 3.2 AIX性能监控综述 3.3 操作系统性能优化 3.4 逻辑卷和lvmo优化 3.5 总结 第4章 数据库物理设计和逻辑设计 4.1 数据库物理设计 4.2 数据库逻辑设计 4.3 使用Autoconfig设计数据库 4.4 其他高级设计技术 4.5 数据库设计总结 第5章 DB2性能监控 5.1 快照监视器案例 5.2 事件监视器及监控案例 5.3 利用表函数监控 5.4 性能管理视图及案例 5.5 db2pd 5.6 db2mtrk及监控案例 5.7 本章小结 第6章 数据库配置参数调整 6.1 数据库配置参数 6.2 监控和调优实例(DBM)配置参数 6.3 监控和调优DB配置参数 6.4 调整DB2概要注册变量 6.5 内存自动调优 6.6 总结 第7章 锁和并发 7.1 锁等待及调整案例 7.2 锁升级及调整案例 7.3 死锁及调整案例 7.4 隔离级别与锁 7.5 最大化并发性 7.6 锁相关的性能问题总结 7.7 锁与应用程序开发 7.8 本章小结 第8章 索引设计与优化 8.1 索引概念 8.2 索引结构 8.3 理解索引访问机制 8.4 索引设计 8.5 索引创建原则与示例 8.6 影响索引性能的相关配置 8.7 索引维护 8.8 DB2 Design Advisor(db2advis) 8.9 索引调整总结 第9章 DB2优化器 9.1 DB2优化器介绍 9.2 SQL语句执行过程 9.3 优化器组件和工作原理 9.4 扫描方式 9.5 连接方法 9.6 优化级别 9.7 如何影响优化器来提高性能 9.8 优化器总结 第10章 统计信息更新与碎片整理 10.1 统计信息更新 10.2 碎片整理 10.3 重新绑定程序包 10.4 本章小结 第11章 SQL语句调优 11.1 通过监控找出最消耗资源的SQL语句 11.2 通过解释工具分析SQL语句执行计划 11.3 理解SQL语句如何工作 11.4 SQL调优案例 11.5 提高应用程序性能 第12章 DB2调优案例、问题总结和技巧 12.1 调优案例一:某移动公司存储设计不当和SQL引起的I/O瓶颈 12.2 调优案例二:某银行知识库系统锁等待、锁升级引起性能瓶颈 12.3 调优案例三:某汽车制造商ERP系统通过调整统计信息提高性能 12.4 调优案例四:某农信社批量代收电费批处理慢调优案例 12.5 调优学习案例:利用压力测试程序学习DB2调优 后记
目录 DB2维护手册 1 一、 DB2入门-数据库实例 4 二、 DB2日常维护日操作 12 1、 检查管理服务器是否启动 12 2、 检查DB2实例是否已经启动 12 3、 查看表空间状态是否正常 12 4、 查看表的状态 12 5、 查看磁盘空间 13 6、 检查存储管理软件是否正常 13 7、 检查数据库备份是否正常 13 8、 检查归档日志是否正确归档了 13 9、 查看缓冲池的命中率 13 10、 查看当前运行最频繁的SQL,其命中率是否正常 14 11、 查看当前连接的应用程序,有没有非法连接 14 12、 检查有没有死锁 14 13、 对表和索引进行RUNSTATS 14 14、 检查表是否需要重组 14 15、 对需要重组的表进行重组 15 三、 DB2日常维护月操作 15 1、 查看DB2日志 15 2、 检查备份和日志是否都保存好了 15 四、 DB2日常维护季度操作 15 1、 通过快照监控器,查看系统性能如何 15 2、 数据库补丁级别 15 五、 注意事项 15 1、 不要删除活动日志文件 15 2、 注意交易日志存储空间 16 3、 按照系统的实际工作量配置日志空间 16 4、 设置正确数据库代码页 16 5、 检查许可证(LICENSE)安装情况 16 6、 创建数据库前调整好系统时间 16 7、 不要随便执行 CHOWN (CHMOD) –R (UNIX/LINUX) 17 8、 在归档日志模式下使用LOAD记得加NONRECOVERABLE参数 17 六、 附:以脱机方式重组表 17 七、 附:索引重组 17 八、 收集和更新统计信息的准则 19 九、 附:使用 CLP 捕获数据库运行状况快照 21 十、 IBM DB2 日常维护汇总 22 十一、 DB2常用命令集 28

5,889

社区成员

发帖
与我相关
我的任务
社区描述
IBM DB2 是美国IBM公司开发的一套关系型数据库管理系统,它主要的运行环境为UNIX(包括IBM自家的AIX)、Linux、IBM i(旧称OS/400)、z/OS,以及Windows服务器版本
社区管理员
  • DB2
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧