AS400学习笔记:物理文件与逻辑文件解析

1 下载量 199 浏览量 更新于2024-08-03 收藏 8KB MD 举报
"AS400学习day1-day5" 在AS/400系统中,学习的内容主要围绕着Physical File(PF)和Logical File(LF)展开,这是AS/400数据库管理的核心概念。Physical File类似于文件夹,用于存放不同类型对象的源代码,而PF对象则是一种能够以表结构存储数据的对象。在Day2的学习中,我们深入探讨了如何生成和操作Physical Files。 首先,创建Physical File有两种主要方式:一是通过`CRTPF`命令,使用DDS(Data Description Specifications)语言代码来编译生成PF-DTA(Data Area),这允许定义数据字段、记录格式等;二是直接使用`CRTPF`命令创建PF-DTA,无需DDS代码。此外,还可以使用`CPYF`或`CRTDUPOBJ`命令复制已存在的PF。 在PF中,`UNIQUE`关键字是关键的约束条件,它用于标明文件中的主键数据是唯一的,不允许重复,这在数据库设计中至关重要,确保了数据的一致性和完整性。 Physical File与Logical File之间有明显的区别。PF在内存中占据空间并包含原始数据,而LF并不占用内存,也不直接存储数据。PF只能包含一个RecordFormat,而LF可以包含多达32个RecordFormat,提供了数据的逻辑视图。LF依赖于PF,而PF则不依赖LF。删除PF时,如果存在LF引用,PF将无法被删除,但LF可以被删除,即使它依赖于PF。 在PF中,数据类型是多样化的,包括单字节字符型(A)、十进制数字类型(S)、压缩型十进制数字类型(P)、双字节字符型(O)、双字节字符图形(G)、仅限双字节字符(J)、二进制数(B)、单精度浮点数(F)、十六进制字符(H)、时间类型(T)、时间戳类型(Z)、日期类型(L)以及任何双字节数据类型(E)和二进制字符类型(5)。 在PF/LF的关键字中,例如`ALL`关键字在LF中用于筛选或省去所有记录,`ALWNULL`允许字段值为空,`CMP`用于字段级别的比较,`COLHDG`则用来设置字段的列标题。这些关键字提供了丰富的数据处理和查询能力。 总结来说,AS/400的Day2学习主要集中在Physical File的创建、操作和其与Logical File的对比,以及PF的数据类型和关键字使用,这些都是进行有效数据管理和编程的基础。理解并熟练运用这些概念,对于在AS/400系统上开发和维护应用程序至关重要。

解释一下这段代码 with a as ( SELECT CONVERT(nvarchar(10), getdate() ,120) AS datatime,1 as sortnum union all SELECT CONVERT(nvarchar(10), DATEADD(day, -1, getdate()) ,120) AS datatime,2 as sortnum union all SELECT CONVERT(nvarchar(10), DATEADD(day, -2, getdate()) ,120) AS datatime,3 as sortnum union all SELECT CONVERT(nvarchar(10), DATEADD(day, -3, getdate()) ,120) AS datatime,4 as sortnum union all SELECT CONVERT(nvarchar(10), DATEADD(day, -4, getdate()) ,120) AS datatime,5 as sortnum union all SELECT CONVERT(nvarchar(10), DATEADD(day, -5, getdate()) ,120) AS datatime,6 as sortnum union all SELECT CONVERT(nvarchar(10), DATEADD(day, -6, getdate()) ,120) AS datatime,7 as sortnum ), b as ( select GET_DATE,TAG_VALUE from T_TAG_DATA where TAG_ID = 1408 ) , -- 当日产量 c as ( select a.datatime,ISNULL(sum(b.TAG_VALUE),0) as 当日产量 from a left join b on a.datatime = SUBSTRING(CONVERT(varchar(100), b.GET_DATE, 120),1,10) GROUP BY a.datatime ), -- 台时产量 d as( select a.datatime,b.TAG_VALUE as 台时产量 from a left join b on a.datatime = SUBSTRING(CONVERT(varchar(100), b.GET_DATE, 120),1,10) where SUBSTRING(CONVERT(varchar,GETDATE(),120),12,2) = SUBSTRING(CONVERT(varchar(100), b.GET_DATE, 120),12,2) ), -- 累计产量 e as ( SELECT CONVERT(nvarchar(10), getdate() ,120) AS datatime,sum(TAG_VALUE) as 累计产量 from b where GET_DATE <= getdate() union all SELECT CONVERT(nvarchar(10), DATEADD(day, -1, getdate()) ,120) AS datatime,sum(TAG_VALUE) as 累计产量 from b where GET_DATE <= DATEADD(day, -1, getdate()) union all SELECT CONVERT(nvarchar(10), DATEADD(day, -2, getdate()) ,120) AS datatime,sum(TAG_VALUE) as 累计产量 from b where GET_DATE <= DATEADD(day, -2, getdate()) union all SELECT CONVERT(nvarchar(10), DATEADD(day, -3, getdate()) ,120) AS datatime,sum(TAG_VALUE) as 累计产量 from b where GET_DATE <= DATEADD(day, -3, getdate()) union all SELECT CONVERT(nvarchar(10), DATEADD(day, -4, getdate()) ,120) AS datatime,sum(TAG_VALUE) as 累计产量 from b where GET_DATE <= DATEADD(day, -4, getdate()) union all SELECT CONVERT(nvarchar(10), DATEADD(day, -5, getdate()) ,120) AS datatime,sum(TAG_VALUE) as 累计产量 from b where GET_DATE <= DATEADD(day, -5, getdate()) union all SELECT CONVERT(nvarchar(10), DATEADD(day, -6, getdate()) ,120) AS datatime,sum(TAG_VALUE) as 累计产量 from b where GET_DATE <= DATEADD(day, -6, getdate()) ) select SUBSTRING(a.datatime,6,10) as datatime,ISNULL(c.当日产量,0) as 当日产量,ISNULL(d.台时产量,0) as 台时产量,ISNULL(e.累计产量,0) as 累计产量 from a left join c on a.datatime = c.datatime left join d on a.datatime = d.datatime left join e on a.datatime = e.datatime order by a.datatime asc

2023-06-13 上传