#c# #.net #oracle #oracle10g
#c# #.net #Oracle #oracle10g
Вопрос:
У меня есть база данных Oracle, и мне нужно отправлять уведомления по электронной почте на основе событий, которые происходят в моем веб-приложении Dot Net. Уведомления по электронной почте представлены в формате HTML. У меня есть разные шаблоны, которые используются в зависимости от уведомления по электронной почте, которое должно быть сгенерировано. Каждый из них подключен к Sproc. Поэтому, когда вызывается событие, я передаю идентификатор обработчику, и он вызывает sproc. Затем я получаю шаблон электронной почты, который находится в формате HTML и содержит теги, которые должны быть заменены полями из sproc. Затем я ищу и заменяю любые теги в шаблоне соответствующим полем из набора записей. Вводится адрес электронной почты recipeint, и электронное письмо отправляется в формате HTML. Все это работает нормально.
Однако теперь у меня есть требование показывать несколько строк в таблице в уведомлении по электронной почте. Так, например, сведения о книгах из библиотеки. Я мог бы получить все строки и построить строки таблицы HTML «на лету» в dot net, выполнив итерацию по набору записей и сгенерировав новую строку для каждого набора записей, но это нарушило бы мой общий подход к замене тегов. Итак, я хотел бы знать, могу ли я создать эти несколько строк в PL SQL и вернуть их как одно поле, где я могу заменить тег в моем html-шаблоне электронной почты содержимым поля из набора записей. Это поле будет содержать HTML-версию всех необходимых записей… готов к подаче на стол. Итак, у меня был бы тег в моем шаблоне под названием OVerDueBooks и я заменил бы этот тег полем Over_Due_Books из моего набора записей. В этом поле будут содержаться все устаревшие записи книги в формате html, поэтому мне нужно только заменить тег содержимым.
спасибо, Мик
Ответ №1:
Каков объем данных? Пока собранная длина не превышает 4000 байт, это не должно быть сложно.
Найдите STRAGG для различных механизмов объединения коллекции VARCHAR2 в одну строку.
Остальное просто должно быть вопросом SELECT '<tr>'||....||'</tr>' ....
Загляните в UTL_URL.ESCAPE, чтобы убрать все символы, которые могут мешать HTML.
Комментарии:
1. спасибо, Гэри.. Я посмотрю. Я хотел посмотреть, существует ли какая-то HTML-версия для dbms_xmlgen, которая генерирует XML-версию, или это, как вы предложили, и должно быть вырезано вручную в sproc
Ответ №2:
Спасибо, Гэри,
Я получил эту маленькую жемчужину от Sliqhtwv на EE, и она отлично работает. Спасибо за вашу помощь .. очень признателен.
Из Sliqhtwv:
drop table tab1 purge;
create table tab1(col1 char(1), col2 char(1), col3 char(1));
insert into tab1 values('a','1','A');
insert into tab1 values('b','2','B');
insert into tab1 values('c','2','C');
commit;
select xmlagg(xmlelement("TR",
xmlforest(col1 as "TD",col2 as "TD",col3 as "TD"))).getclobval()
from tab1