2016-09-15 3 views
-1

Я пытаюсь написать запрос для копирования данных из одной таблицы в другую таблицу в PL/SQL, и мне нужна помощь, спасибо.анализ данных из одной таблицы в другую таблицу

Исходная таблица имеет одно поле и пункт назначения имеет 3 поля. данных в исходной таблице начинается с 05, 10, 30 1-я 99, как показано ниже

05-1 
10-1 
30-1 
10-2 
30-2 
30-2 
30-2 
30-2 
10-3 
30-3 
99-1 
05-2 
10-4 
30-4 

необходимости копировать данные в другую таблицу с 3 колонками, как показано ниже

A  B  C 
05-1 10-1 30-1 
05-1 10-2 30-2 
05-1 10-2 30-2 
05-1 10-2 30-2 
05-1 10-2 30-2 
05-1 10-3 30-3 
05-2 10-4 30-4 
+1

Посмотрите здесь http://stackoverflow.com/help/how-to-ask, а затем перепишите свой вопрос. Непонятно, что вы ищете. Прошу показать до и после примера. –

+0

Почему, по-вашему, вам нужна хранимая процедура? –

ответ

0

Ваш вопрос не ясен, но в угадывание от ввода и вывода, которые вы предоставили, я предполагаю, что правила для генерации вывода являются somthing по строкам ниже.

1), когда он начинает с 99 игнорировать его

2), когда она начинается с 05 заданной переменной и перейти к следующей строке.

3) когда он начинается с 10 заданной переменной и переходит к следующей строке.

4) когда он начинается с 30 вставок в таблицы с использованием переменных, которые вы установили в предыдущих двух шагах.

Если вышеуказанные правила верны, нижеследующее должно работать. Конечно, вам нужно будет заменить свои имена в таблице/поле. Если я неправильно понял ваши требования из предоставленных данных (скорее всего, так как это не очень понятно), это должно по крайней мере дать вам отправную точку для работы.

declare 

cursor c_loops is 
select column1 from table1; 

v_col1 varchar2(10) default null; 
v_col2 varchar2(10) default null; 
v_col3 varcahr2(10) default null; 

begin 
    for v_row in c_loops loop 
    case (substr(v_row.column1, 0, 2) 
     when '99' then 
      -- do nothing ignore row 
      null; 
     when '05' then 
      v_col1 := v_row.column1; 
     when '10' then 
      v_col2 := v_row.column1; 
     when '30' then 
      v_col3 := v_row.column1; 
      insert into table2 (col1, col2, col3) values (v_col1, v_col2, v_col3); 
     else 
     -- output some error here because you have unexpected input 
     null; 
    end case; 
    end loop; 
end; 
Смежные вопросы