读书人

记一上较复杂的SQL

发布时间: 2012-09-28 00:03:35 作者: rapoo

记一下较复杂的SQL

最近在应用中用到两张表:

XZ_VIEW_INDEX_SJFW :? 主表

ACF_SYS_GWATTACH??? :? 正文/附件存储表

?

正文或附件都以Blob字段存于 正文/附件存储表 中,该表的FILE_ID字段与主表中的ZW(正文序号)或FJ(附件序号)相关联。但是主表中的ZW和FJ字段是VARCHAR型的,而 正文/附件存储表 中的FILE_ID字段是数值型的,并且,主表中的ZW,FJ两个字段有可能为空,也有可能是中文,所以不能直接使用关联来从三张表中查询记录。

现在要求就是用一个SQL查询数据,如果有ZW或FJ值,则需要从 正文/附件存储表 中把对应的正文或附件也取出来。

?

为了防止非数值型与数值型字段值进行比较导致出错,所以先写了个自定义函数用来判断一个值是否是数字:

--发文随机抽样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 Server

热点推荐