Оператор SELECT в PL / SQL Trigger возвращает ноль - PullRequest
0 голосов
/ 22 июля 2011

Коллега (с ограниченными навыками PL / SQL, чтобы соответствовать моему!) Пытается создать триггерный бэкэнд (основанной на Oracle) ERP-системы. Он упростил мне задачу с помощью следующих примеров.

Короче говоря, у него есть оператор выбора, который отображает ожидаемый результат:

SELECT TO_CHAR(MAX(
RESULT_KEY))
FROM IFSINFO.QUOTATION_REPORTS
WHERE QUOTATION_NO = 'G1002387'

... но при включении в триггер появляется значение NULL:

CREATE OR REPLACE TRIGGER VMO_QUOTATION_LINK
BEFORE INSERT OR UPDATE
ON VMO_OPPORTUNITY_LINE
FOR EACH ROW

DECLARE
  QuotationLink VARCHAR2(255);

BEGIN
  SELECT TO_CHAR(MAX(RESULT_KEY))
  INTO QuotationLink
  FROM IFSINFO.QUOTATION_REPORTS
  WHERE QUOTATION_NO = 'G1002387';

  :NEW.URL5 := QuotationLink;
END;

Я не эксперт, но на первый взгляд кажется, что все в порядке. Кто-нибудь может посоветовать?

Есть ли альтернативный подход, который я могу попробовать? И дальнейшие предложения о том, как это отладить?

1 Ответ

3 голосов
/ 22 июля 2011
create table quotation_reports (quotation_no varchar2(30), result_key number);

insert into quotation_reports values ('G1002387', 1);
insert into quotation_reports values ('G1002387', 10);

SQL> select to_char(max(result_key)) from quotation_reports where quotation_no = 'G1002387';

TO_CHAR(MAX(RESULT_KEY))
----------------------------------------
10

create table vmo_opportunity_line(url5 varchar2(300), test_column varchar2(100));

CREATE OR REPLACE TRIGGER VMO_QUOTATION_LINK
BEFORE INSERT OR UPDATE ON VMO_OPPORTUNITY_LINE
FOR EACH ROW
   DECLARE
QuotationLink VARCHAR2(255);
BEGIN
    SELECT TO_CHAR(MAX(RESULT_KEY))   INTO QuotationLink
    FROM QUOTATION_REPORTS
WHERE QUOTATION_NO = 'G1002387';
    :NEW.URL5 := QuotationLink;
END;

insert into vmo_opportunity_line(test_column) values ('A');

select * from vmo_opportunity_line;

URL5        TEST
-----       ------
10          'A'

Этот образец отлично работает. Я не вижу ничего плохого.

...