diff --git a/Oracle/PCORI_MEDS_SCHEMA_CHANGE_ora.sql b/Oracle/PCORI_MEDS_SCHEMA_CHANGE_ora.sql index 139f479..60cf1eb 100644 --- a/Oracle/PCORI_MEDS_SCHEMA_CHANGE_ora.sql +++ b/Oracle/PCORI_MEDS_SCHEMA_CHANGE_ora.sql @@ -1,11 +1,51 @@ -alter table pcornet_med add PCORI_NDC varchar2(12); -UPDATE PCORNET_MED set pcori_ndc = pcori_basecode where length(pcori_basecode)=11 and c_hlevel>2 and LOWER(sourcesystem_cd) not in ('integration_tool') +-- Do the following before running this script: +-- If using Oracle: +-- Execute scilhs-ontology/Release/Oracle/create_oracle_metadata_tables.sql +-- Populate I2B2METADATA.pcornet_med using scilhs-ontology/Release/Oracle/pcornet_med.zip + +-- Do the following after running this script: +-- Execute i2p-transform/Oracle/PCORNetLoader_ora.sql + +-- alter table pcornet_med add PCORI_NDC varchar2(12); +DECLARE + X NUMBER; +BEGIN + SELECT COUNT(*) + INTO X + FROM dba_tab_columns + WHERE owner = 'I2B2METADATA' + AND table_name = 'PCORNET_MED' + AND column_name = 'PCORI_NDC'; + IF (X = 0) THEN + EXECUTE IMMEDIATE 'ALTER TABLE I2B2METADATA.pcornet_med ADD PCORI_NDC varchar2(12) NULL'; + END IF; +END; + +UPDATE I2B2METADATA.PCORNET_MED set pcori_ndc = pcori_basecode where length(pcori_basecode)=11 and c_hlevel>2 and LOWER(sourcesystem_cd) not in ('integration_tool') and pcori_basecode not like 'N%'; -alter table pcornet_med add PCORI_CUI varchar2(8); -UPDATE pcornet_med set PCORI_CUI = PCORI_BASECODE where length(pcori_basecode)<11 and c_hlevel>2 and LOWER(sourcesystem_cd) not in ('integration_tool') +-- alter table pcornet_med add PCORI_CUI varchar2(8); +DECLARE + X NUMBER; +BEGIN + SELECT COUNT(*) + INTO X + FROM dba_tab_columns + WHERE owner = 'I2B2METADATA' + AND table_name = 'PCORNET_MED' + AND column_name = 'PCORI_CUI'; + IF (X = 0) THEN + EXECUTE IMMEDIATE 'ALTER TABLE I2B2METADATA.pcornet_med ADD PCORI_CUI varchar2(8) NULL'; + END IF; +END; + +UPDATE I2B2METADATA.pcornet_med set PCORI_CUI = PCORI_BASECODE where length(pcori_basecode)<11 and c_hlevel>2 and LOWER(sourcesystem_cd) not in ('integration_tool') and pcori_basecode not like 'N%' and m_applied_path='@'; - + +-- necessary for CDM scripts if modifying ONT cell schema +grant all on I2B2METADATA.pcornet_med to cdm; + +alter session set current_schema=CDM; create table CUI_T as select * from @@ -16,20 +56,22 @@ cui(c_fullname,pcori_cui,c_hlevel) as select c_fullname,pcori_cui,c_hlevel from pcornet_med where pcori_cui is not null union all select m.c_fullname, cui.pcori_cui, m.c_hlevel - from pcornet_med m inner join cui on cui.c_fullname=m.c_path where m.pcori_cui is null + from I2B2METADATA.pcornet_med m inner join cui on cui.c_fullname=m.c_path where m.pcori_cui is null ), cuid as ( select c_fullname, pcori_cui, row_number() over (partition by C_FULLNAME order by c_hlevel desc)as rowno from cui) select DISTINCT cuid.c_fullname as c_fullname, cuid.pcori_cui as pcori_cui from cuid where cuid.rowno=1 ); - + +-- TODO: work on performance update pcornet_med x set x.pcori_cui = (select pcori_cui from CUI_T t where x.c_fullname = t.c_fullname) where x.pcori_cui is null; + create table NDC_T as select * from ( @@ -40,11 +82,12 @@ with ndc(c_fullname,pcori_ndc,c_hlevel) as select m.c_fullname,ndc.pcori_ndc,m.c_hlevel from pcornet_med m inner join ndc on ndc.c_fullname=m.c_path where m.pcori_ndc is null ), -ndcd as ( select c_fullname,pcori_ndc, row_number() over (partition by C_FULLNAME order by c_hlevel desc) row from ndc) - -select DISTINCT ndcd.c_fullname as c_fullname, ndcd.pcori_ndc as pcori_ndc from ndcd where ndcd.row=1 +ndcd as ( select c_fullname,pcori_ndc, row_number() over (partition by C_FULLNAME order by c_hlevel desc) as rowno from ndc) +select DISTINCT ndcd.c_fullname as c_fullname, ndcd.pcori_ndc as pcori_ndc from ndcd where ndcd.rowno=1 ); +-- TODO: work on performance update pcornet_med x set x.pcori_ndc = (select pcori_ndc from NDC_T t where x.c_fullname = t.c_fullname) -where x.pcori_ndc is null; \ No newline at end of file +where x.pcori_ndc is null; + diff --git a/Oracle/PCORNetLoader_ora.sql b/Oracle/PCORNetLoader_ora.sql index e555016..e948a46 100644 --- a/Oracle/PCORNetLoader_ora.sql +++ b/Oracle/PCORNetLoader_ora.sql @@ -1,7 +1,7 @@ ------------------------------------------------------------------------------------------- -- PCORNetLoader Script -- Orignal MSSQL Verion Contributors: Jeff Klann, PhD; Aaron Abend; Arturo Torres --- Translate to Oracle version: by Kun Wei(Wake Forest) +-- Translate to Oracle version: by Kun Wei(Wake Forest) -- Version 0.6.2, bugfix release, 1/6/16 (create table and pcornetreport bugs) -- Version 6.01, release to SCILHS, 10/15/15 -- Prescribing/dispensing bugfixes (untested) inserted by Jeff Klann 12/10/15 @@ -12,6 +12,7 @@ -- (please see the original MSSQL version script.) ------------------------------------------------------------------------------------------- +alter session set current_schema=CDM; create or replace PROCEDURE PMN_DROPSQL(sqlstring VARCHAR2) AS BEGIN @@ -19,7 +20,6 @@ create or replace PROCEDURE PMN_DROPSQL(sqlstring VARCHAR2) AS EXCEPTION WHEN OTHERS THEN NULL; END PMN_DROPSQL; -/ create or replace FUNCTION PMN_IFEXISTS(objnamestr VARCHAR2, objtypestr VARCHAR2) RETURN BOOLEAN AS cnt NUMBER; @@ -40,7 +40,7 @@ BEGIN END IF; END PMN_IFEXISTS; -/ + create or replace PROCEDURE PMN_Execuatesql(sqlstring VARCHAR2) AS @@ -48,85 +48,86 @@ BEGIN EXECUTE IMMEDIATE sqlstring; dbms_output.put_line(sqlstring); END PMN_ExecuateSQL; -/ -CREATE OR REPLACE SYNONYM I2B2FACT FOR I2B2DEMODATA.OBSERVATION_FACT -/ + +CREATE OR REPLACE SYNONYM I2B2FACT FOR I2B2DEMODATA.OBSERVATION_FACT; BEGIN PMN_DROPSQL('DROP TABLE i2b2patient_list'); END; -/ + CREATE table i2b2patient_list as select * from ( select DISTINCT PATIENT_NUM from I2B2FACT where START_DATE > to_date('01-Jan-2010','dd-mon-rrrr') ) where ROWNUM<100000000 -/ +; create or replace VIEW i2b2patient as select * from I2B2DEMODATA.PATIENT_DIMENSION where PATIENT_NUM in (select PATIENT_NUM from i2b2patient_list) -/ +; create or replace view i2b2visit as select * from I2B2DEMODATA.VISIT_DIMENSION where START_DATE >= to_date('01-Jan-2010','dd-mon-rrrr') and (END_DATE is NULL or END_DATE < CURRENT_DATE) and (START_DATE