oracle Синтаксис оповещения о форме - PullRequest
0 голосов
/ 12 апреля 2020

Я хочу показать предупреждение, когда у Инвестора нет транзакций

Таблицы:

Investor    
Investor_Number PK  Number (7,0)    Not Null
    First_Name      Varchar2 (25)   Not Null
    Last_Name       Varchar2 (30)   Not Null
    Account_Number      Number (7,0)        FK  Not Null

Portfolio   
    Portfolio_Number    PK  Number (7,0)    Not Null
    Investor_Number     Number (7,0)        FK  Not Null
    Portfolio_Description       Varchar2 (50)   Null

Transaction 
    Portfolio_Number    PK  Number (7,0)        FK
    Stock_Code      Varchar2 (10)       FK
    Transaction_Date        Date
    Exchange_Code       Varchar2 (4)        FK
    Broker_Number       Number (7,0)        FK
    Buy_Sell        Char (1)

DECLARE

    V_count number;
BEGIN

select count(portfolio_number)
into V_count
FROM Transaction
where portfolio_number = :PORTFOLIO.portfolio_number;

    If  V_count = null then 
        Message('No Transaction');
    End if;
END;

Код выше не работает, я не знаю синтаксис.

теперь я использую пост-запрос на уровне блока, когда у Инвестора нет транзакций, появится предупреждение. Два блока отображения «Инвестор» и «Портфолио». Как это работает, если щелкнуть следующую запись, если в записи нет транзакций, появится всплывающее предупреждение.

1 Ответ

1 голос
/ 12 апреля 2020

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

  • COUNT не вернет NULL; даже если бы это было так, вы бы использовали if v_count is null, а не if v_count = null
  • два последовательных MESSAGE вызова, которые заставят Forms отображать сообщение во всплывающем окне на экране; если вы используете только один MESSAGE, он будет отображаться внизу экрана, в строке состояния
    • или посмотрите, как работают real оповещения; но да - 2 MESSAGE с проще

DECLARE
  V_count number;
BEGIN
  select count(portfolio_number)
    into V_count
    FROM Transaction
    where portfolio_number = :PORTFOLIO.portfolio_number;

  If  V_count = 0 then           --> COUNT never returns NULL
     Message('No Transaction');  --> 2 consecutive MESSAGE calls to "simulate" an alert
     Message('No Transaction');   
  else
     Message('Number of transactions = ' || to_char(v_count));   
     Message('Number of transactions = ' || to_char(v_count));   
  End if;
END;
...