Изменить последнюю строку
$sqlTxt
на
eval $sqlTxt
Подробнее о eval и предупреждение !
добавляет пробел к расширению файла
Это будет 80 символов в; не имеет ничего общего с вложением как таковым, просто SQL* Plus 'ширина линии по умолчанию, оборачивающая результат. Если вы сохраните простой $sqlTxt
, то увидите команду, которую она пытается сгенерировать, которая может иметь несколько пробелов с интервалами в 80 символов - хотя, если ваш терминал установлен на ширину 80 символов, это может быть еще неочевидно. .
Вы можете переопределить ширину строки большим числом, больше, чем вы ожидаете, что команда когда-либо будет, например
SET LINES 5000
Возможно, вы также захотите заключить тему в кавычки, в случай, который содержит пробелы; Я успешно тестировал этот небольшой вариант:
...
SET HEAD OFF
SET LINES 5000
select 'echo -en '
|| cme.BODY
|| ' | mailx '
|| ' -s "' || cme.SUBJECT || '"'
|| ' -a "$HTMLFILE"'
|| case when MAIL_FROM is not null then ' -r "<' || MAIL_FROM || '>"' end
|| ' -c "' || MAIL_CC || '"'
|| ' "' || MAIL_TO || '"'
from CUST_SEND_EMAIL cme
where cme.program_name = 'SEND_EMAIL'
and cme.status = 'NOK';
EOF
)
# to debug
$sqlTxt
eval $sqlTxt
Помимо разбиения запроса на несколько строк для удобства чтения и добавления нескольких кавычек, я также удалил /
. Поскольку запрос уже заканчивался точкой с запятой, которая только что повторно выполняла буфер - который содержит этот запрос, - выходные данные дублировались, вызывая некоторые странные результаты (дополнительные ложные и недопустимые адреса «to»).