1

Oracle データベースに 2 つのテーブルがありますUSERSUSERLOG

  • USERSすべてのシステム ユーザーの詳細が含まれます ( IDCOLEMAILISLOCKEDなど)。

  • USERLOGユーザーがシステムにログオンしたときのログです ( USERID, LOGIN(日付フィールド))

キー フィールド: USERS.IDCOL=USERLOG.USERID

削除されたユーザーは、USERS テーブルから削除されます。USERLOGしたがって、テーブルに一致しないID がいくつか存在しUSERSます。

ユーザーリストに対して次の 2 つのことを行います。

  1. 過去 9 か月間システムにアクセスしていないユーザーをロックします (つまり、過去 9 か月間に ID が表示されないUSERLOG場合、次のようなものを使用すると思います。

    months_between( SYSDATE , USERLOG.LOGIN ) <= 9
    
  2. USERLOG過去 1 か月または 30 日以内 (つまり、アカウントが作成されたとき) にエントリが 1 つしかないユーザーをロックします。

ユーザーをロックするには、USERS.ISLOCKED0を更新する必要があります1

どうもありがとう

4

2 に答える 2

1

それをテストできませんでしたが、最初のもの

update users a 
set islocked = 1 
where exists (
    select  1
    from    userlog b
    where   a.idcol = b.userid
    group  by b.userid
    having  months_betwen(sysdte , max(userlog)) <= 9)

2 つ目は、私が正しければ、30 日以上前に 1 回だけアクセスしたユーザーをロックしたいということです。

update users set islocked = 1 
where idcol in (
    select  userid
    from    userlog
    group by userid
    having count(*) = 1
    and count(case when month_between(login , sysdate) < 1 then 1 else null end) = 0)

だから私は基本的に先月と全体の入場者数を数えています。構文がオフになっている可能性があります。ここで例を実行することはできません。

于 2013-04-08T15:36:59.070 に答える