이전글: 2022.04.18 - [Database/Oracle Database] - Oracle Application Express 개요 & 샘플 - 3.1. APEX 사용 샘플 #1 - 로컬 테이블을 이용한 Report 생성
테이블 데이터 로드 및 Report 확인
이제 해당 테이블에 데이터를 로딩할 차례입니다. SQL Workshop > SQL Script 화면으로 다시 이동합니다. 이번에는 Create을 클릭하여 완성된 스크립트를 붙여넣습니다.
Create을 클릭하여 나타난 Script Editor 화면에서 아래 내용을 붙여넣고 Run을 클릭합니다. apex_data_parser.parse Function으로 가져오는 UN 의료인력 데이터에서는 국가 코드만 제공합니다. 테스트할 이후 쿼리에서는 ISO 코드가 사용되기 때문에 데이터를 로딩한 다음, 국가 코드를 ISO 코드로 업데이트했습니다.
그리고 아래 스크립트에서 사용한 PL/SQL 블록들은 다음과 같은 일을 수행하고 있습니다.
· apex_data_parser PL/SQL Package: csv를 비롯한 다양한 파일 포맷의 파일을 파싱해서 테이블에 직접 Insert ... Select 할 수 있게 해 줍니다.
· apex_web_service.make_rest_request_b PL/SQL Function: RESTful 스타일의 웹 서비스를 호출해서 BLOB 형태로 결과를 리턴합니다. apex_data_parser 패키지와 함께 사용해서 REST API로 부터 테이블에 직접 데이터를 로드할 수 있게 해 줍니다.
-- Remove current data truncate table health_personnel; -- Load data from UN (csv) REST API insert into health_personnel (Region_code, Region_name, Year, Series, Value) select col001, col002, col003, col004, replace(col005,',','') from table(apex_data_parser.parse ( p_content => apex_web_service.make_rest_request_b ('http://data.un.org/_Docs/SYB/CSV/SYB64_154_202110_Health%20Personnel.csv', 'GET') , p_file_name => 'SYB64_154_202110_Health%20Personnel.csv' , p_skip_rows => 2 )); -- update region_code update pdbadmin.health_personnel set region_code = case when region_code = '533' then 'ABW' when region_code = '4' then 'AFG' when region_code = '24' then 'AGO' when region_code = '660' then 'AIA' when region_code = '248' then 'ALA' when region_code = '8' then 'ALB' when region_code = '20' then 'AND' when region_code = '784' then 'ARE' when region_code = '32' then 'ARG' when region_code = '51' then 'ARM' when region_code = '16' then 'ASM' when region_code = '10' then 'ATA' when region_code = '260' then 'ATF' when region_code = '28' then 'ATG' when region_code = '36' then 'AUS' when region_code = '40' then 'AUT' when region_code = '31' then 'AZE' when region_code = '108' then 'BDI' when region_code = '56' then 'BEL' when region_code = '204' then 'BEN' when region_code = '535' then 'BES' when region_code = '854' then 'BFA' when region_code = '50' then 'BGD' when region_code = '100' then 'BGR' when region_code = '48' then 'BHR' when region_code = '44' then 'BHS' when region_code = '70' then 'BIH' when region_code = '652' then 'BLM' when region_code = '112' then 'BLR' when region_code = '84' then 'BLZ' when region_code = '60' then 'BMU' when region_code = '68' then 'BOL' when region_code = '76' then 'BRA' when region_code = '52' then 'BRB' when region_code = '96' then 'BRN' when region_code = '64' then 'BTN' when region_code = '74' then 'BVT' when region_code = '72' then 'BWA' when region_code = '140' then 'CAF' when region_code = '124' then 'CAN' when region_code = '166' then 'CCK' when region_code = '756' then 'CHE' when region_code = '152' then 'CHL' when region_code = '156' then 'CHN' when region_code = '384' then 'CIV' when region_code = '120' then 'CMR' when region_code = '180' then 'COD' when region_code = '178' then 'COG' when region_code = '184' then 'COK' when region_code = '170' then 'COL' when region_code = '174' then 'COM' when region_code = '132' then 'CPV' when region_code = '188' then 'CRI' when region_code = '192' then 'CUB' when region_code = '531' then 'CUW' when region_code = '162' then 'CXR' when region_code = '136' then 'CYM' when region_code = '196' then 'CYP' when region_code = '203' then 'CZE' when region_code = '276' then 'DEU' when region_code = '262' then 'DJI' when region_code = '212' then 'DMA' when region_code = '208' then 'DNK' when region_code = '214' then 'DOM' when region_code = '12' then 'DZA' when region_code = '218' then 'ECU' when region_code = '818' then 'EGY' when region_code = '232' then 'ERI' when region_code = '732' then 'ESH' when region_code = '724' then 'ESP' when region_code = '233' then 'EST' when region_code = '231' then 'ETH' when region_code = '246' then 'FIN' when region_code = '242' then 'FJI' when region_code = '238' then 'FLK' when region_code = '250' then 'FRA' when region_code = '234' then 'FRO' when region_code = '583' then 'FSM' when region_code = '266' then 'GAB' when region_code = '826' then 'GBR' when region_code = '268' then 'GEO' when region_code = '831' then 'GGY' when region_code = '288' then 'GHA' when region_code = '292' then 'GIB' when region_code = '324' then 'GIN' when region_code = '312' then 'GLP' when region_code = '270' then 'GMB' when region_code = '624' then 'GNB' when region_code = '226' then 'GNQ' when region_code = '300' then 'GRC' when region_code = '308' then 'GRD' when region_code = '304' then 'GRL' when region_code = '320' then 'GTM' when region_code = '254' then 'GUF' when region_code = '316' then 'GUM' when region_code = '328' then 'GUY' when region_code = '344' then 'HKG' when region_code = '334' then 'HMD' when region_code = '340' then 'HND' when region_code = '191' then 'HRV' when region_code = '332' then 'HTI' when region_code = '348' then 'HUN' when region_code = '360' then 'IDN' when region_code = '833' then 'IMN' when region_code = '356' then 'IND' when region_code = '86' then 'IOT' when region_code = '372' then 'IRL' when region_code = '364' then 'IRN' when region_code = '368' then 'IRQ' when region_code = '352' then 'ISL' when region_code = '376' then 'ISR' when region_code = '380' then 'ITA' when region_code = '388' then 'JAM' when region_code = '832' then 'JEY' when region_code = '400' then 'JOR' when region_code = '392' then 'JPN' when region_code = '398' then 'KAZ' when region_code = '404' then 'KEN' when region_code = '417' then 'KGZ' when region_code = '116' then 'KHM' when region_code = '296' then 'KIR' when region_code = '659' then 'KNA' when region_code = '410' then 'KOR' when region_code = '414' then 'KWT' when region_code = '418' then 'LAO' when region_code = '422' then 'LBN' when region_code = '430' then 'LBR' when region_code = '434' then 'LBY' when region_code = '662' then 'LCA' when region_code = '438' then 'LIE' when region_code = '144' then 'LKA' when region_code = '426' then 'LSO' when region_code = '440' then 'LTU' when region_code = '442' then 'LUX' when region_code = '428' then 'LVA' when region_code = '446' then 'MAC' when region_code = '663' then 'MAF' when region_code = '504' then 'MAR' when region_code = '492' then 'MCO' when region_code = '498' then 'MDA' when region_code = '450' then 'MDG' when region_code = '462' then 'MDV' when region_code = '484' then 'MEX' when region_code = '584' then 'MHL' when region_code = '807' then 'MKD' when region_code = '466' then 'MLI' when region_code = '470' then 'MLT' when region_code = '104' then 'MMR' when region_code = '499' then 'MNE' when region_code = '496' then 'MNG' when region_code = '580' then 'MNP' when region_code = '508' then 'MOZ' when region_code = '478' then 'MRT' when region_code = '500' then 'MSR' when region_code = '474' then 'MTQ' when region_code = '480' then 'MUS' when region_code = '454' then 'MWI' when region_code = '458' then 'MYS' when region_code = '175' then 'MYT' when region_code = '516' then 'NAM' when region_code = '540' then 'NCL' when region_code = '562' then 'NER' when region_code = '574' then 'NFK' when region_code = '566' then 'NGA' when region_code = '558' then 'NIC' when region_code = '570' then 'NIU' when region_code = '528' then 'NLD' when region_code = '578' then 'NOR' when region_code = '524' then 'NPL' when region_code = '520' then 'NRU' when region_code = '554' then 'NZL' when region_code = '512' then 'OMN' when region_code = '586' then 'PAK' when region_code = '591' then 'PAN' when region_code = '612' then 'PCN' when region_code = '604' then 'PER' when region_code = '608' then 'PHL' when region_code = '585' then 'PLW' when region_code = '598' then 'PNG' when region_code = '616' then 'POL' when region_code = '630' then 'PRI' when region_code = '408' then 'PRK' when region_code = '620' then 'PRT' when region_code = '600' then 'PRY' when region_code = '275' then 'PSE' when region_code = '258' then 'PYF' when region_code = '634' then 'QAT' when region_code = '638' then 'REU' when region_code = '642' then 'ROU' when region_code = '643' then 'RUS' when region_code = '646' then 'RWA' when region_code = '682' then 'SAU' when region_code = '729' then 'SDN' when region_code = '686' then 'SEN' when region_code = '702' then 'SGP' when region_code = '239' then 'SGS' when region_code = '654' then 'SHN' when region_code = '744' then 'SJM' when region_code = '90' then 'SLB' when region_code = '694' then 'SLE' when region_code = '222' then 'SLV' when region_code = '674' then 'SMR' when region_code = '706' then 'SOM' when region_code = '666' then 'SPM' when region_code = '688' then 'SRB' when region_code = '728' then 'SSD' when region_code = '678' then 'STP' when region_code = '740' then 'SUR' when region_code = '703' then 'SVK' when region_code = '705' then 'SVN' when region_code = '752' then 'SWE' when region_code = '748' then 'SWZ' when region_code = '534' then 'SXM' when region_code = '690' then 'SYC' when region_code = '760' then 'SYR' when region_code = '796' then 'TCA' when region_code = '148' then 'TCD' when region_code = '768' then 'TGO' when region_code = '764' then 'THA' when region_code = '762' then 'TJK' when region_code = '772' then 'TKL' when region_code = '795' then 'TKM' when region_code = '626' then 'TLS' when region_code = '776' then 'TON' when region_code = '780' then 'TTO' when region_code = '788' then 'TUN' when region_code = '792' then 'TUR' when region_code = '798' then 'TUV' when region_code = '158' then 'TWN' when region_code = '834' then 'TZA' when region_code = '800' then 'UGA' when region_code = '804' then 'UKR' when region_code = '581' then 'UMI' when region_code = '858' then 'URY' when region_code = '840' then 'USA' when region_code = '860' then 'UZB' when region_code = '336' then 'VAT' when region_code = '670' then 'VCT' when region_code = '862' then 'VEN' when region_code = '92' then 'VGB' when region_code = '850' then 'VIR' when region_code = '704' then 'VNM' when region_code = '548' then 'VUT' when region_code = '876' then 'WLF' when region_code = '882' then 'WSM' when region_code = '887' then 'YEM' when region_code = '710' then 'ZAF' when region_code = '894' then 'ZMB' when region_code = '716' then 'ZWE' else region_code end; |
데이터가 입력된 것을 확인합니다. 2022년 4월 현재 기준으로 5,808건 데이터가 로드되어야 합니다.
데이터가 성공적으로 업로드된 후, 런타임 환경으로 다시 가서 브라우저를 Refresh 해 보면 Report에 데이터가 나오는 것을 확인할 수 있습니다.
Report 수정
Report 수정을 위해 Page Designer 화면으로 이동합니다. Page Designer 화면 이동은 런타임 환경 하단의 Page2를 클릭해서 이동하거나, 아래와 같이 어플리케이션 홈페이지에서 해당 페이지(Page2)를 클릭하여 이동하는 방법이 있습니다.
먼저 수정할 내용은 현재 Report에서 숫자 데이터가 “13780”, “.6”과 같이 출력되는 것을 “13,780”, “0.6”과 같이 1000단위 숫자 구분 등을 하여 가독성을 높이는 것입니다. 이를 위해 2 Personnel을 클릭해서 Page 2 Page Designer로 이동합니다.
Page Desinger 왼쪽 Rendering Tree의 Body > Health Personnel > Columns를 클릭하여 칼럼들이 보이도록 확장합니다. 여기에서 VALUE 칼럼을 선택한 다음, 오른쪽 Property Editor의 Appearance 섹션 아래 Format Mask의 오른편 아이콘을 클릭합니다.
Format Mask 대화창에서 “5230.10”을 선택합니다.
Format Mask를 선택한 후, Page Designer 오른편 상단의 녹색 Save and Run Page 버튼을 클릭하여 방금 적용한 내용이 반영되었는지 확인합니다.
오른쪽 칼럼 Value의 값들의 표기가 “13,780”, “0.6”과 같이 변경된 것을 확인할 수 있습니다.
이번에는 UN에서 제공하는 데이터 외에 사용자의 임의 데이터 업데이터, 삭제, 추가를 막기 위해 런타임 환경의 Edit 아이콘과 Create 버튼을 없애는 작업을 하겠습니다. 이를 위해 Page Desiner 화면으로 다시 이동합니다.
먼저 Edit 아이콘을 없애는 작업입니다. 왼편 Rendering Tree에서 Body 아래 Health Personnel을 클릭합니다. 그리고 왼편 Property Editor의 Attribute 탭으로 이동합니다. Link 섹션의 Link Column의 값이 현재Link to Custom Target으로 되어 있습니다. 이를 Exclude Link Column 값으로 변경합니다.
그리고, Create 버튼을 삭제하여 사용자가 새로운 데이터를 입력하지 못하도록 합니다. Rendering Tree의 Create 버튼을 선택 후, 마우스 오른편 클릭을 해서 나타난 Delete를 클릭하여 Create 버튼을 삭제합니다. 그 다음 오른편 상단의 녹색 Save and Run Page 버튼을 클릭하여 방금 적용한 내용이 반영되었는지 확인합니다.
런타임 환경에서 Edit 아이콘과 Create 버튼이 사라진 것을 확인할 수 있습니다.
추가적으로 이젠 더 이상 사용되지 않는 데이터 수정, 삭제, 생성용 Form 페이지도 삭제합니다. 상단의 Page Designer toolbar에서 페이지를 선택하는 부분에서 3 페이지를 선택하여 이동합니다. 그리고, 아래와 같이Page Designer toolbar의 Utilities를 클릭한 다음 Delete Page를 클릭하여 3 페이지를 삭제합니다.
내용을 확인하고, Permanently Delete Page를 클릭하여 3 페이지를 삭제합니다.
리포트 수정이 끝났습니다.
<END>
다음 글: