вставка нескольких значений столбцов в одно значение вставки?

#sql #database #oracle #plsql

#sql #База данных #Oracle #plsql

Вопрос:

Итак, у меня есть это университетское задание, в котором я должен создать триггер с именем bill_overdue. Когда строка со статусом = просрочено вставляется в таблицу invoice , строка вставляется в другую таблицу с именем message .

 CREATE SEQUENCE AUTOINCREMENTMESSAGE
MINVALUE 100
START WITH 101
INCREMENT BY 1
CACHE 10
;

CREATE OR REPLACE TRIGGER BILL_OVERDUE
BEFORE INSERT ON INVOICE
FOR EACH ROW
WHEN (NEW.STATUS = 'Overdue')
BEGIN
INSERT INTO MESSAGE (MESSAGENO,MESSAGEDATE,ORIGIN,MESSAGE)
VALUES (AUTOINCREMENTMESSAGE.nextval,SYSDATE,USER,:NEW.DATEISSUED,:NEW.INVOICENO,:NEW.CAMPAIGNTITLE);
END;
/
  

Теперь, как вы можете видеть, я хочу добавить :new.dateissued :new.invoiceno и :new.campaigntitle в одно поле ( message ). Теперь я знаю, что то, что я сделал, неправильно, но я попытался добавить круглые скобки вокруг него и т. Д., И, Похоже, ничего не делает то, что я хочу. Как мне заставить это работать? Возможно ли делать то, что я хочу, или я понял это совершенно неправильно?

Комментарии:

1. Вы вставляете шесть значений в три столбца. Это не сработает. Вам нужно будет объединить три значения в одно, используя один из методов конкатенации, приведенных ниже (при условии, что имеет смысл их объединить).

Ответ №1:

Вы могли бы использовать конкатенацию

 :new.dateissued || ', ' || :new.invoiceno || ', ' || :new.campaigntitle
  

Ответ №2:

Для Oracle вы также можете выполнить объединение с помощью CONCAT() функции, и вы можете попробовать

 CONCAT(:NEW.DATEISSUED,:NEW.INVOICENO,:NEW.CAMPAIGNTITLE)
  

Возможно, вам придется преобразовать / преобразовать некоторые из этих значений.