2013-07-23 2 views
0
table A: 

col1 
_______________________ 
jack 
1200 
20 
peter 
2000 
10 
robert 
300 
30 

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

table B : 

name sal deptno 
----------------------- 
jack 1200 20 
peter 2000 10 
robert 300 30 

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

create procedure GetDatafromtable_A(V_1 in varchar2) 
as 
CURSOR rwdatacursor IS select Raw_Data from table_a where rowid<=3) 
T_record rwdatacursor%rowtype; 
begin 
open rwdatacursor; 
loop 
fetech rwdatacursor into T_record; 
exit when rwdatacursor%NOTFUND; 
insert into temp_process; 
end loop 
close rwdatacursor; 
end; 

Это codew я пытался, но показывая много ошибок

+0

показать нам, что вы попробовали – mirkobrankovic

+1

И покажите нам, как связать строки. Откуда мы знаем, что «jack» - это «имя»? Откуда мы знаем, что 1200 связан с 'jack', а не' peter'? Помня, что строки в организованной кучей таблице по своей сути неупорядочены. –

+1

Возможный дубликат [как получить данные одного столбца из одной таблицы в другую таблицу как разные столбцы в PL/SQL] (http://stackoverflow.com/questions/17716454/how-to-get-one-column-data- from-one-table-into-another-table-as-different-column) –

ответ

0

Попробуйте это. Предполагая, что каждый consecutive three rows are name sal and deptno. Может быть сложной логикой, но попробуйте, если это поможет вам.

CREATE TABLE #temp(slNo INT IDENTITY(1,1),col1 VARCHAR(50)) 
INSERT INTO #temp 
SELECT col1 FROM table_A 

INSERT INTO table_B(name , sal , deptno) 
SELECT name,sal,depno 
FROM 
    ( SELECT col1 AS name, ROW_NUMBER() OVER (ORDER BY col1) AS RowNum 
    FROM #temp WHERE slNo % 3 =1) AS T1 
    FULL OUTER JOIN 
    (SELECT col1 AS sal, ROW_NUMBER() OVER (ORDER BY col1) AS RowNum 
    FROM #temp WHERE slNo%3=2) AS T2 
    ON T2.RowNum = T1.RowNum 
    FULL OUTER JOIN 
     (SELECT col1 AS depno, ROW_NUMBER() OVER (ORDER BY col1) AS RowNum 
     FROM #temp WHERE slNo%3=0) AS T3 
    ON T3.RowNum = T2.RowNum 
) 

Результат

Result

+0

Я хочу запрос процедуры! – Chay

+0

дать некоторое время я работаю над этой :) до того, что просто дал вам подсказку :) – Nithesh

+0

ок бро вот моя мысль создать procedurep1 (v1 в varchar2) здесь v1 является параметром, который мы передаем в процедуру , что параметр я может передать что-нибудь я Вань предположим, я передать «Nithesh, 100,2000» его параметр один параметр с в кавычках , что параметр должен расщепляется и помещен в другую колонку на столе – Chay

1

Один из способов сделать это:

PROCEDURE CONVERT_TABLES IS 
    CURSOR DATA_CURSOR IS 
    SELECT COL1 
     FROM TABLE_A; 

    row1 DATA_CURSOR%ROWTYPE; 
    row2 DATA_CURSOR%ROWTYPE; 
    row3 DATA_CURSOR%ROWTYPE; 
BEGIN 
    OPEN DATA_CURSOR; 

    LOOP 
    FETCH DATA_CURSOR INTO row1; 
    EXIT WHEN DATA_CURSOR%NOTFOUND; 

    FETCH DATA_CURSOR INTO row2; 
    EXIT WHEN DATA_CURSOR%NOTFOUND; 

    FETCH DATA_CURSOR INTO row3; 
    EXIT WHEN DATA_CURSOR%NOTFOUND; 

    INSERT INTO TABLE_B (NAME, SAL, DEPTNO) 
     VALUES (row1.COL1, row2.COL1, row3.COL1); 
    END LOOP; 

    CLOSE DATA_CURSOR; 
END CONVERT_TABLES; 

Делите и наслаждайтесь.

+0

Мне нравится ваше решение. Но как мы знаем, что данные находятся в правильном порядке? Это может измениться, не так ли? –

Смежные вопросы