새 행을 테이블에 삽입 할 때 발생하는 트리거를 만들려고합니다. 트리거는 해당 테이블에 삽입 행의 동일한 열의 값과 같은 열이있는 행이 있는지 확인해야합니다. 그런 다음 선택한 테이블과 동일한 ID를 가진 원본 테이블의 행을 업데이트해야합니다. 이제는 데이터 (모든 열)를 검색하라는 요청을해야합니다. 그러면 문제가 발생합니다.PL/SQL은 Oracle에서 SELECT INTO를 사용하여 여러 행을 검색합니다.
문제는 해당 요청의 결과를 저장하는 데 사용되는 변수를 선언해야한다는 것입니다. 그 변수는 않습니다에서 내가 데이터를 검색 할 테이블과 동일한 유형이 있어야합니다,하지만 난 그런 식으로 그것을 선언 할 때 (REC_ROAD_INT 내 테이블) :
DECLARE REQUEST_RESULT REC_ROAD_INT%TYPE;
내가
%TYPE must be applied to a variable, column, field or attribute, not to "REC_ROAD_INT"
수 실제로 필자는 필요한 데이터 만 검색 할 수 있지만 테이블에 요구 사항을 충족하는 행이 하나 밖에없는 경우에만 검색 할 수 있습니다. 다음은 샘플입니다.
create or replace TRIGGER INSERT_ROAD_TRIGGER
BEFORE INSERT ON REC_ROAD_INT
FOR EACH ROW
DECLARE
ROAD_ID NUMBER;
ROAD_NAME VARCHAR2(20);
ROAD_START_KM NUMBER;
ROAD_END_KM NUMBER;
BEGIN
SELECT ID, NAME, START_KM, END_KM INTO ROAD_ID, ROAD_NAME, ROAD_START_KM, ROAD_END_KM
FROM REC_ROAD_INT
WHERE (:NEW.START_KM BETWEEN START_KM AND END_KM) OR
(:NEW.END_KM BETWEEN START_KM AND END_KM);
IF INSERTING
THEN
DBMS_Output.Put_Line('INSERTING');
DBMS_Output.Put_Line('Inserting road: ' || :NEW.ID || ' ' || :New.NAME || ' ' || :New.START_KM || ' ' || :New.END_KM);
DBMS_Output.Put_Line('Crossing road: ' || 'ID = ' || ROAD_ID || ', NAME = ' || ROAD_NAME ||
', START_KM = ' || ROAD_START_KM || ', END_KM = ' || ROAD_END_KM);
END IF;
END;
어떻게하면 모든 행을 가져올 수 있습니까? 감사.
복합 트리거를 찾고있는 것처럼 '커서' –
소리가 들릴 수 있습니다. http://viralpatel.net/blogs/compound-triggers-in-oracle-11g-tutorial-example/ –
@Akio Hamasaki, that 's 좋은 생각, 나는 그것을 시도 할 것이다 –