2017-10-22 1 views
1

데이터베이스에있는 특정 레코드를 삭제하려면 사용자가 다시 입력해야하는 스크립트를 작성해야합니다.스크립트로 변경된 내용을 가져 오십시오.

스크립트는 매우 간단합니다. 먼저 삭제할 레코드와 그 종속성을 확인하고 모두 삭제해야합니다.

내 dev 환경에서 스크립트를 테스트 한 결과 제대로 작동했습니다. 이 스크립트를 프로덕션에 배포 할 때 삭제해야 할 레코드가 삭제되지만 삭제 된 레코드에 대한 보고서를 생성하여 클라이언트에게 제공하려고합니다.

삭제 된 행의 보고서를 생성하는 방법은 무엇입니까?

이 보고서를 작성하는 가장 좋은 방법은 무엇입니까? 스풀을 실행해야합니까? 좋은 연습이 있습니까, 아니면 저에게 줄 수있는 조언이 있습니까?

미리 감사드립니다.

마리오.

+1

얼마나 많은 표? 당신은 마른 실행 "이 될거야"삭제 또는 "이 삭제되었습니다"로그를 원하십니까? – Blag

+0

하나의 상위 테이블과 10 개의 하위 테이블입니다. 건식이어야합니다. 감사합니다. – Mario

+0

질문을 편집하고 스크립트를 추가 할 수 있습니까? – Blag

답변

0

나는 가장 좋은 방법은 콤보 CREATE AS SELECTMINUS 연산자를 사용하는 것입니다.

  • 첫째, 당신은 당신이 당신의 소스와 건조 사이 minus을, 다시 *_dry 테이블, 마지막
  • 을 스크립트를 실행 CREATE TABLE t_dry AS (SELECT * FROM t)
  • 2와 임시 테이블을 만들 수 있습니다.

예 :

SQL Fiddle

오라클 11g R2 스키마 설정 :

CREATE TABLE t 
    ("a" int, "b" int) 
; 

INSERT ALL 
    INTO t ("a", "b") 
     VALUES (1, 2) 
    INTO t ("a", "b") 
     VALUES (3, 4) 
    INTO t ("a", "b") 
     VALUES (5, 6) 
SELECT * FROM dual 
; 


CREATE TABLE t_dry 
    AS (SELECT * FROM t); 
; 

update t_dry set "b" = 7 where "a" = 5; 
delete from t_dry where "a" =3; 

INSERT INTO t_dry ("a", "b") 
     VALUES (8, 9) 
; 

검색어 1 :

SELECT A.* 
FROM (
    (
    SELECT '+' AS "Diff", T_DRY.* FROM T_DRY 
    MINUS 
    SELECT '+' AS "Diff", T.* FROM T 
) 
    UNION ALL 
    (
    SELECT '-' AS "Diff", T.* FROM T 
    MINUS 
    SELECT '-' AS "Diff", T_DRY.* FROM T_DRY 
) 
) A 
ORDER BY A."a" , "Diff" DESC 
,

Results :

| Diff | a | b | 
|------|---|---| 
| - | 3 | 4 | 
| - | 5 | 6 | 
| + | 5 | 7 | 
| + | 8 | 9 | 
관련 문제