私はservice
以下のようなテーブルを持っています:
CREATE TABLE service
Id number,
Name varchar2(50),
ParentId number,
PcCode varchar(50);
service
のテーブルのデータ:
ID NAME PARENTID PCCODE
1 Test1 0 Null
2 Test2 0 Null
3 Test3 1 Null
4 Test4 1 Null
5 Test5 1 Null
6 Test6 2 Null
7 Test7 2 Null
8 Test8 2 Null
9 Test9 2 Null
10 Test10 3 Null
11 Test11 3 Null
PcCode
そして、コラムを更新したいと思います。Id
これは、列と列に依存しParentId
ます。例:
Id = 1, ParentId = 0 => PcCode = '001'
Id = 2, ParentId = 0 => PcCode = '002'
Id = 3, ParentId = 1 => PcCode = '001001'
Id = 4, ParentId = 1 => PcCode = '001002'
.....
アップデート
update さんのコラムに 2 sp (2 way) と書きましPcCode
たが、あまりうまくいっていないように思います。
Sp1
: (終わり)
create or replace
procedure service_hierarchy
is
cursor c_service
is
select * from
service d;
cursor c_parents
is
select k.parentid from
service k
group by k.parentid
order by k.parentid;
begin
for obj1 in c_service
loop
update service e set e.pccode = lpad(to_char(rownum), 3, '0') where e.parentid = service.parentid;
end loop;
for obj2 in c_parents
loop
update service e set e.pccode = (select f.pccode from service f where f.id = obj2.parentid) || e.pccode where e.parentid = obj2.parentid;
end loop;
end;
Sp2
: エラー - 完了しました。しかし、それは結果 false を返します。そして、私は正しく働く方法を知りません。
CREATE OR REPLACE
PROCEDURE service_hierarchy_2
(
parentId NUMBER := 0
)
IS
CURSOR v_data IS
SELECT *
FROM service
WHERE parentId = parentId;
BEGIN
IF (parentId = 0)
THEN
UPDATE service SET pccode = LPAD(ROWNUM , 3, '0')
WHERE parentid = parentId;
ELSE
FOR data IN v_data
LOOP
UPDATE service SET pccode = (SELECT 1 FROM service WHERE Id = parentId) || LPAD(ROWNUM , 3, '0')
WHERE parentid = parentId;
service_hierarchy_2(data.Id);
END LOOP;
END IF;
END;
sp2
解決するか、1つの方法で2つのspよりも良くなるように助けてください。ありがとう!