Я пытаюсь создать триггер, который запускается, когда новая строка вставляется в таблицу. Триггер должен проверить, есть ли в этой таблице какие-либо строки, которые имеют значение в столбце, которое равно значению из того же столбца в строке вставки. Затем мне нужно обновить строки в исходной таблице с тем же идентификатором, что и выбранные. Теперь мне нужно сделать запрос на извлечение данных (все столбцы), и именно тогда у меня возникают проблемы.PL/SQL извлекает несколько строк с помощью SELECT INTO в Oracle
Проблема в том, что мне нужно объявить переменную, которая будет использоваться для хранения результата этого запроса. Эта переменная должна иметь тот же тип, что и таблица I извлечения данных из делает, но когда я объявляю это так (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/ –
@ Акио Хамасаки, это хорошая идея, я попробую, что –