1

今日の日付以降の場合に行が編集されないように、何らかのトリガーを作成しようとしています(SYSDATEを使用して取得します)。

私はPL/SQLを初めて使用するため、これを行う方法がわかりません。おそらく、カーソルを使用して日付を取得し、関数を使用してブール値をプロシージャに返し、DMLステートメントを何らかの形で停止するある種のパッケージを考えるでしょう。発射?

前もって感謝します

4

2 に答える 2

1

明らかに、ターゲットとして日付列が必要です。SYSDATE を切り捨てると、真夜中になります。したがって、切り捨てられた SYSDATE が別の日付よりも大きい場合、それは少なくとも翌日でなければなりません。

アプリケーション エラーが発生すると、更新が失敗します。複数の行を更新している場合、1 回の失敗ですべての変更がロールバックされることに注意してください。

create or replace trigger your_trg 
    before update on your_table 
    for each row 
begin
    if trunc(sysdate) > :old.whatever_date then
        raise_application_error(-20000, 'It is too late to change this record');
    end if;
end; 
于 2013-04-13T21:40:01.967 に答える
0

探しているソリューションはVPD 列マスキングです。主にセキュリティ目的で使用される VPD を使用すると、データ アクセスと表示に関する行/列レベルのルールを定義できます。

于 2013-04-14T13:31:43.927 に答える