// --- SCN04 시나리오 재생성 (수정된 쿼리) --- // 0. 기존에 잘못 생성되었을 수 있는 SCN04 관련 데이터를 모두 삭제합니다. MATCH (s:Scenario {id: 'SCN04'}) DETACH DELETE s; // 1. 새로운 시나리오 'SCN04' 노드를 다시 생성합니다. CREATE (s4:Scenario {id: 'SCN04', name: 'SCN01 순서 변경 시나리오', description: 'SCN01에서 Job 2와 Job 1의 순서를 변경'}); // 2. SCN01에 포함된 Job들을 찾아 SCN04에 :INCLUDES 관계로 연결합니다. (수정된 부분) // WITH 절을 사용하여 s4를 명시적으로 전달합니다. WITH s4 MATCH (s1:Scenario {id: 'SCN01'})-[:INCLUDES]->(j:Job) CREATE (s4)-[:INCLUDES]->(j); // 3. SCN01의 순서를 기반으로 SCN04의 초기 순서를 복제합니다. // - STARTS_WITH 관계 복제 WITH s4 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가 성공적으로 재생성되었습니다.";