私は Gerrit のいくつかの拡張に取り組んでいます。gerrit DB から特定の ACCOUNT_ID の TOTAL COMMITS、TOTOAL REVIEW COMMENTS などを取得する次のクエリがあります。
with
changeids as
(select change_id from PATCH_SETS where UPLOADER_ACCOUNT_ID=1001961),
patchcommentstoothers as
(select count(*) c from patch_comments where AUTHOR_ID!=1001961 AND Change_id in (select change_id from changeids)),
ownerchanges as
(select count(*) c from changes where owner_account_ID=1001961 and OPEN='Y'),
changemessages as
(select count(*) c from change_messages where AUTHOR_ID=1001961 and change_id not in (select change_id from changeids))
select pcto.c TOT_PATCH_COMMENTS, oc.c TOT_CHANGES, cm.c TOT_CHANGE_MESSAGES
from patchcommentstoothers pcto, ownerchanges oc, changemessages cm;
上記のクエリを使用すると、1 人のユーザーの 3 つのカウントを取得できます。すべての ACCOUNT_ID に対して上記のクエリを実行したいと考えています。このクエリを各アカウント (ここでは 1001961 だけでなく) に対して実行し、すべてのアカウントのすべてのレコードを一度に取得するようなものです。
ACCOUNT テーブルには次の列があります。
"REGISTERED_ON" TIMESTAMP (6) NOT NULL ENABLE,
"FULL_NAME" VARCHAR2(255 BYTE),
"PREFERRED_EMAIL" VARCHAR2(255 BYTE),
"CONTACT_FILED_ON" TIMESTAMP (6),
"MAXIMUM_PAGE_SIZE" NUMBER(6,0) DEFAULT 0,
"SHOW_SITE_HEADER" CHAR(1 BYTE) DEFAULT 'N',
"USE_FLASH_CLIPBOARD" CHAR(1 BYTE) DEFAULT 'N',
"DOWNLOAD_URL" VARCHAR2(20 BYTE),
"DOWNLOAD_COMMAND" VARCHAR2(20 BYTE),
"COPY_SELF_ON_EMAIL" CHAR(1 BYTE) DEFAULT 'N',
"DATE_FORMAT" VARCHAR2(10 BYTE),
"TIME_FORMAT" VARCHAR2(10 BYTE),
"INACTIVE" CHAR(1 BYTE) DEFAULT 'N',
"ACCOUNT_ID" NUMBER(11,0) DEFAULT 0
プロシージャを使用しないことをお勧めします。
PS - 私は Oracle SQL が苦手です。