에서 계층 구조의 열이 나는 service
'아래의 테이블 : service
의업데이트 오라클
CREATE TABLE service
Id number,
Name varchar2(50),
ParentId number,
PcCode varchar(50);
그리고 데이터'가의 테이블 :
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'
.....
업데이트는
나는 열 PcCode
의 업데이트에 대한 2 SP (2 방법)을 작성했습니다,하지만 난 그게 아주 좋은 일을하지 생각. 오류 - 그것은 끝났어 :
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
을 (완료). 그러나 결과는 거짓입니다. 그리고 제대로 작동하는 법을 모르겠습니다.
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
또는 하나의 방법은 상단에 2 SP 것보다 더 나은 해결하기 위해 도와주세요. 감사!
감사합니다, 그것은 매우 유용합니다. 그러나 결과를 내 결과로 얻고 싶습니다. – LazyCatIT