Триггеры: как я могу инициализировать значение в таблице значением в другой? - PullRequest
1 голос
/ 16 января 2011

Я создаю триггер, чтобы инициализировать значение plazas_disponibles в таблице VUELO со значением емкости в таблице MODELO.Вот так:

create or replace
TRIGGER inicializar_plazas_disponibles
    BEFORE INSERT OR UPDATE ON VUELO 
    BEGIN
         SET VUELO (plazas_disponibles) = MODELO (capacidad);
    END inicializar_plazas_disponibles; 

И я получаю следующие ошибки:

Error(2,10): PL/SQL: SQL Statement ignored
Error(2,14): PL/SQL: ORA-00922: missing or invalid option
Error(2,23): PL/SQL: ORA-00971: missing SET keyword

Почему?

1 Ответ

1 голос
/ 17 января 2011

Поскольку это не то, как вы изменяете значение во вставляемой строке - вам нужно изменить его, используя синтаксис :NEW ( документация );и вы не показали, как извлечь соответствующее значение из таблицы MODELO.

Вам нужно сделать что-то вроде:

CREATE OR REPLACE TRIGGER inicializar_plazas_disponibles
BEFORE INSERT OR UPDATE ON vuelo
FOR EACH ROW
BEGIN
    SELECT capacidad
    INTO :NEW.plazas_disponibles
    FROM modelo
    WHERE ... some condition, presumably another :NEW column ...
END;

(хотя я неполностью уверен, что вы можете выбрать прямо в :NEW значение - попробуйте это, но если нет, вам нужно объявить переменную того же типа, вместо этого выберите ее, а затем назначьте ее для :NEW).

...