Update Function CONVERT_HEX_TO_CHAR
This commit is contained in:
@@ -1 +1,196 @@
|
||||
牄禗袬蒨@\蚕謨@^@
|
||||
SET PATH *LIBL ;
|
||||
|
||||
CREATE OR REPLACE FUNCTION CISTOOLS.CONVERT_HEX_TO_CHAR (
|
||||
HEX_STRING VARCHAR(32000) )
|
||||
RETURNS VARCHAR(16000)
|
||||
LANGUAGE SQL
|
||||
SPECIFIC CISTOOLS.CONVERT_HEX_TO_CHAR
|
||||
NOT DETERMINISTIC
|
||||
READS SQL DATA
|
||||
CALLED ON NULL INPUT
|
||||
SET OPTION ALWBLK = *ALLREAD ,
|
||||
ALWCPYDTA = *OPTIMIZE ,
|
||||
COMMIT = *CHG ,
|
||||
DECRESULT = (31, 31, 00) ,
|
||||
DYNDFTCOL = *NO ,
|
||||
DYNUSRPRF = *USER ,
|
||||
SRTSEQ = *HEX
|
||||
BEGIN ATOMIC
|
||||
DECLARE WRESULT VARCHAR ( 16000 ) DEFAULT '' ;
|
||||
DECLARE I INTEGER DEFAULT 1 ;
|
||||
DECLARE LEN INTEGER ;
|
||||
DECLARE PAIR CHAR ( 2 ) ;
|
||||
DECLARE DECIMAL_VAL INTEGER ;
|
||||
DECLARE CHAR_VAL CHAR ( 1 ) ;
|
||||
-- Handle null input
|
||||
IF HEX_STRING IS NULL THEN
|
||||
RETURN '' ;
|
||||
END IF ;
|
||||
SET LEN = LENGTH ( TRIM ( HEX_STRING ) ) ;
|
||||
-- Ensure even length (hex pairs)
|
||||
IF MOD ( LEN , 2 ) <> 0 THEN
|
||||
SET LEN = LEN - 1 ;
|
||||
END IF ;
|
||||
WHILE I <= LEN DO
|
||||
SET PAIR = UPPER ( SUBSTR ( HEX_STRING , I , 2 ) ) ;
|
||||
-- Convert hex pair to decimal
|
||||
SET DECIMAL_VAL =
|
||||
CASE SUBSTR ( PAIR , 1 , 1 )
|
||||
WHEN '0' THEN 0
|
||||
WHEN '1' THEN 16
|
||||
WHEN '2' THEN 32
|
||||
WHEN '3' THEN 48
|
||||
WHEN '4' THEN 64
|
||||
WHEN '5' THEN 80
|
||||
WHEN '6' THEN 96
|
||||
WHEN '7' THEN 112
|
||||
WHEN '8' THEN 128
|
||||
WHEN '9' THEN 144
|
||||
WHEN 'A' THEN 160
|
||||
WHEN 'B' THEN 176
|
||||
WHEN 'C' THEN 192
|
||||
WHEN 'D' THEN 208
|
||||
WHEN 'E' THEN 224
|
||||
WHEN 'F' THEN 240
|
||||
ELSE 0
|
||||
END +
|
||||
CASE SUBSTR ( PAIR , 2 , 1 )
|
||||
WHEN '0' THEN 0
|
||||
WHEN '1' THEN 1
|
||||
WHEN '2' THEN 2
|
||||
WHEN '3' THEN 3
|
||||
WHEN '4' THEN 4
|
||||
WHEN '5' THEN 5
|
||||
WHEN '6' THEN 6
|
||||
WHEN '7' THEN 7
|
||||
WHEN '8' THEN 8
|
||||
WHEN '9' THEN 9
|
||||
WHEN 'A' THEN 10
|
||||
WHEN 'B' THEN 11
|
||||
WHEN 'C' THEN 12
|
||||
WHEN 'D' THEN 13
|
||||
WHEN 'E' THEN 14
|
||||
WHEN 'F' THEN 15
|
||||
ELSE 0
|
||||
END ;
|
||||
-- Convert EBCDIC to ASCII using correct mappings
|
||||
SET CHAR_VAL =
|
||||
CASE DECIMAL_VAL
|
||||
-- EBCDIC to ASCII character mappings
|
||||
WHEN 64 THEN ' ' -- Space
|
||||
WHEN 75 THEN '.' -- Period
|
||||
WHEN 76 THEN '<' -- Less than
|
||||
WHEN 77 THEN '(' -- Left parenthesis
|
||||
WHEN 78 THEN '+' -- Plus sign
|
||||
WHEN 79 THEN '|' -- Vertical bar
|
||||
WHEN 80 THEN '&' -- Ampersand
|
||||
WHEN 90 THEN '!' -- Exclamation mark
|
||||
WHEN 91 THEN '$' -- Dollar sign
|
||||
WHEN 92 THEN '*' -- Asterisk
|
||||
WHEN 93 THEN ')' -- Right parenthesis
|
||||
WHEN 94 THEN ';' -- Semicolon
|
||||
WHEN 96 THEN '-' -- Hyphen/minus
|
||||
WHEN 97 THEN '/' -- Slash
|
||||
WHEN 107 THEN ',' -- Comma
|
||||
WHEN 108 THEN '%' -- Percent
|
||||
WHEN 109 THEN '_' -- Underscore
|
||||
WHEN 110 THEN '>' -- Greater than
|
||||
WHEN 111 THEN '?' -- Question mark
|
||||
WHEN 122 THEN ':' -- Colon
|
||||
WHEN 123 THEN '#' -- Number sign
|
||||
WHEN 124 THEN '@' -- At sign
|
||||
WHEN 125 THEN '''' -- Apostrophe
|
||||
WHEN 126 THEN '=' -- Equals sign
|
||||
WHEN 127 THEN '"' -- Quotation mark
|
||||
-- Letters A-I (EBCDIC C1-C9)
|
||||
WHEN 193 THEN 'A'
|
||||
WHEN 194 THEN 'B'
|
||||
WHEN 195 THEN 'C'
|
||||
WHEN 196 THEN 'D'
|
||||
WHEN 197 THEN 'E'
|
||||
WHEN 198 THEN 'F'
|
||||
WHEN 199 THEN 'G'
|
||||
WHEN 200 THEN 'H'
|
||||
WHEN 201 THEN 'I'
|
||||
-- Letters J-R (EBCDIC D1-D9)
|
||||
WHEN 209 THEN 'J'
|
||||
WHEN 210 THEN 'K'
|
||||
WHEN 211 THEN 'L'
|
||||
WHEN 212 THEN 'M'
|
||||
WHEN 213 THEN 'N'
|
||||
WHEN 214 THEN 'O'
|
||||
WHEN 215 THEN 'P'
|
||||
WHEN 216 THEN 'Q'
|
||||
WHEN 217 THEN 'R'
|
||||
-- Letters S-Z (EBCDIC E2-E9)
|
||||
WHEN 226 THEN 'S'
|
||||
WHEN 227 THEN 'T'
|
||||
WHEN 228 THEN 'U'
|
||||
WHEN 229 THEN 'V'
|
||||
WHEN 230 THEN 'W'
|
||||
WHEN 231 THEN 'X'
|
||||
WHEN 232 THEN 'Y'
|
||||
WHEN 233 THEN 'Z'
|
||||
-- Numbers 0-9 (EBCDIC F0-F9)
|
||||
WHEN 240 THEN '0'
|
||||
WHEN 241 THEN '1'
|
||||
WHEN 242 THEN '2'
|
||||
WHEN 243 THEN '3'
|
||||
WHEN 244 THEN '4'
|
||||
WHEN 245 THEN '5'
|
||||
WHEN 246 THEN '6'
|
||||
WHEN 247 THEN '7'
|
||||
WHEN 248 THEN '8'
|
||||
WHEN 249 THEN '9'
|
||||
-- Lowercase letters a-i (EBCDIC 81-89)
|
||||
WHEN 129 THEN 'a'
|
||||
WHEN 130 THEN 'b'
|
||||
WHEN 131 THEN 'c'
|
||||
WHEN 132 THEN 'd'
|
||||
WHEN 133 THEN 'e'
|
||||
WHEN 134 THEN 'f'
|
||||
WHEN 135 THEN 'g'
|
||||
WHEN 136 THEN 'h'
|
||||
WHEN 137 THEN 'i'
|
||||
-- Lowercase letters j-r (EBCDIC 91-99)
|
||||
WHEN 145 THEN 'j'
|
||||
WHEN 146 THEN 'k'
|
||||
WHEN 147 THEN 'l'
|
||||
WHEN 148 THEN 'm'
|
||||
WHEN 149 THEN 'n'
|
||||
WHEN 150 THEN 'o'
|
||||
WHEN 151 THEN 'p'
|
||||
WHEN 152 THEN 'q'
|
||||
WHEN 153 THEN 'r'
|
||||
-- Lowercase letters s-z (EBCDIC A2-A9)
|
||||
WHEN 162 THEN 's'
|
||||
WHEN 163 THEN 't'
|
||||
WHEN 164 THEN 'u'
|
||||
WHEN 165 THEN 'v'
|
||||
WHEN 166 THEN 'w'
|
||||
WHEN 167 THEN 'x'
|
||||
WHEN 168 THEN 'y'
|
||||
WHEN 169 THEN 'z'
|
||||
-- For unmapped characters, return space
|
||||
ELSE ' '
|
||||
END ;
|
||||
SET WRESULT = WRESULT || CHAR_VAL ;
|
||||
SET I = I + 2 ;
|
||||
END WHILE ;
|
||||
RETURN WRESULT ;
|
||||
END ;
|
||||
|
||||
COMMENT ON PARAMETER SPECIFIC FUNCTION CISTOOLS.CONVERT_HEX_TO_CHAR
|
||||
( HEX_STRING IS 'Hexadecimal String' ) ;
|
||||
|
||||
LABEL ON SPECIFIC FUNCTION CISTOOLS.CONVERT_HEX_TO_CHAR
|
||||
IS 'Convert Hex To Char' ;
|
||||
|
||||
GRANT ALTER , EXECUTE
|
||||
ON SPECIFIC FUNCTION CISTOOLS.CONVERT_HEX_TO_CHAR
|
||||
TO AMAPICS WITH GRANT OPTION ;
|
||||
|
||||
GRANT EXECUTE
|
||||
ON SPECIFIC FUNCTION CISTOOLS.CONVERT_HEX_TO_CHAR
|
||||
TO PUBLIC ;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user