最近在应用中用到两张表:
XZ_VIEW_INDEX_SJFW : 主表
ACF_SYS_GWATTACH : 正文/附件存储表
正文或附件都以Blob字段存于 正文/附件存储表 中,该表的FILE_ID字段与主表中的ZW(正文序号)或FJ(附件序号)相关联。但是主表中的ZW和FJ字段是VARCHAR型的,而 正文/附件存储表 中的FILE_ID字段是数值型的,并且,主表中的ZW,FJ两个字段有可能为空,也有可能是中文,所以不能直接使用关联来从三张表中查询记录。
现在要求就是用一个SQL查询数据,如果有ZW或FJ值,则需要从 正文/附件存储表 中把对应的正文或附件也取出来。
为了防止非数值型与数值型字段值进行比较导致出错,所以先写了个自定义函数用来判断一个值是否是数字:
CREATE OR REPLACE FUNCTION IsNum (p_in VARCHAR2) RETURN NUMBER AS
val NUMBER;
BEGIN
select NVL(length(translate(trim(p_in),' +-.0123456789',' ')),0) into val from dual;
if val=0 then
return 1;
else
return 0;
end if;
END IsNum;
然后费了九牛二虎之力拼凑出一个SQL,在这里记一下,防止忘记:
--发文随机抽样
select * from (
select
A.MODULE_CODE,
A.BIZ_CODE,
A.OP_TYPE,
A.LASTTIME,
A.BT,
A.WH,
A.ZTC,
A.CYCL,
A.SJ,
A.ZW,
A.FJ,
decode(isNum(A.ZW), 1, B.EXT_NAME, -1) "正文扩展名",
decode(isNum(A.ZW), 1, B.FILE_NAME, -1) "正文文件名",
decode(isNum(A.ZW), 1, B.FILE_CONTENT, empty_blob()) "正文",
decode(isNum(A.FJ), 1, C.EXT_NAME, -1) "附件扩展名",
decode(isNum(A.FJ), 1, C.FILE_NAME, -1) "附件文件名",
decode(isNum(A.FJ), 1, C.FILE_CONTENT, empty_blob()) "附件"
from UA.XZ_VIEW_INDEX_SJFW A, UB.ACF_SYS_GWATTACH B, UB.ACF_SYS_GWATTACH C
where B.FILE_ID(+)=decode(isNum(A.ZW), 1, A.ZW, null)
and C.FILE_ID(+)=decode(isNum(A.FJ), 1, A.FJ, null)
order by dbms_random.value
)
where rownum <= 10
分享到:
相关推荐
根据提供的文件信息,我们可以分析并总结出以下关于SQL生成助记码函数的知识点: ### SQL生成助记码函数概述 该SQL脚本定义了一个名为`fn_GetPy`的函数,其功能是将输入的字符串转换为助记码(PinYin首字母缩写)...
- **SQL Trace**:通过启用SQL跟踪功能,可以收集更为详细的SQL执行轨迹信息,这对于诊断复杂的性能问题非常有帮助。 - **ASH/AWR**:活动会话历史(Active Session History)和自动工作负载资料库可以帮助追踪...
在SQL Server中,遍历表中的记录是数据库操作中常见的一种任务,特别是在处理逐行处理数据或执行复杂逻辑时。本文将深入探讨两种方法:使用表变量和使用游标。 首先,我们来看如何通过表变量来遍历记录。表变量在...
由于体积较大,本书分两卷压缩,请都下载完再解压! Oracle 11g SQL和PL SQL从入门到精通 pdf格式电子书 下载(一) http://download.csdn.net/source/3268267 Oracle 11g SQL和PL SQL从入门到精通 pdf格式电子书 ...
2. **数据清洗**:对于需要根据特定规则对数据进行清洗的应用场景,可能会使用到包含多个CASE WHEN语句的复杂SQL语句。 3. **报表生成**:生成复杂的报表时,往往需要从多个表中抽取数据并进行复杂的联接操作,从而...
SQL Server 的性能也很高,但是需要付出一些代价,如增加额外的复杂操作和磁盘存储。 3. 安全性: MySQL 有一个用于改变数据的二进制日志,可以快速地从主机上复制数据到客户机上。 SQL Server 也可以记录 SQL 的...
- **适用范围**:虽然本教程基于较旧版本的SQL Server 6.5(1997年发布),但其中的基本概念和操作仍然适用于现代版本。 #### 二、SQL基础知识 - **SQL的重要性**:对于从事网站开发或维护数据库的人来说,熟练掌握...
- 性能分析:通过分析执行时间,SQLMON可以帮助识别性能瓶颈,找出耗时较长的查询进行优化。 - 错误检测:当SQL语句执行出错时,SQLMON会捕获错误信息,有助于快速定位问题所在。 - 数据库事务跟踪:可以追踪事务...
- **不推荐做法**:使用复杂的日期运算,如`SELECT id FROM A WITH (NOLOCK) WHERE DATEDIFF(hh, time, GETDATE()) 。 ##### 5. 排序与去重的优化 在使用`GROUP BY`、`DISTINCT`和`ORDER BY`等操作时,应当尽可能...
由于SAS SQL采用了标准SQL语法,因此对于已经熟悉SQL的人来说,学习成本较低。此外,SAS还提供了丰富的文档和支持资源,使得新手也能快速上手。 **4.2 高效的数据处理能力** SAS SQL能够处理大量数据,并且通过...
这是一种较传统的处理方式,适用于数据量较小的情况: ```sql DECLARE @max INTEGER, @id INTEGER; DECLARE cur_rows CURSOR LOCAL FOR SELECT 主字段, COUNT(*) FROM 表名 GROUP BY 主字段 HAVING COUNT(*) > 1; ...
- **动态SQL构造**:此存储过程通过动态拼接 SQL 字符串的方式来实现复杂的分页逻辑,这使得其具有较高的灵活性。 - **TOP 关键字的使用**:利用 SQL Server 的 TOP 关键字来限制返回的记录数量。 - **子查询与嵌套...
- **并行查询**:在并行查询中,一个复杂的SQL语句被分解成多个较小的子任务,这些子任务可以由不同的进程同时执行。例如,在进行大表扫描时,可以将表分成多个分区,每个分区由一个独立的进程处理。 - **并行DDL...
- **SQL的复杂性**:虽然本书提供了一些基本的SQL知识,但实际上SQL是一门非常复杂的语言,拥有众多高级特性和用法。 - **深入学习资源**:对于希望更深入学习SQL的读者,推荐参考Microsoft SQL Server相关的书籍和...
迷你SQL2000是一款专为用户设计的轻量级、免安装的数据库管理系统,尤其适合于对系统资源要求较低且需要快速部署的环境。它继承了Microsoft SQL Server 2000的核心功能,但体积小巧,易于使用,是个人工作和小型项目...
例如耽搁查询 的排序、连接、扫描和GROUP BY字句同时执行,SQL SERVER根据系统的负载情况决定最优的并行等级,复杂的需要消耗大量的CPU的查询最适合并行处理。但是更新操作UPDATE,INSERT, DELETE还不能并行处理。 ...
在资源占用方面,Navicat for SQL Server 设计得相当轻量级,即使在较低配置的计算机上也能流畅运行,不会对系统性能造成太大影响。 总的来说,Navicat for SQL Server 是一个功能全面、易于使用的数据库管理工具,...
本文主要探讨了基于复杂SQL查询的自动汇总表的应用研究,旨在提高数据库在处理海量数据以及复杂查询时的性能和响应速度。文章围绕着QGM(Query Graph Model)模型和AST(Automatic Summary Table,自动累加表)的...
这种方法简单易用,无需编写复杂的SQL查询语句,因此在开发和维护数据库系统的应用中被广泛采用。但这种方法有一个显著的缺陷,即当表中的记录数非常大时,执行速度会非常慢。例如,在一个包含100万记录的表上执行该...
6. **开发工具**:SQL Server提供集成的开发环境SSMS(SQL Server Management Studio),支持复杂的脚本编写和调试。Access虽然也有自己的设计工具,但在复杂应用开发方面不如SQL Server。 7. **扩展性**:SQL ...