Assuming you want to uncomment the lines that contain 38 and that follow a line that contain a word-delimited¹ 19 as your attempt suggests you might want to do:
perl -pi -e 's/^\s*\K#// if $flag && /38/; $flag = /\b19\b/' your-file
In your:
sed -n '/\<19\>/,+1p' cmfile|grep '38'|sed -i '/38/s/^#//g' cmfile
The sed -i '/38/s/^#//g' cmfile command doesn't read its input, it only edits cmfile in place, removing a leading # on any line that contains 38 (btw, the g is superfluous as there can only be one substitution).
So the sed -n '/\<19\>/,+1p' cmfile|grep '38' is pointless as nothing is reading its output.
Also note that all of -i, +1, \<\> are non-standard GNU extensions², while the perl command will work on any system³.
Edit
With your updated requirements where you want to uncomment the lines where the first field contains 19 and the second contain 38 (themselves not surrounded by other digits):
perl -api -e 's/^\s*\K#// if $F[0] =~ /(?<!\d)19(?!\d)/ &&
$F[1] =~ /(?<!\d)38(?!\d)/' your-file
Here using the -awk mode there the fields are made available in the @F array or, if there may be whitespace on either side of the # which would result in the first field becoming the second field, do the full line matching with a regexp:
perl -pi -e 's/^\s*\K#(?=\s*\S*(?<!\d)19(?!\d)\S*\s+\S*(?<!\d)38(?!\d))//' your-file
Where we have (see perldoc perlrun, perldoc perlop and perldoc perlre for details):
-p: sed mode, where the -expression is evaluated for each line of input.
-i: in-place editing
s/regexp/replacement/: substitute the first match of the regular expression with replacement.
\s: any whitespace character, \S for non-whitespace.
<atom>*: the previous atom repeated any number of times including 0, as many as possible
\K: Keep what's on the left, or IOW resets the start of the match that will end up being substituted.
(?=...): positive look-ahead, or IOW "provided what follows matches ..."
(?<!...): negative look-behind, or IOW "provided what precedes does not match ..."
(?!...): negative look-ahead
\d: any decimal digit character. Without -C (for Unicode mode), that's limited to 0123456789.
¹ In any case, the 19 in pd19_ORA is not word-delimited as both d and _ are word characters; if you wanted to match on 19 that is neither preceded nor followed by a decimal digit, you'd use (?<!\d)19(?!\d) instead of \b19\b (the perl equivalent of ex' \<19\>).
² Well, strictly speaking, \<\> originated in ex/vi, not GNU sed and -i was copied by GNU sed from perl, and ,+1 from ed.
³ Though you'll need perl 5.10.0 (from 2007) or newer for \K (to Keep what's on the left of it). On systems will an older version of perl, you can replace s/^\s*\K#// with s/^(\s*)#/$1/.
19while still preserving leading whitespace?grep '38'.sed -i. Whensedis operating in inplace mode, it ignores its standard input.