53 lines
2.1 KiB
Plaintext
53 lines
2.1 KiB
Plaintext
// --- SCN04 시나리오 재생성 (최종 수정 쿼리) ---
|
|
|
|
// 0. 기존에 잘못 생성되었을 수 있는 SCN04 관련 데이터를 모두 삭제합니다.
|
|
MATCH (s:Scenario {id: 'SCN04'})
|
|
DETACH DELETE s;
|
|
|
|
// 1. 새로운 시나리오 'SCN04' 노드를 생성하고, WITH 절로 s4 변수를 바로 다음 쿼리로 전달합니다.
|
|
CREATE (s4:Scenario {id: 'SCN04', name: 'SCN01 순서 변경 시나리오', description: 'SCN01에서 Job 2와 Job 1의 순서를 변경'})
|
|
WITH s4;
|
|
|
|
// 2. SCN01에 포함된 Job들을 찾아 SCN04에 :INCLUDES 관계로 연결합니다.
|
|
MATCH (s1:Scenario {id: 'SCN01'})-[:INCLUDES]->(j:Job)
|
|
WITH s4, j // 이전 단계의 s4와 현재 찾은 j를 함께 전달합니다.
|
|
CREATE (s4)-[:INCLUDES]->(j);
|
|
|
|
// 3. SCN01의 순서를 기반으로 SCN04의 초기 순서를 복제합니다.
|
|
// - STARTS_WITH 관계 복제
|
|
MATCH (s4:Scenario {id: 'SCN04'})
|
|
MATCH (s1:Scenario {id: 'SCN01'})-[sw:STARTS_WITH]->(start_job:Job)
|
|
CREATE (s4)-[:STARTS_WITH]->(start_job);
|
|
|
|
// - NEXT 관계망 복제 (SCN04 시나리오에 종속된 NEXT 관계 생성)
|
|
MATCH (s1:Scenario {id: 'SCN01'})-[:STARTS_WITH]->(start_job:Job)
|
|
MATCH path = (start_job)-[:NEXT*]->(end_job:Job)
|
|
WHERE NOT (end_job)-[:NEXT]->()
|
|
WITH nodes(path) AS jobs
|
|
UNWIND range(0, size(jobs)-2) AS i
|
|
WITH jobs[i] AS from_job, jobs[i+1] AS to_job
|
|
MATCH (s4:Scenario {id: 'SCN04'})
|
|
MERGE (j1:Job {id: from_job.id})
|
|
MERGE (j2:Job {id: to_job.id})
|
|
CREATE (j1)-[:NEXT {scenario: 'SCN04'}]->(j2);
|
|
|
|
|
|
// 4. SCN04에서 Job 1과 Job 2의 순서를 변경합니다. (기존 1->2->3 ... 을 2->1->3 ... 으로)
|
|
// - 기존 관계 삭제
|
|
MATCH (s4:Scenario {id: 'SCN04'})-[sw:STARTS_WITH]->(j1:Job {id: '1'})
|
|
DELETE sw;
|
|
|
|
MATCH (j1:Job {id: '1'})-[n1:NEXT {scenario: 'SCN04'}]->(j2:Job {id: '2'})
|
|
DELETE n1;
|
|
|
|
MATCH (j2:Job {id: '2'})-[n2:NEXT {scenario: 'SCN04'}]->(j3:Job {id: '3'})
|
|
DELETE n2;
|
|
|
|
// - 새로운 관계 생성
|
|
MATCH (s4:Scenario {id: 'SCN04'}), (j1:Job {id: '1'}), (j2:Job {id: '2'}), (j3:Job {id: '3'})
|
|
CREATE (s4)-[:STARTS_WITH]->(j2),
|
|
(j2)-[:NEXT {scenario: 'SCN04'}]->(j1),
|
|
(j1)-[:NEXT {scenario: 'SCN04'}]->(j3);
|
|
|
|
RETURN "SCN04가 성공적으로 재생성되었습니다.";
|