Чтобы создать анализатор PL / SQL для процесса ETL, в котором данные в основном кодируются позиционно, мне нужно построчно читать файл и добавлять записи в оперативную память (package- ) в текущую запись или в новую запись.
Позвольте мне кратко объяснить сценарий и правила грамматики: мне нужно проанализировать сообщения банковского выравнивания, которые имеют общедоступный стандартный формат (не могу найти документацию на английском языке, только это и другие итальянские документы, в то время как это должен быть стандарт для всего ЕС). Во всяком случае, здесь объясняются некоторые правила:
- Каждая запись имеет длину 120 символов в файле
- Каждый файл начинается с записи "AL" (ALignment)
- Каждый файл заканчивается записью "EF" (End of File)
- Каждое сообщение выравнивания начинается с записи «12» и заканчивается записью «70»
- В зависимости от типа записи «12» сообщение может состоять из различных комбинаций других записей, таких как «30» и «40», «50», «45», «50» и «45» "50"
Пример (структурированный):
AL record
12 record
45 record
70 record
12 record
45 record
50 record
70 record
EF record
Я уже объявил MESSAGE
PL / SQL-таблицу CHAR(120)
, которая будет инкапсулировать записи между 12 и 70 (включительно), которые будут обработаны на более позднем этапе. Теперь у меня есть проблема с зацикливанием, которую я мог бы легко решить в Java.
Как я могу повторно инициализировать переменную в PL / SQL? Вот пример псевдо-Java того, что мне нужно сделать
String line;
List<String> alignment_message;
List<AlignmentMessage> table;
while (line = readline()) {
if (line.substring(1,2)=="12") //Begin of message
alignment_message = new MESSAGE(); //******HOW DO I DO THIS????
alignment_message.add(line); //Don't care about NPE ;-)
if (line.substring(1,2)=="70") //End of message
table.add(alignment_message);
}
В настоящее время я объявил в своей процедуре PL / SQL переменную msg
типа MESSAGE
. Если я введу INSERT
в эту переменную, а затем добавлю INSERT
эту переменную в таблицу, содержащую столбец типа MESSAGE
(и пару других столбцов, которые я использую для предварительной обработки), как я могу выполнить new INSERT
s в fresh new переменную msg?
Спасибо