0

私はSql DeveloperとOracleを使用しています。

データベースにシステムを実装する必要があるため、顧客の供給が停止されると、請求書の担当者または企業は、延滞が解消されるまで別のサービス アドレスで新しいアカウントを作成できません。クリア済み。これは、トリガーまたはストアド プロシージャを使用して実装する必要があります。

これが私が試みたものです

    create or replace PROCEDURE NONEWACCOUNT(newcustomerID in number, 
                                             newStatus in varchar)
                                              AS
begin

      select 
      from a2_watermeter
      where customerid = newcustomerid and Status = newStatus;

      if (newStatus = 'Inactive') then
          DBMS_OUTPUT.put_line('Can not make new account as customer has to pay his/or account');
      end if;
      end;

以下は私のデータベースです。

しかし、私はSQLにまったく慣れていないので、何を変更すればよいかわかりません

これに光を当てることができる人に乾杯.

私のデータベース

    a2_METERREADER

 - EMPLOYEEID
 - FIRSTNAME
 - LASTNAME

a2_READING

 - READINGID
 - METERID
 - EMPLOYEEID
 - BILLNUMBER
 - READING
 - DATERECORD

a2_Watermeter

 - METERID
 - ADDRESS
 - SUBURB
 - POSTCODE
 - STATUS
 - CUSTOMERID
 - REPLACE
 - INSTALLDATE

 a2_customer

    - customerid
    - firstname
    - lastname
    - address
    - suburb
    - postcode
    - email
    - phone
    - businessname
    - dateofbirth

 a2_bill

    - billnumber
    - address
    - suburb
    - postcode
    - customerid
    - readingid
    - amount
    - reading
    - firstname
    - lastname
    - paid
    - duedate
4

3 に答える 3

1

計算された値のステータスを持つビューを作成できます。これは、手順で使用したり、他の場所で使用したりできます。このようにして、ビジネス ロジックは 1 か所にまとめられます。次のようなものです。

create view customerstatus  
select c.customerid
,      decode(b.custimerid,null,'Active','Inactive') as status
from customer c
left outer join bill b on (b.customerid = c.custimerid)
where b.payed = 'N'
and b.duedate <= (sysdate - interval '60' day);
于 2012-10-26T09:58:39.363 に答える
1

トリガーではなく、ストアド プロシージャを記述する必要があります。ストアド プロシージャは、おそらく 1 日に 1 回、スケジュールされたジョブから呼び出すことができます。トリガーは、予測できない DML アクティビティに応答して起動します。

あなたは実際には多くの情報を提供していないので、定義の解決策を提供するのはかなり困難です. その上、あなたのためにあなたの仕事をすることはSOの私たちの役割ではありません. しかし、ストアド プロシージャのコアは次のようなクエリになります。

select *
from a2_bill
where paid = 'NO'
and duedate <= (sysdate - interval '60' day)
于 2012-10-26T09:40:19.037 に答える