- はじめに - 表とレポート・アプリケーションの作成
- データ・ワークショップ
- データ・ロード・ウィザード
- APEX_DATA_PARSERパッケージ
- XMLパーサー
- CSVによる出力
- JSONによる出力
各都道府県が公開している新型コロナウイルス感染症の陽性患者データを題材に、それぞれのデータ取り込み方法について解説していきます。また、追加で取り込んだデータを出力する方法についても若干説明を行う予定です。
表の作成
一般社団法人コード・フォー・ジャパンの方々によって、以下の活動が行われています。
新型コロナウイルス感染症対策のためのデータ公開支援
この活動の一環として、「新型コロナウイルス感染症対策に関するオープンデータ項目定義書」が作成されています。今回はその中の陽性患者属性を取り込みの対象とし、この定義書に準拠してデータを保持する表を定義します。本記事はOracle APEXの機能の紹介を目的としており、自治体向けのサイトを構築することは目的としてはいません。公開サイトを構築する場合は、上記URLに記載されている内容に従ってください。
では、「新型コロナウイルス感染症対策に関するオープンデータ項目定義書」(2020年5月25日更新版)に含まれるデータセット名、陽性患者属性の定義に従って表を作成します。表の定義にはクイックSQLを使用します。
SQLワークショップよりユーティリティを開き、クイックSQLを実行します。
クイックSQLによる表定義を左側に記述します。定義は以下になります。
# prefix: covid19
# semantics: default
# genpk: false
PATIENTS
"No" number
MUNICIPALITY_CODE number
PREFECTURE_NAME vc16 /nn
CITY_NAME vc40
PUBLISHED_DATE date
ONSET_DATE date
PATIENT_LOCATION vc200
PATIENT_AGE vc40
PATIENT_SEX vc40
PATIENT_OCCUPATION vc200
PATIENT_STATUS vc200
PATIENT_SYMPTOM vc200
PATIENT_TRAVEL_HISTORY number /check 1,0
PATIENT_LEFT_HOSPITAL number /check 1,0
REMARK vc200
陽性患者属性とクイックSQLで定義した列名の関係は以下になります。属性定義の詳細は元の定義書を参照してください。列名 | 定義書の属性名 |
No | No |
MUNICIPALITY_NAME | 全国地方公共団体コード |
PREFECTURE_NAME | 都道府県名 |
CITY_NAME | 市区町村名 |
PUBLISHED_DATE | 公表_年月日 |
ONSET_DATE | 発症_年月日 |
PATIENT_LOCATION | 患者_居住地 |
PATIENT_AGE | 患者_年代 |
PATIENT_SEX | 患者_性別 |
PATIENT_OCCUPATION | 患者_職業 |
PATIENT_STATUS | 患者_状態 |
PATIENT_SYMPTOM | 患者_症状 |
PATIENT_TRAVEL_HISTORY | 患者_渡航歴の有無フラグ |
PATIENT_LEFT_HOSPITAL | 患者_退院済フラグ |
REMARK | 備考 |
クイックSQLによる定義から、表を作成するSQLが生成されます。生成されるSQLに条件を加えるため、設定をクリックします。
オブジェクト接頭辞としてCOVID19を指定し、主キーは12c identityデータ型を選択します。実際は主キー定義のない表を作りますが、これ以外を選択すると追加のトリガーが生成されます。トリガーの生成を避けるために12c identityデータ型を選択します。
画面下へスクロールし、自動主キーをOFFに設定した後、変更の保存を実行します。
設定に準じた形で画面右側に表COVID19_PATIENTSを作成するSQLが表示されます。このSQLを実行して、表を新規作成します。レビューおよび実行の前に、SQLスクリプトを保存を実行します。SQLスクリプトを保存するまでは、レビューおよび実行のボタンはグレーアウトしていて、実行することができません。
スクリプト名は任意ですが、ここではcovid19patientsを入力しています。"_"などの記号はスクリプト名に含められません。スクリプト名を入力したのち、スクリプトを保存をクリックします。
レビューおよび実行のボタンがクリック可能になります。クリックして実行します。
カラム名として"No"としたいところが"no"となっているので、変更します。その後、実行をクリックします。
確認画面が表示されるので、即時実行を行います。
スクリプトの実行結果が表示されます。フィードバックとして「表が作成されました。」、結果として1行が成功となっていれば、表が作成されています。アプリケーションの作成をクリックし、アプリケーション作成ウィザードを起動します。
アプリケーションの作成
確認画面が表示されるので、アプリケーションの作成をクリックします。
アプリケーション作成ウィザードでは、名前を新型コロナウイルス感染症陽性患者属性とします。
下にスクロールして、ユーザー・インターフェースのデフォルト値をクリックします。
生成されるページのラベルを指定することができます。デフォルトではラベルは表名や列名から導出されるため、英語になります。ここで鉛筆アイコンをクリックしてひとつひとつラベルを日本語に変更することもできますが、今回はJSONを編集することで、一括でラベルを変更します。JSONの表示をクリックします。
JSONが表示されたら、以下の内容で置き換えます。元々の定義に従って、各種ラベルの部分だけを日本語に置き換えています。
{
"applicationDefaults": {
"name": "Application Defaults",
"tablePrefixes": "",
"description": "",
"tables": [
{
"table": "COVID19_PATIENTS",
"labelSingular": "陽性患者属性",
"labelPlural": "陽性患者一覧",
"primaryDisplayColumn": "%",
"secondaryDisplayColumn": "%",
"primaryKeyColumn": "%",
"primaryParentTable": "%",
"description": ""
}
],
"tableColumns": [
{
"table": "COVID19_PATIENTS",
"column": "CITY_NAME",
"label": "市区町村名",
"formControl": "text",
"includeOnForms": true,
"includeOnReports": true,
"required": false,
"help": "VARCHAR2"
}
,
{
"table": "COVID19_PATIENTS",
"column": "MUNICIPALITY_CODE",
"label": "全国地方公共団体コード",
"formControl": "numberField",
"includeOnForms": true,
"includeOnReports": true,
"formatMask": "999G999G999G999G999G999G999G999G999G990",
"required": false,
"help": "NUMBER"
}
,
{
"table": "COVID19_PATIENTS",
"column": "NO",
"label": "No",
"formControl": "numberField",
"includeOnForms": true,
"includeOnReports": true,
"formatMask": "999G999G999G999G999G999G999G999G999G990",
"required": false,
"help": "NUMBER"
}
,
{
"table": "COVID19_PATIENTS",
"column": "ONSET_DATE",
"label": "発症_年月日",
"formControl": "datePicker",
"includeOnForms": true,
"includeOnReports": true,
"required": false,
"help": "DATE"
}
,
{
"table": "COVID19_PATIENTS",
"column": "PATIENT_AGE",
"label": "患者_年代",
"formControl": "text",
"includeOnForms": true,
"includeOnReports": true,
"required": false,
"help": "VARCHAR2"
}
,
{
"table": "COVID19_PATIENTS",
"column": "PATIENT_LEFT_HOSPITAL",
"label": "患者_退院済フラグ",
"formControl": "numberField",
"includeOnForms": true,
"includeOnReports": true,
"formatMask": "999G999G999G999G999G999G999G999G999G990",
"required": false,
"help": "NUMBER"
}
,
{
"table": "COVID19_PATIENTS",
"column": "PATIENT_LOCATION",
"label": "患者_居住地",
"formControl": "text",
"includeOnForms": true,
"includeOnReports": true,
"required": false,
"help": "VARCHAR2"
}
,
{
"table": "COVID19_PATIENTS",
"column": "PATIENT_OCCUPATION",
"label": "患者_職業",
"formControl": "text",
"includeOnForms": true,
"includeOnReports": true,
"required": false,
"help": "VARCHAR2"
}
,
{
"table": "COVID19_PATIENTS",
"column": "PATIENT_SEX",
"label": "患者_性別",
"formControl": "text",
"includeOnForms": true,
"includeOnReports": true,
"required": false,
"help": "VARCHAR2"
}
,
{
"table": "COVID19_PATIENTS",
"column": "PATIENT_STATUS",
"label": "患者_状態",
"formControl": "text",
"includeOnForms": true,
"includeOnReports": true,
"required": false,
"help": "VARCHAR2"
}
,
{
"table": "COVID19_PATIENTS",
"column": "PATIENT_SYMPTOM",
"label": "患者_症状",
"formControl": "text",
"includeOnForms": true,
"includeOnReports": true,
"required": false,
"help": "VARCHAR2"
}
,
{
"table": "COVID19_PATIENTS",
"column": "PATIENT_TRAVEL_HISTORY",
"label": "患者_渡航歴の有無フラグ",
"formControl": "numberField",
"includeOnForms": true,
"includeOnReports": true,
"formatMask": "999G999G999G999G999G999G999G999G999G990",
"required": false,
"help": "NUMBER"
}
,
{
"table": "COVID19_PATIENTS",
"column": "PREFECTURE_NAME",
"label": "都道府県名",
"formControl": "text",
"includeOnForms": true,
"includeOnReports": true,
"required": true,
"help": "VARCHAR2"
}
,
{
"table": "COVID19_PATIENTS",
"column": "PUBLISHED_DATE",
"label": "公表_年月日",
"formControl": "datePicker",
"includeOnForms": true,
"includeOnReports": true,
"required": false,
"help": "DATE"
}
,
{
"table": "COVID19_PATIENTS",
"column": "REMARK",
"label": "備考",
"formControl": "text",
"includeOnForms": true,
"includeOnReports": true,
"required": false,
"help": "VARCHAR2"
}
],
"components": {
"reports": {
"rowsPerPage": "50",
"paginationMethod": "nextPrevious",
"numericFormatMask": "99G999G999G999G999G999G999G999G999G999G990",
"dateFormatMask": "SINCE"
}
}
}
}
内容を置き換えた後、属性デフォルトの適用を実行します。JSONでの指定が属性デフォルトに反映されます。変更されたラベルを確認した後、アプリケーション作成ウィザードに戻るをクリックします。
表名から導出されたレポート名がPatientsとなっているので変更します。編集をクリックします。
ページ名を陽性患者一覧へ変更し、変更の保存をクリックします。
レポート名が変更されていることを確認し、アプリケーションの作成を実行します。
アプリケーションの作成が完了すると、以下の画面が表示されます。
アプリケーションを実行して確認しましょう。