sql >> データベース >  >> RDS >> Oracle

特定の値のテーブルに追加できるのは3行のみです

    これには、SQL標準で定義されているが、Oracleでは実装されていないアサーションが必要です。 (それらを導入する動き がありますが 。

    マテリアライズドビューを使用して透過的に適用することができます。

    create materialized view project_manager
    refresh on commit 
    as 
    select Project_manager_employee_id
            , count(*) as no_of_projects
    from project
    group by Project_manager_employee_id
    /
    

    魔法は:

    alter table project_manager
       add constraint project_manager_limit_ck check 
           ( no_of_projects <= 3 )
    /
    

    このチェック制約は、マネージャーのプロジェクトの数が3を超えた場合にマテリアライズド・ビューが更新されるのを防ぎます。これが失敗すると、トリガーとなる挿入または更新が失敗します。確かにそれはエレガントではありません。

    mviewはコミット時に(つまりトランザクション的に)更新されるため、projectでログを作成する必要があります 表:

    create materialized view log on project
    


    1. テーブルではなくデータベース全体に適用されるクエリを作成する

    2. PostgreSQLのシステム言語とエラーメッセージを変更する

    3. PHPの複数の画像ファイルのアップロードとフォルダおよびデータベースへの保存

    4. mysqlデータを逆ソートする方法