process_data() {
awk -Ff /dev/fd/3 3<< \EOF
awk code here
EOF
}
Note that command line arguments can contain newline character, and while there's a length limit, it's general over a few hundred kilobyte.
awk '
BEGIN {...}
/.../ ...
END {...}
'
If the issue is about embedding single quote characters in the awk script, another approach is to store the code in a variable:
awk_code=$(cat << \EOF
{print "'quoted' " $0}
EOF
)
And do:
process_data() {
awk "$awk_code"
}