Сначала создайте таблицу, чтобы отсортировать данные во что-то более простое для чтения из ... чего-то простого, например, id, column_name, column_value.Вам придется со мной смириться, с тех пор, как я работал в oracle, прошло некоторое время, так что в лучшем случае это тяжелый псевдокод:
Быстрый динамический всплеск SQL ... Вы можете установить переменную в SQLзаявление, а затем выполнить эту переменную.Существуют некоторые угрозы безопасности, и возможно, эта функция отключена в вашей среде ... поэтому убедитесь, что вы можете запустить ее в первую очередь.Объявите переменную, установите переменную «select 1», а затем используйте «execute немедленный» для выполнения sql, хранящегося в вашей переменной.
set var = 'select id, ''some_amount_' || 1 || '', some_amount || 1 || ' from table where some_amount_' || 1 || ' <> 0'
Предполагая, что у меня правильный синтаксис оракула ... (труба добавляется правильно? Я считаю, что 3 одинарные кавычки, так как '' 'должны приводить к единице', когда в переменной тоже, возможно, вам придется пробовать и ошибаться в этой строке, пока у вас не будет установлена переменная var):
select id, 'some_amount_1',some_amount_1
from table
where some_amount_1 <> 0
Это должно выбрать идентификатор и значение в some_amount_1 для каждого идентификатора в вашей базе данных.Вы можете легко превратить это в оператор вставки.
Я предполагаю, что у some_amount_xxx есть верхний предел ... Следующий трюк состоит в том, чтобы зациклить этот гигантский оператор.Еще раз, ужасный псевдокод:
declare sql_string
declare i and set to 1
for i = 1 to xxx (whatever your xxx is)
set sql_string to the first set var statement we made, replacing the '1' with the i var here.
execute sql
increment i
loop
Надеюсь, это имеет смысл ... это один из очень немногих сценариев, когда вы захотите зациклить динамический sql.Теперь у вас есть относительно простая таблица для чтения, и отсюда этот запрос должен быть относительно простым