Sybase ASA 6의 트리거 내에서 영향을받는 각 레코드에 대해 스프로크를 호출

StackOverflow https://stackoverflow.com/questions/1938591

문제

오래된 버전의 Sybase에서 방아쇠에 무언가를 구현하는 두통이 있고 누군가가 도울 수 있는지 궁금해했습니다. 간단히 말해서, 나는 영향을받는 각 레코드에 대해 다른 스프로크를 호출하는 트리거를 쓰고 싶습니다 (삽입, 삭제 또는 둘 다 [업데이트 된]).

T-SQL (SQL Server) 에서이 작업을 수행하는 한 가지 방법은 커서를 사용하는 것입니다. 그러나 웹에서 찾은 커서 예 중 어느 것도 실제로 Sybase ASA 6.0.4에서 작동하지 않는 것 같습니다. T-SQL을 싫어합니다. 일반적으로 또는 컴파일하는 것처럼 보이지만 일반적으로 아무것도하지 않습니다 (병리학 적으로 단순하고 고안된 시나리오에서도).

본질적으로 나는 모든 '삽입 된'테이블 레코드 (있는 경우)와 각각에 대해 루프하고 싶습니다. exec mysproc (inserted.keyid), 그런 다음 모든 '삭제 된'테이블 레코드 (있는 경우)를 모두 루프하고 각각에 대해 다시 exec mysproc (deleted.keyid).

누구든지 ASA 6에서 이런 종류의 일을하거나 읽기 전용 커서를 사용하는 예가 있습니까? 온라인 매뉴얼에는 간단한 커서의 예가있는 것으로 보이지만 실제로는 예제를 실제로 작동시킬 수 없었습니다. 나 ~할 수 있었다 다른 스프로를 트리거로 풀어 주지만 (실제로 복잡하지는 않지만) '삽입에서 선택한 선택 ...'유형 문의 일부로 수행하기에는 너무 복잡합니다. 실제로 자체적으로 몇 줄의 코드 라인입니다. 그러므로 나는 어쨌든 커서가 필요하다고 생각합니다.

편집하다: (29/12/09) - 절망적 인 Sproc 코드를 풀었지만 Sybase ASA 6에서 작동하는 커서 예제를 갖고 싶습니다. 쉽게 풀. 그래서 나는 이것을 현상금으로 던질 것입니다 - 캔 누구 저에게 작동하는 예를 줘? :-)

도움이 되었습니까?

해결책

행 레벨 트리거를 찾고있는 것 같습니다.

기본적으로 ASA의 트리거는 명령문 레벨입니다 (전체 트리거 진술이 완료된 후 트리거가 한 번 실행됨). 반면에 행 레벨 트리거는 변경된 각 행에 대해 한 번 실행합니다.

다음은 행 레벨 트리거의 예입니다.

CREATE TRIGGER tr_log
AFTER UPDATE OF "myfield"
ON mytable
REFERENCING OLD AS old_data NEW AS new_data

FOR EACH ROW

BEGIN
    Insert into Narc_USER_INFO_Change (Field_Changed, New_Value, Original_Value, user)
    Values('myfield', new_data.myfield,  old_data.myfield, CURRENT USER);
END
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top