我有一个奇怪的问题.
EXEC SQL SELECT AVG(LER) INTO :LER-MIN FROM CENSUS.WORLDIMR * WHERE CENSUS.WORLDIMR.COUNTRY LIKE 'L%' END-EXEC.
这给出了72.2,但是当我使用时
WHERE CENSUS.WORLDIMR.COUNTRY LIKE 'L%'
它给出了00.0.
但是在SPUFI中尝试这个:
select avg(ler) from census.worldimr where census.worldimr.country like 'L%';
发出71.33333333333.
我做错了什么?
这是该计划:
000001 PROCESS SQL 000002 IDENTIFICATION DIVISION. 000003 PROGRAM-ID. CBL7. 000004 *-------------------- 000005 ENVIRONMENT DIVISION. 000006 *-------------------- 000007 CONFIGURATION SECTION. 000008 INPUT-OUTPUT SECTION. 000009 FILE-CONTROL. 000010 SELECT P3OUT ASSIGN TO UT-S-P3OUT. 000011 000012 DATA DIVISION. 000013 *------------- 000014 FILE SECTION. 000015 FD P3OUT 000016 RECORD CONTAINS 80 CHARACTERS 000017 LABEL RECORDS ARE OMITTED 000018 RECORDING MODE F 000019 DATA RECORD IS PRTREC. 000020 000021 01 PRTREC. 000022 02 LER-PRT PIC 99.9. 000023 02 FILLER PIC X(76). 000024 000025 WORKING-STORAGE SECTION. 000026 01 VARS. 000027 10 LER-MIN PIC S9(5)V9(1) USAGE COMP-3. 000028 000029 EXEC SQL INCLUDE SQLCA END-EXEC. 000030 ****************************************************************** 000031 * TABLE(CENSUS.WORLDIMR) * 000032 ****************************************************************** 000033 EXEC SQL DECLARE CENSUS.WORLDIMR TABLE 000034 ( REGION CHAR(5) NOT NULL, 000035 COUNTRY CHAR(30) NOT NULL, 000036 YR CHAR(4) NOT NULL, 000037 IMR DECIMAL(5, 1) NOT NULL, 000038 IMRM DECIMAL(5, 1) NOT NULL, 000039 IMRF DECIMAL(5, 1) NOT NULL, 000040 IMR1_4 DECIMAL(5, 1) NOT NULL, 000041 IMR1_4M DECIMAL(5, 1) NOT NULL, 000042 IMR1_4F DECIMAL(5, 1) NOT NULL, 000043 IMR_5 DECIMAL(5, 1) NOT NULL, 000044 IMR_5M DECIMAL(5, 1) NOT NULL, 000045 IMR_5F DECIMAL(5, 1) NOT NULL, 000046 LER DECIMAL(5, 1) NOT NULL, 000047 LERM DECIMAL(5, 1) NOT NULL, 000048 LERF DECIMAL(5, 1) NOT NULL 000049 ) END-EXEC. 000050 ****************************************************************** 000051 * COBOL DECLARATION FOR TABLE CENSUS.WORLDIMR * 000052 ****************************************************************** 000053 01 WORLDIMR. 000054 10 REGION PIC X(5). 000055 10 COUNTRY PIC X(30). 000056 10 YR PIC X(4). 000057 10 IMR PIC S9(4)V9(1) USAGE COMP-3. 000058 10 IMRM PIC S9(4)V9(1) USAGE COMP-3. 000059 10 IMRF PIC S9(4)V9(1) USAGE COMP-3. 000060 10 IMR1-4 PIC S9(4)V9(1) USAGE COMP-3. 000061 10 IMR1-4M PIC S9(4)V9(1) USAGE COMP-3. 000062 10 IMR1-4F PIC S9(4)V9(1) USAGE COMP-3. 000063 10 IMR-5 PIC S9(4)V9(1) USAGE COMP-3. 000064 10 IMR-5M PIC S9(4)V9(1) USAGE COMP-3. 000065 10 IMR-5F PIC S9(4)V9(1) USAGE COMP-3. 000066 10 LER PIC S9(4)V9(1) USAGE COMP-3. 000067 10 LERM PIC S9(4)V9(1) USAGE COMP-3. 000068 10 LERF PIC S9(4)V9(1) USAGE COMP-3. 000069 000070 PROCEDURE DIVISION. 000071 *------------------ 000072 EXEC SQL SELECT 000073 AVG(LER) 000074 INTO :LER-MIN 000075 FROM CENSUS.WORLDIMR 000076 WHERE CENSUS.WORLDIMR.COUNTRY LIKE 'L%' 000077 END-EXEC. 000078 OPEN OUTPUT P3OUT. 000079 MOVE LER-MIN TO LER-PRT. 000080 WRITE PRTREC. 000081 CLOSE P3OUT. 000082 STOP RUN.
Bill Woodger.. 5
手册是很棒的东西,特别是当搜索引擎可以直接进入它们时:
db2 sql就好
第一篇文章应该将您带到通过IBM Knowledge Center呈现给您的手册.它适用于DB2 11.0,因此如果您不使用11.0,则应该进行明显的更改.
读书,你会来:
如果在固定长度的字符串变量中指定模式,则任何尾随空白都将被解释为模式的一部分.因此,最好使用变长字符串变量,其实际长度与模式的长度相同.如果宿主语言不允许变长字符串变量,则将模式放在固定长度的字符串变量中,该变量的长度是模式的长度.
有关使用特定编程语言的主机变量的更多信息,请参阅主机变量.
您正在使用的语言COBOL不允许使用变长字符串变量(这使得它变得如此之快,因此不要抱怨).
因此,LIKE的常量(COBOL中的字面值)需要与所涉及的列的长度相同,并且文字中的所有其他位置也需要为%(至少直到实际最大长度的末尾)任何与LIKE匹配的数据,严格地说.
或者,使用该长度的COBOL主机变量,再次使用尾随%s而不是尾随空格填充.
或者使用类似varchar的host-variable(一个COBOL表,其中包含数据长度为2字节的二进制文件,值为2,然后是你的L%
).
01 varchar-host-variable. 05 vhv-length COMP-5 PIC 9(4). 05 vhv-data PIC XX.
即使文字按预期工作(不阅读手册),在程序部门中拥有"重要"文字通常也是一个坏主意.使用主机变量的第二个原因.
手册是很棒的东西,特别是当搜索引擎可以直接进入它们时:
db2 sql就好
第一篇文章应该将您带到通过IBM Knowledge Center呈现给您的手册.它适用于DB2 11.0,因此如果您不使用11.0,则应该进行明显的更改.
读书,你会来:
如果在固定长度的字符串变量中指定模式,则任何尾随空白都将被解释为模式的一部分.因此,最好使用变长字符串变量,其实际长度与模式的长度相同.如果宿主语言不允许变长字符串变量,则将模式放在固定长度的字符串变量中,该变量的长度是模式的长度.
有关使用特定编程语言的主机变量的更多信息,请参阅主机变量.
您正在使用的语言COBOL不允许使用变长字符串变量(这使得它变得如此之快,因此不要抱怨).
因此,LIKE的常量(COBOL中的字面值)需要与所涉及的列的长度相同,并且文字中的所有其他位置也需要为%(至少直到实际最大长度的末尾)任何与LIKE匹配的数据,严格地说.
或者,使用该长度的COBOL主机变量,再次使用尾随%s而不是尾随空格填充.
或者使用类似varchar的host-variable(一个COBOL表,其中包含数据长度为2字节的二进制文件,值为2,然后是你的L%
).
01 varchar-host-variable. 05 vhv-length COMP-5 PIC 9(4). 05 vhv-data PIC XX.
即使文字按预期工作(不阅读手册),在程序部门中拥有"重要"文字通常也是一个坏主意.使用主机变量的第二个原因.