chkdb_samp_results.txt0100664000076400007640000003721707760521540014476 0ustar brianbrian==================================================== ChkDB Sample Queries = = = = = = = = = = = = = = = = = = = = = = = = = = Summary of Active Rules in a Ruleset TABLE_NAME RULE_ID CLASS ------------------------------ -------------------- ----- DESCRIPTION ------------------------------------------------------------ CHKDB_SAMP_HR_DEPT BUDGET_AMT_APPRV_NEQ 1 Budget amount different than approved budget CHKDB_SAMP_HR_DEPT BUDGET_EST_OFF 1 Budget estimate too far from budgeted amount CHKDB_SAMP_HR_DEPT DEPT_EMPTY 1 Department has no employees CHKDB_SAMP_HR_DEPT FLOOR_BAD 3 Floor is invalid or not set CHKDB_SAMP_HR_DEPT FLOOR_NOT_NUM 3 Floor is not a number CHKDB_SAMP_HR_DEPT MANAGER_BAD 3 Manager is invalid or not set CHKDB_SAMP_HR_DEPT MNGR_DEPT_BAD 2 Manager is not in this department CHKDB_SAMP_HR_EMP DEPT_GROUP_BAD 4 Dept_id|Group_id is invalid or Dept_id is not set CHKDB_SAMP_HR_EMP HIRE_DT_BAD 3 Hire-date is invalid or not set CHKDB_SAMP_HR_EMP LAST_REVIEW_BAD 2 Date of last review is invalid or before hire CHKDB_SAMP_HR_EMP POSITION_BADCHAR 3 Position contains illegal character (,) CHKDB_SAMP_HR_EMP POSITION_LONG 3 Position is too long CHKDB_SAMP_HR_EMP POSITION_NULL 3 Position is not set CHKDB_SAMP_HR_EMP PROBATION_OVER 1 Probation period is over CHKDB_SAMP_HR_EMP REVIEW_ON_HIRE 2 Date of last review is hire date CHKDB_SAMP_HR_EMP VACN_DAYS_TOT_BAD 3 Vacn_days_tot is invalid or not set CHKDB_SAMP_HR_EMP VACN_DAYS_USED_HIGH 1 Vacn_days_used is too high CHKDB_SAMP_HR_GROUP ACTIVE_YN_BAD 4 Active_YN must be Y or N CHKDB_SAMP_HR_GROUP DEPT_BAD 4 Department is invalid or not set 19 rows selected. = = = = = = = = = = = = = = = = = = = = = = = = = = Summary of In-Active Rules in a Ruleset TABLE_NAME RULE_ID CLASS ------------------------------ -------------------- ----- DESCRIPTION ------------------------------------------------------------ CHKDB_SAMP_HR_DEPT BUDGET_AMT_HIGH 1 Budget amount greater than $125,000 = = = = = = = = = = = = = = = = = = = = = = = = = = Result count by table and rule... (raw data for Data Quality Profiling) TABLE_NAME RULE_ID CLASS OCCURS ------------------------------ -------------------- ----- ------ CHKDB_SAMP_HR_DEPT BUDGET_AMT_APPRV_NEQ 1 1 CHKDB_SAMP_HR_DEPT BUDGET_EST_OFF 1 2 CHKDB_SAMP_HR_DEPT DEPT_EMPTY 1 1 CHKDB_SAMP_HR_DEPT FLOOR_BAD 3 3 CHKDB_SAMP_HR_DEPT FLOOR_NOT_NUM 3 1 CHKDB_SAMP_HR_DEPT MANAGER_BAD 3 1 CHKDB_SAMP_HR_DEPT MNGR_DEPT_BAD 2 1 CHKDB_SAMP_HR_EMP DEPT_GROUP_BAD 4 2 CHKDB_SAMP_HR_EMP HIRE_DT_BAD 3 1 CHKDB_SAMP_HR_EMP LAST_REVIEW_BAD 2 2 CHKDB_SAMP_HR_EMP POSITION_BADCHAR 3 1 CHKDB_SAMP_HR_EMP POSITION_LONG 3 1 CHKDB_SAMP_HR_EMP POSITION_NULL 3 1 CHKDB_SAMP_HR_EMP PROBATION_OVER 1 1 CHKDB_SAMP_HR_EMP REVIEW_ON_HIRE 2 2 CHKDB_SAMP_HR_EMP VACN_DAYS_TOT_BAD 3 1 CHKDB_SAMP_HR_EMP VACN_DAYS_USED_HIGH 1 1 CHKDB_SAMP_HR_GROUP ACTIVE_YN_BAD 4 1 CHKDB_SAMP_HR_GROUP DEPT_BAD 4 1 19 rows selected. = = = = = = = = = = = = = = = = = = = = = = = = = = Results by table and rule, ordered by number of occurrences, with description... (crude data quality profiling report) TABLE_NAME CLASS OCCURS ------------------------------ ----- ------ DESCRIPTION ------------------------------------------------------------ CHKDB_SAMP_HR_DEPT 3 3 Floor is invalid or not set CHKDB_SAMP_HR_DEPT 1 2 Budget estimate too far from budgeted amount CHKDB_SAMP_HR_DEPT 1 1 Department has no employees CHKDB_SAMP_HR_DEPT 2 1 Manager is not in this department CHKDB_SAMP_HR_DEPT 1 1 Budget amount different than approved budget CHKDB_SAMP_HR_DEPT 3 1 Manager is invalid or not set CHKDB_SAMP_HR_DEPT 3 1 Floor is not a number CHKDB_SAMP_HR_EMP 2 2 Date of last review is hire date CHKDB_SAMP_HR_EMP 2 2 Date of last review is invalid or before hire CHKDB_SAMP_HR_EMP 4 2 Dept_id|Group_id is invalid or Dept_id is not set CHKDB_SAMP_HR_EMP 1 1 Probation period is over CHKDB_SAMP_HR_EMP 3 1 Position is too long CHKDB_SAMP_HR_EMP 3 1 Vacn_days_tot is invalid or not set CHKDB_SAMP_HR_EMP 3 1 Position contains illegal character (,) CHKDB_SAMP_HR_EMP 3 1 Hire-date is invalid or not set CHKDB_SAMP_HR_EMP 3 1 Position is not set CHKDB_SAMP_HR_EMP 1 1 Vacn_days_used is too high CHKDB_SAMP_HR_GROUP 4 1 Active_YN must be Y or N CHKDB_SAMP_HR_GROUP 4 1 Department is invalid or not set 19 rows selected. = = = = = = = = = = = = = = = = = = = = = = = = = = Check-Result Details (Max 100) TABLE_NAME DATA_DOMAIN ------------------------------ -------------------- RULESET_ID RULE_ID CHECK_DATE CLASS -------------------- -------------------- ---------- ----- DESCRIPTION ------------------------------------------------------------ SELECTED_ROWID ------------------ PRIMARY_KEY ------------------------------------------------------------ ROW_OUT_DESC ---------------------------------------------------------------------- ROW_OUT_DATA ---------------------------------------------------------------------- CHKDB_SAMP_HR_DEPT CHKDB_SAMP_HR SAMP_HR_RULES FLOOR_BAD 24-NOV-03 3 Floor is invalid or not set AAAN65AALAAAKYSAAB DEVELOPMENT FLOOR @ CHKDB_SAMP_HR_DEPT CHKDB_SAMP_HR SAMP_HR_RULES FLOOR_BAD 24-NOV-03 3 Floor is invalid or not set AAAN65AALAAAKYSAAC SALES FLOOR CHKDB_SAMP_HR_DEPT CHKDB_SAMP_HR SAMP_HR_RULES FLOOR_NOT_NUM 24-NOV-03 3 Floor is not a number AAAN65AALAAAKYSAAB DEVELOPMENT FLOOR @ CHKDB_SAMP_HR_DEPT CHKDB_SAMP_HR SAMP_HR_RULES MANAGER_BAD 24-NOV-03 3 Manager is invalid or not set AAAN65AALAAAKYSAAD DEPT_999 MANAGER CHKDB_SAMP_HR_DEPT CHKDB_SAMP_HR SAMP_HR_RULES FLOOR_BAD 24-NOV-03 3 Floor is invalid or not set AAAN65AALAAAKYSAAD DEPT_999 FLOOR 444 CHKDB_SAMP_HR_DEPT CHKDB_SAMP_HR SAMP_HR_RULES MNGR_DEPT_BAD 24-NOV-03 2 Manager is not in this department AAAN65AALAAAKYSAAC SALES MANAGER E3 CHKDB_SAMP_HR_DEPT CHKDB_SAMP_HR SAMP_HR_RULES BUDGET_AMT_APPRV_NEQ 24-NOV-03 1 Budget amount different than approved budget AAAN65AALAAAKYSAAC SALES BUDGET_AMT|BUDGET_APPRV 170000|160000 CHKDB_SAMP_HR_DEPT CHKDB_SAMP_HR SAMP_HR_RULES BUDGET_EST_OFF 24-NOV-03 1 Budget estimate too far from budgeted amount AAAN65AALAAAKYSAAA MANAGEMENT BUDGET_EST|BUDGET_AMT 280000|265000 CHKDB_SAMP_HR_DEPT CHKDB_SAMP_HR SAMP_HR_RULES BUDGET_EST_OFF 24-NOV-03 1 Budget estimate too far from budgeted amount AAAN65AALAAAKYSAAC SALES BUDGET_EST|BUDGET_AMT 17400|170000 CHKDB_SAMP_HR_DEPT CHKDB_SAMP_HR SAMP_HR_RULES DEPT_EMPTY 24-NOV-03 1 Department has no employees AAAN65AALAAAKYSAAD DEPT_999 DEPT_ID DEPT_999 CHKDB_SAMP_HR_EMP CHKDB_SAMP_HR SAMP_HR_RULES DEPT_GROUP_BAD 24-NOV-03 4 Dept_id|Group_id is invalid or Dept_id is not set AAAN69AALAAAKYyAAD E4 DEPT_ID|GROUP_ID DEVELOPMENT|APP_TEAM CHKDB_SAMP_HR_EMP CHKDB_SAMP_HR SAMP_HR_RULES DEPT_GROUP_BAD 24-NOV-03 4 Dept_id|Group_id is invalid or Dept_id is not set AAAN69AALAAAKYyAAE E5 DEPT_ID|GROUP_ID |WEB_TEAM CHKDB_SAMP_HR_EMP CHKDB_SAMP_HR SAMP_HR_RULES HIRE_DT_BAD 24-NOV-03 3 Hire-date is invalid or not set AAAN69AALAAAKYyAAG E7 HIRE_DT 01-11-1901 CHKDB_SAMP_HR_EMP CHKDB_SAMP_HR SAMP_HR_RULES POSITION_NULL 24-NOV-03 3 Position is not set AAAN69AALAAAKYyAAG E7 POSITION CHKDB_SAMP_HR_EMP CHKDB_SAMP_HR SAMP_HR_RULES POSITION_LONG 24-NOV-03 3 Position is too long AAAN69AALAAAKYyAAF E6 POSITION Sales Representativeee CHKDB_SAMP_HR_EMP CHKDB_SAMP_HR SAMP_HR_RULES VACN_DAYS_TOT_BAD 24-NOV-03 3 Vacn_days_tot is invalid or not set AAAN69AALAAAKYyAAF E6 VACN_DAYS_TOT 5 CHKDB_SAMP_HR_EMP CHKDB_SAMP_HR SAMP_HR_RULES POSITION_BADCHAR 24-NOV-03 3 Position contains illegal character (,) AAAN69AALAAAKYyAAB E2 POSITION Manager, Development CHKDB_SAMP_HR_EMP CHKDB_SAMP_HR SAMP_HR_RULES LAST_REVIEW_BAD 24-NOV-03 2 Date of last review is invalid or before hire AAAN69AALAAAKYyAAD E4 LAST_REVIEW_DT|HIRE_DT 27-01-2303|01-11-1998 CHKDB_SAMP_HR_EMP CHKDB_SAMP_HR SAMP_HR_RULES REVIEW_ON_HIRE 24-NOV-03 2 Date of last review is hire date AAAN69AALAAAKYyAAA E1 LAST_REVIEW_DT|HIRE_DT 12-04-1998|12-04-1998 CHKDB_SAMP_HR_EMP CHKDB_SAMP_HR SAMP_HR_RULES REVIEW_ON_HIRE 24-NOV-03 2 Date of last review is hire date AAAN69AALAAAKYyAAD E4 LAST_REVIEW_DT|HIRE_DT 27-01-2303|01-11-1998 CHKDB_SAMP_HR_EMP CHKDB_SAMP_HR SAMP_HR_RULES LAST_REVIEW_BAD 24-NOV-03 2 Date of last review is invalid or before hire AAAN69AALAAAKYyAAF E6 LAST_REVIEW_DT|HIRE_DT 27-01-1903|01-02-2001 CHKDB_SAMP_HR_EMP CHKDB_SAMP_HR SAMP_HR_RULES PROBATION_OVER 24-NOV-03 1 Probation period is over AAAN69AALAAAKYyAAE E5 PROBATION_END_DT 01-06-1903 CHKDB_SAMP_HR_EMP CHKDB_SAMP_HR SAMP_HR_RULES VACN_DAYS_USED_HIGH 24-NOV-03 1 Vacn_days_used is too high AAAN69AALAAAKYyAAE E5 VACN_DAYS_USED|VACN_DAYS_TOT 33|15 CHKDB_SAMP_HR_GROUP CHKDB_SAMP_HR SAMP_HR_RULES ACTIVE_YN_BAD 24-NOV-03 4 Active_YN must be Y or N AAAN67AALAAAKYiAAB DEVELOPMENT|WEB_TEAM ACTIVE_YN U CHKDB_SAMP_HR_GROUP CHKDB_SAMP_HR SAMP_HR_RULES DEPT_BAD 24-NOV-03 4 Department is invalid or not set AAAN67AALAAAKYiAAA DEVELOPMENTTT|APP_TEAM DEPT_ID DEVELOPMENTTT 25 rows selected. = = = = = = = = = = = = = = = = = = = = = = = = = = Various Other Sample Queries = = = = = = = = = = = = = = = = = = = = = = = = = = All Active Rules in a Domain TABLE_NAME DATA_DOMAIN ------------------------------ -------------------- RULESET_ID RULE_ID CLASS -------------------- -------------------- ----- DESCRIPTION ------------------------------------------------------------ CHKDB_SAMP_HR_DEPT CHKDB_SAMP_HR SAMP_HR_RULES BUDGET_AMT_APPRV_NEQ 1 Budget amount different than approved budget CHKDB_SAMP_HR_DEPT CHKDB_SAMP_HR SAMP_HR_RULES BUDGET_EST_OFF 1 Budget estimate too far from budgeted amount CHKDB_SAMP_HR_DEPT CHKDB_SAMP_HR SAMP_HR_RULES DEPT_EMPTY 1 Department has no employees CHKDB_SAMP_HR_DEPT CHKDB_SAMP_HR SAMP_HR_RULES FLOOR_BAD 3 Floor is invalid or not set CHKDB_SAMP_HR_DEPT CHKDB_SAMP_HR SAMP_HR_RULES FLOOR_NOT_NUM 3 Floor is not a number CHKDB_SAMP_HR_DEPT CHKDB_SAMP_HR SAMP_HR_RULES MANAGER_BAD 3 Manager is invalid or not set CHKDB_SAMP_HR_DEPT CHKDB_SAMP_HR SAMP_HR_RULES MNGR_DEPT_BAD 2 Manager is not in this department CHKDB_SAMP_HR_EMP CHKDB_SAMP_HR SAMP_HR_RULES REVIEW_ON_HIRE 2 Date of last review is hire date CHKDB_SAMP_HR_EMP CHKDB_SAMP_HR SAMP_HR_RULES LAST_REVIEW_BAD 2 Date of last review is invalid or before hire CHKDB_SAMP_HR_EMP CHKDB_SAMP_HR SAMP_HR_RULES DEPT_GROUP_BAD 4 Dept_id|Group_id is invalid or Dept_id is not set CHKDB_SAMP_HR_EMP CHKDB_SAMP_HR SAMP_HR_RULES HIRE_DT_BAD 3 Hire-date is invalid or not set CHKDB_SAMP_HR_EMP CHKDB_SAMP_HR SAMP_HR_RULES POSITION_BADCHAR 3 Position contains illegal character (,) CHKDB_SAMP_HR_EMP CHKDB_SAMP_HR SAMP_HR_RULES POSITION_NULL 3 Position is not set CHKDB_SAMP_HR_EMP CHKDB_SAMP_HR SAMP_HR_RULES POSITION_LONG 3 Position is too long CHKDB_SAMP_HR_EMP CHKDB_SAMP_HR SAMP_HR_RULES PROBATION_OVER 1 Probation period is over CHKDB_SAMP_HR_EMP CHKDB_SAMP_HR SAMP_HR_RULES VACN_DAYS_TOT_BAD 3 Vacn_days_tot is invalid or not set CHKDB_SAMP_HR_EMP CHKDB_SAMP_HR SAMP_HR_RULES VACN_DAYS_USED_HIGH 1 Vacn_days_used is too high CHKDB_SAMP_HR_GROUP CHKDB_SAMP_HR SAMP_HR_RULES ACTIVE_YN_BAD 4 Active_YN must be Y or N CHKDB_SAMP_HR_GROUP CHKDB_SAMP_HR SAMP_HR_RULES DEPT_BAD 4 Department is invalid or not set 19 rows selected. = = = = = = = = = = = = = = = = = = = = = = = = = = Tables and Primary Keys in the CHKDB_SAMP_HR Domain (only 1st 28 chars of table and column names) TABLE_NAME CHECKABLE TABLE_VIEW ACTIVE ------------------------------ --------- ---------- ------ PRIMARY_KEY_LIST ---------------------------------------------------------------------- CHKDB_SAMP_HR_DEPT Y View Y DEPT_ID CHKDB_SAMP_HR_EMP Y View Y EMP_ID CHKDB_SAMP_HR_GROUP Y View Y DEPT_ID,GROUP_ID CHKDB_SAMP_DEPT N Table Y CHKDB_SAMP_EMPL N Table Y CHKDB_SAMP_GROUP N Table Y 6 rows selected. = = = = = = = = = = = = = = = = = = = = = = = = = = To see if a table is active... TABLE_NAME ? DATA_DOMAIN ? ------------------------------ - -------------------- - CHKDB_SAMP_HR_DEPT Y CHKDB_SAMP_HR Y = = = = = = = = = = = = = = = = = = = = = = = = = = To see which rules in a table are active... Rules for table CHKDB_SAMP_HR_DEPT in domain CHKDB_SAMP_HR... RULESET_ID ? RULE_ID ? -------------------- - -------------------- - SAMP_HR_RULES Y BUDGET_AMT_APPRV_NEQ Y SAMP_HR_RULES Y BUDGET_AMT_HIGH N SAMP_HR_RULES Y BUDGET_EST_OFF Y SAMP_HR_RULES Y DEPT_EMPTY Y SAMP_HR_RULES Y FLOOR_BAD Y SAMP_HR_RULES Y FLOOR_NOT_NUM Y SAMP_HR_RULES Y MANAGER_BAD Y SAMP_HR_RULES Y MNGR_DEPT_BAD Y 8 rows selected. = = = = = = = = = = = = = = = = = = = = = = = = = = Count of Results for table CHKDB_SAMP_HR_DEPT... CHKDB_SAMP_DEPT_RESULTS ----------------------- 10 = = = = = = = = = = = = = = = = = = = = = = = = = = Counts from each ChkDB table... CHKDB_DOMAIN_COUNT ------------------ 1 CHKDB_TABLE_COUNT ----------------- 6 CHKDB_RULESET_COUNT ------------------- 1 CHKDB_RULE_COUNT ---------------- 20 CHKDB_RESULT_COUNT ------------------ 25 CHKDB_RULE_SQL_COUNT -------------------- 19 CHKDB_RULE_ERR_COUNT -------------------- 0 ==================================================== chkdb_software.sql0100664000076400007640000010162407760521540013561 0ustar brianbrian-- ################################################################# -- Create (or replace) the PL/SQL package CHKDB_CHECK_DB. v0.9.4 -- -- This package provides procedures for doing rules-based -- data checking. Procedures are provided to: -- - run checks on one or more tables in a domain -- - remove one or more domains from the database -- -- See copyright notice and license at end of this file. -- -- ========================================================= -- Using Procedure: APPLY_RULES (domain_name, table_spec) -- -- What the procedure does: -- Apply active rules (listed in CHKDB_RULE) -- in active rule-sets (listed in CHKDB_RULESET) -- to rows in active tables (listed in CHKDB_TABLE) -- that have names like 'table_spec' -- in the 'domain_name' domain (listed in CHKDB_DOMAIN). -- ('table_spec' may include the wild-card character '%') -- -- When a row in a table is selected by a rule, -- a row is inserted into the CHKDB_RESULT table. -- -- Before any rules are applied to a table, all rows -- for that table are deleted from the CHKDB_RESULT table. -- -- The sql generated to apply each rule is stored in -- table CHKDB_RULE_SQL. -- -- If an error occurs while attempting to run the sql -- that is generated for a rule, a row describing the -- the error is written to table CHKDB_RULE_ERR. -- -- Examples (using SQL*Plus)... -- -- 1 - to check the EMP table in the HR domain: -- SQL> CALL CHKDB_CHECK_DB.APPLY_RULES('HR','EMP'); -- -- 2 - to check tables like 'EMP%' in the HR domain: -- SQL> CALL CHKDB_CHECK_DB.APPLY_RULES('HR','EMP%'); -- -- 3 - to check all active tables in the HR domain: -- SQL> CALL CHKDB_CHECK_DB.APPLY_RULES('HR','%'); -- -- -- ========================================================= -- Using Procedure: DROP_DOMAIN_TABLES (dom_spec) -- -- What the procedure does: -- Drop tables listed in CHKDB_TABLE -- where DROP_ON_REMOVE = 'Y' -- and the table is in a domain like 'dom_spec' -- -- Examples: -- -- 1 - to drop tables in the HR domain: -- SQL> CALL DROP_DOMAIN_TABLES ('HR') -- -- 2 - to drop tables in domains like 'HR_EMP%': -- SQL> CALL DROP_DOMAIN_TABLES ('HR_EMP%') -- -- ######################################################### -- Create or replace the Package Spec (public interface) CREATE OR REPLACE PACKAGE CHKDB_CHECK_DB AS /* Externally callable procedures... */ PROCEDURE APPLY_RULES (dom_name VARCHAR2, tab_spec VARCHAR2); PROCEDURE DROP_DOMAIN_TABLES (dom_spec VARCHAR2); /* Externally visible constants */ -- name of table that receives check-results... chk_out_table CONSTANT VARCHAR2(30) := 'CHKDB_RESULT'; -- name of table that receives sql for rules... rule_sql_table CONSTANT VARCHAR2(30) := 'CHKDB_RULE_SQL'; -- name of table that receives rule-errors... rule_err_table CONSTANT VARCHAR2(30) := 'CHKDB_RULE_ERR'; -- list of columns inserted into CHKDB_RESULT... chk_out_cols CONSTANT VARCHAR2(500) := '(DATA_DOMAIN,' || ' RULESET_ID,' || ' TABLE_NAME,' || ' RULE_ID,' || ' SELECTED_ROWID,' || ' ROW_PRIMARY_KEY,' || ' RULE_CLASS,' || ' ROW_OUT_DATA,' || ' ROW_OUT_DESC,' || ' CHECK_DATE)'; END CHKDB_CHECK_DB; / -- ######################################################### -- Create or replace the Package Body CREATE OR REPLACE PACKAGE BODY CHKDB_CHECK_DB AS /* Forward declaration of private subprograms */ PROCEDURE del_old_output (tab_name VARCHAR2); FUNCTION key_col (key_list VARCHAR2, col_num NUMBER) RETURN VARCHAR2; FUNCTION mk_key_spec (key_list VARCHAR2) RETURN VARCHAR2; FUNCTION mk_key_desc (key_list VARCHAR2) RETURN VARCHAR2; FUNCTION mk_predef_where_cls (COLUMN_NAME VARCHAR2, COLUMN_TYPE_CND VARCHAR2, NOT_NULL_YN CHAR, MIN_VALUE VARCHAR2, MAX_VALUE VARCHAR2, MAX_LENGTH NUMBER, IS_A_NUMBER_YN CHAR, NOT_BEFORE_TODAY_YN VARCHAR2, NOT_AFTER_TODAY_YN VARCHAR2, IN_LIST VARCHAR2, NO_ILLEGAL_CHARS VARCHAR2, COLUMN_2_NAME VARCHAR2, COL_NOT_EQ_COL2_YN CHAR, COL_NOT_NE_COL2_YN CHAR, COL_NOT_LT_COL2_YN CHAR, COL_NOT_GT_COL2_YN CHAR, COL_MINUS_COL2_MIN NUMBER, COL_MINUS_COL2_MAX NUMBER) RETURN VARCHAR2; PROCEDURE mk_predef_out_spec (COLUMN_NAME IN VARCHAR2, COLUMN_TYPE_CND IN VARCHAR2, COLUMN_2_NAME IN VARCHAR2, OUT_SPEC OUT VARCHAR2, OUT_DESC OUT VARCHAR2); FUNCTION mk_fk_where_cls (THIS_DATA_DOMAIN VARCHAR2, THIS_TABLE_NAME VARCHAR2, THIS_TABLE_ALIAS CHAR, FOREIGN_KEY_LIST VARCHAR2, REF_DATA_DOMAIN VARCHAR2, REF_TABLE_NAME VARCHAR2, REF_KEY_LIST VARCHAR2, FK_NOT_ORPHAN_YN CHAR, FK_NOT_NULL_YN CHAR, FK_NOT_PARTIAL_YN CHAR) RETURN VARCHAR2; FUNCTION mk_rule_sql (data_domain VARCHAR2, ruleset_id VARCHAR2, table_name VARCHAR2, rule_id VARCHAR2, rule_class VARCHAR2, primary_key_spec VARCHAR2, row_out_spec VARCHAR2, row_out_desc VARCHAR2, table_alias CHAR, where_cls VARCHAR2) RETURN VARCHAR2; PROCEDURE apply_a_rule (data_domain VARCHAR2, ruleset_id VARCHAR2, table_name VARCHAR2, rule_id VARCHAR2, rule_sql VARCHAR2); -- ========================================================= /* Implementation of public procedures */ -- = = = = = = = = = = = = = = = = = = = = = = = = = = -- Apply active rules to one or more tables in a domain -- and write the results to the output table. -- Note: an 'out-spec' is an SQL expression that is selected -- from the table by the rule-sql that results in a string -- showing the value(s) that caused the rule to select the row. PROCEDURE APPLY_RULES (dom_name VARCHAR2, tab_spec VARCHAR2) IS rule_tab_alias CHAR(1); prev_table_name VARCHAR2(30) := '(no prev table)'; row_out_spec VARCHAR2(1000); row_out_desc VARCHAR2(1000); pri_key_spec VARCHAR2(1000); pri_key_desc VARCHAR2(1000); where_cls VARCHAR2(2000); rule_sql VARCHAR2(3000); cursor c_rule (dom_name VARCHAR2, tab_spec VARCHAR2) IS select d.DATA_DOMAIN, s.RULESET_ID, t.TABLE_NAME, t.PRIMARY_KEY_LIST, r.RULE_ID, r.RULE_CLASS, r.CHK_WHERE_CLS, r.ROW_OUT_SPEC, r.ROW_OUT_DESC, r.COLUMN_NAME, r.COLUMN_TYPE_CND, r.NOT_NULL_YN, r.MIN_VALUE, r.MAX_VALUE, r.MAX_LENGTH, r.IS_A_NUMBER_YN, r.NOT_BEFORE_TODAY_YN, r.NOT_AFTER_TODAY_YN, r.IN_LIST, r.NO_ILLEGAL_CHARS, r.COLUMN_2_NAME, r.COL_NOT_EQ_COL2_YN, r.COL_NOT_NE_COL2_YN, r.COL_NOT_LT_COL2_YN, r.COL_NOT_GT_COL2_YN, r.COL_MINUS_COL2_MIN, r.COL_MINUS_COL2_MAX, r.FOREIGN_KEY_LIST, r.REF_DATA_DOMAIN, r.REF_TABLE_NAME, r.REF_KEY_LIST, r.FK_NOT_ORPHAN_YN, r.FK_NOT_NULL_YN, r.FK_NOT_PARTIAL_YN from CHKDB_DOMAIN d, CHKDB_TABLE t, CHKDB_RULESET s, CHKDB_RULE r where t.DATA_DOMAIN = d.DATA_DOMAIN and s.DATA_DOMAIN = d.DATA_DOMAIN and r.DATA_DOMAIN = s.DATA_DOMAIN and r.RULESET_ID = s.RULESET_ID and r.TABLE_NAME = t.TABLE_NAME and d.ACTIVE_YN = 'Y' and t.ACTIVE_YN = 'Y' and s.ACTIVE_YN = 'Y' and r.ACTIVE_YN = 'Y' and t.CHECKABLE_YN = 'Y' and d.DATA_DOMAIN = upper(dom_name) and r.TABLE_NAME like upper(tab_spec) order by r.TABLE_NAME, r.RULESET_ID, r.RULE_ID; BEGIN -- in dynamic sql, this table will have an alias... rule_tab_alias := 't'; for rule_rec in c_rule(dom_name,tab_spec) loop -- rules -- It this is the first row for a table... if rule_rec.TABLE_NAME <> prev_table_name then del_old_output (rule_rec.TABLE_NAME); pri_key_spec := mk_key_spec (rule_rec.PRIMARY_KEY_LIST); pri_key_desc := mk_key_desc (rule_rec.PRIMARY_KEY_LIST); end if; -- Specified where-clause... where_cls := rule_rec.CHK_WHERE_CLS; row_out_spec := rule_rec.ROW_OUT_SPEC; row_out_desc := rule_rec.ROW_OUT_DESC; -- Pre-defined checks... if where_cls is null and rule_rec.COLUMN_NAME is not null then where_cls := mk_predef_where_cls ( rule_rec.COLUMN_NAME, rule_rec.COLUMN_TYPE_CND, rule_rec.NOT_NULL_YN, rule_rec.MIN_VALUE, rule_rec.MAX_VALUE, rule_rec.MAX_LENGTH, rule_rec.IS_A_NUMBER_YN, rule_rec.NOT_BEFORE_TODAY_YN, rule_rec.NOT_AFTER_TODAY_YN, rule_rec.IN_LIST, rule_rec.NO_ILLEGAL_CHARS, rule_rec.COLUMN_2_NAME, rule_rec.COL_NOT_EQ_COL2_YN, rule_rec.COL_NOT_NE_COL2_YN, rule_rec.COL_NOT_LT_COL2_YN, rule_rec.COL_NOT_GT_COL2_YN, rule_rec.COL_MINUS_COL2_MIN, rule_rec.COL_MINUS_COL2_MAX); mk_predef_out_spec (rule_rec.COLUMN_NAME, rule_rec.COLUMN_TYPE_CND, rule_rec.COLUMN_2_NAME, row_out_spec, row_out_desc); end if; -- Foreign-key checks if where_cls is null and rule_rec.FOREIGN_KEY_LIST is not null then where_cls := mk_fk_where_cls ( rule_rec.DATA_DOMAIN, rule_rec.TABLE_NAME, rule_tab_alias, rule_rec.FOREIGN_KEY_LIST, rule_rec.REF_DATA_DOMAIN, rule_rec.REF_TABLE_NAME, rule_rec.REF_KEY_LIST, rule_rec.FK_NOT_ORPHAN_YN, rule_rec.FK_NOT_NULL_YN, rule_rec.FK_NOT_PARTIAL_YN); row_out_spec := mk_key_spec(rule_rec.FOREIGN_KEY_LIST); row_out_desc := mk_key_desc(rule_rec.FOREIGN_KEY_LIST); end if; if where_cls is null then insert into CHKDB_RULE_ERR (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_ERR_DATE, ERR_MESSAGE) values (rule_rec.DATA_DOMAIN, rule_rec.RULESET_ID, rule_rec.TABLE_NAME, rule_rec.RULE_ID, sysdate, 'Rule has no effect and was not applied'); else rule_sql := mk_rule_sql (rule_rec.DATA_DOMAIN, rule_rec.RULESET_ID, rule_rec.TABLE_NAME, rule_rec.RULE_ID, rule_rec.RULE_CLASS, pri_key_spec, row_out_spec, row_out_desc, rule_tab_alias, where_cls); apply_a_rule (rule_rec.DATA_DOMAIN, rule_rec.RULESET_ID, rule_rec.TABLE_NAME, rule_rec.RULE_ID, rule_sql); prev_table_name := rule_rec.TABLE_NAME; end if; end loop; -- through applicable rules END APPLY_RULES; -- = = = = = = = = = = = = = = = = = = = = = = = = = = -- Drop the tables/views in one or more domains -- where the tables/views are listed in CHKDB_TABLE -- and DROP_ON_REMOVE = 'Y'. -- The argument may be a domain name and it may include -- the wildcard character '%'. To drop tables/views -- in all domains, pass '%'. PROCEDURE DROP_DOMAIN_TABLES (dom_spec VARCHAR2) IS cmnd VARCHAR2(60); table_view VARCHAR2(6); cursor c_tab (tab_spec VARCHAR2) IS select upper(TABLE_NAME) "TABLE_NAME", TABLE_VIEW_TV from CHKDB_TABLE where DATA_DOMAIN like upper(tab_spec) and DROP_ON_REMOVE_YN = 'Y'; BEGIN for tab_rec in c_tab(dom_spec) loop -- tables/views table_view := 'TABLE'; if tab_rec.TABLE_VIEW_TV = 'V' then table_view := 'VIEW'; end if; cmnd := 'drop ' || table_view || ' ' || tab_rec.TABLE_NAME; execute immediate cmnd; end loop; -- through tables/views to drop END DROP_DOMAIN_TABLES; -- ========================================================= /* Implementation of private subprograms */ -- = = = = = = = = = = = = = = = = = = = = = = = = = = -- delete check-results, rule-sql and rule-errors for a table PROCEDURE del_old_output (tab_name VARCHAR2) IS cmnd VARCHAR2(200); BEGIN cmnd := 'delete from ' || chk_out_table || ' where TABLE_NAME = ''' || tab_name || ''''; execute immediate cmnd; cmnd := 'delete from ' || rule_err_table || ' where TABLE_NAME = ''' || tab_name || ''''; execute immediate cmnd; cmnd := 'delete from ' || rule_sql_table || ' where TABLE_NAME = ''' || tab_name || ''''; execute immediate cmnd; END del_old_output; -- = = = = = = = = = = = = = = = = = = = = = = = = = = -- Return the 'col_num'th column name from 'key_list', -- a list like 'COL1,COL2,COL3'. The list may contain -- spaces. If col_num is too high (ie. the key does -- not contain that many columns), return null. FUNCTION key_col (key_list VARCHAR2, col_num NUMBER) RETURN VARCHAR2 is comma_pos NUMBER(4); key_from NUMBER(4); key_to NUMBER(4); key_len NUMBER(4); key_str VARCHAR2(40); BEGIN if col_num = 1 then key_from := 1; else comma_pos := instr (key_list, ',', 1, col_num-1); if comma_pos = 0 then return null; end if; key_from := comma_pos + 1; end if; comma_pos := instr (key_list, ',', 1, col_num); if comma_pos = 0 then key_to := length(key_list); else key_to := comma_pos - 1; end if; key_len := (key_to - key_from) + 1; if key_len > 30 then key_len := 30; end if; key_str := substr(key_list,key_from,key_len); return key_str; END key_col; -- = = = = = = = = = = = = = = = = = = = = = = = = = = -- Given a key-list like 'COL1,COL2', return a -- key_spec, an SQL expression that, when selected -- from a table, results in a string containing the -- key-values concatenated and separated by '|'. -- Which is to say, make it look like: -- 'to_char(COL1)||'''|'''||to_char(COL2)' FUNCTION mk_key_spec (key_list VARCHAR2) RETURN VARCHAR2 IS key_desc VARCHAR2(1000); BEGIN if key_list is null then return 'null'; end if; key_desc := 'to_char(' || key_list || ')'; key_desc := replace (key_desc, ' ', ''); key_desc := replace (key_desc, ',', ')||''|''||to_char('); return key_desc; END mk_key_spec; -- = = = = = = = = = = = = = = = = = = = = = = = = = = -- Given a key-list like 'COL1,COL2', return a -- key_desc that looks like 'COL1|COL2'. -- Which is to say, convert commas to vertical bars. -- Spaces will also be removed if they exist. FUNCTION mk_key_desc (key_list VARCHAR2) RETURN VARCHAR2 IS key_desc VARCHAR2(1000); BEGIN key_desc := key_list; key_desc := replace (key_desc, ' ', ''); key_desc := replace (key_desc, ',', '|'); return key_desc; END mk_key_desc; -- = = = = = = = = = = = = = = = = = = = = = = = = = = -- Make a where-clause for predefined checks. FUNCTION mk_predef_where_cls (COLUMN_NAME VARCHAR2, COLUMN_TYPE_CND VARCHAR2, NOT_NULL_YN CHAR, MIN_VALUE VARCHAR2, MAX_VALUE VARCHAR2, MAX_LENGTH NUMBER, IS_A_NUMBER_YN CHAR, NOT_BEFORE_TODAY_YN VARCHAR2, NOT_AFTER_TODAY_YN VARCHAR2, IN_LIST VARCHAR2, NO_ILLEGAL_CHARS VARCHAR2, COLUMN_2_NAME VARCHAR2, COL_NOT_EQ_COL2_YN CHAR, COL_NOT_NE_COL2_YN CHAR, COL_NOT_LT_COL2_YN CHAR, COL_NOT_GT_COL2_YN CHAR, COL_MINUS_COL2_MIN NUMBER, COL_MINUS_COL2_MAX NUMBER) RETURN VARCHAR2 IS wcls VARCHAR2(1000); new_bit VARCHAR2(200); bit1 VARCHAR2(200); bit2 VARCHAR2(200); len1 NUMBER(4); BEGIN if NOT_NULL_YN = 'Y' then new_bit := COLUMN_NAME || ' is NULL'; if wcls is null then wcls := new_bit; else wcls := wcls || ' or ' || new_bit; end if; end if; if MIN_VALUE is not null then if COLUMN_TYPE_CND = 'C' then bit1 := '''' || MIN_VALUE || ''''; elsif COLUMN_TYPE_CND = 'D' then bit1 := 'to_date(''' || MIN_VALUE || ''',''YYYY-MM-DD'')'; else bit1 := MIN_VALUE; end if; new_bit := COLUMN_NAME || '<' || bit1; if wcls is null then wcls := new_bit; else wcls := wcls || ' or ' || new_bit; end if; end if; if MAX_VALUE is not null then if COLUMN_TYPE_CND = 'C' then bit1 := '''' || MAX_VALUE || ''''; elsif COLUMN_TYPE_CND = 'D' then bit1 := 'to_date(''' || MAX_VALUE || ''',''YYYY-MM-DD'')'; else bit1 := MAX_VALUE; end if; new_bit := COLUMN_NAME || '>' || bit1; if wcls is null then wcls := new_bit; else wcls := wcls || ' or ' || new_bit; end if; end if; if MAX_LENGTH > 0 then new_bit := 'length(' || COLUMN_NAME || ')>' || MAX_LENGTH; if wcls is null then wcls := new_bit; else wcls := wcls || ' or ' || new_bit; end if; end if; if IS_A_NUMBER_YN = 'Y' then new_bit := 'length(rtrim(ltrim(translate(' || COLUMN_NAME || ',''' || '-123456789.0eE' || ''',''' || ' '')))) > 0'; if wcls is null then wcls := new_bit; else wcls := wcls || ' or ' || new_bit; end if; end if; if NOT_BEFORE_TODAY_YN = 'Y' then new_bit := COLUMN_NAME || 'sysdate'; if wcls is null then wcls := new_bit; else wcls := wcls || ' or ' || new_bit; end if; end if; if NOT_BEFORE_TODAY_YN = 'Y' then new_bit := COLUMN_NAME || '>sysdate'; if wcls is null then wcls := new_bit; else wcls := wcls || ' or ' || new_bit; end if; end if; if IN_LIST is not null then bit1 := IN_LIST; if substr(bit1,1,1) <> '(' then bit1 := '(' || bit1 || ')'; end if; if COLUMN_TYPE_CND = 'C' then bit1 := replace ( bit1, ' ', '' ); bit1 := replace ( bit1, '(', '(''' ); bit1 := replace ( bit1, ',', ''',''' ); bit1 := replace ( bit1, ')', ''')' ); end if; new_bit := COLUMN_NAME || ' not in ' || bit1; if wcls is null then wcls := new_bit; else wcls := wcls || ' or ' || new_bit; end if; end if; len1 := length(NO_ILLEGAL_CHARS); if len1 > 0 then if (len1 > 200) then len1 := 200; end if; bit1 := substr (NO_ILLEGAL_CHARS, 1, 1); -- bit2: the first character of NO_ILLEGAL_CHARS -- repeated len1 times... bit2 := rpad (bit1, len1, bit1); new_bit := 'instr(translate(' || COLUMN_NAME || ',''' || NO_ILLEGAL_CHARS || ''',''' || bit2 || '''),''' || bit1 || ''') > 0'; if wcls is null then wcls := new_bit; else wcls := wcls || ' or ' || new_bit; end if; end if; if COL_NOT_EQ_COL2_YN = 'Y' then new_bit := COLUMN_NAME || '=' || COLUMN_2_NAME; if wcls is null then wcls := new_bit; else wcls := wcls || ' or ' || new_bit; end if; end if; if COL_NOT_NE_COL2_YN = 'Y' then new_bit := COLUMN_NAME || '<>' || COLUMN_2_NAME; if wcls is null then wcls := new_bit; else wcls := wcls || ' or ' || new_bit; end if; end if; if COL_NOT_LT_COL2_YN = 'Y' then new_bit := COLUMN_NAME || '<' || COLUMN_2_NAME; if wcls is null then wcls := new_bit; else wcls := wcls || ' or ' || new_bit; end if; end if; if COL_NOT_GT_COL2_YN= 'Y' then new_bit := COLUMN_NAME || '>' || COLUMN_2_NAME; if wcls is null then wcls := new_bit; else wcls := wcls || ' or ' || new_bit; end if; end if; if COL_MINUS_COL2_MIN is not null then new_bit := '(' || COLUMN_NAME || '-' || COLUMN_2_NAME || ')<' || COL_MINUS_COL2_MIN; if wcls is null then wcls := new_bit; else wcls := wcls || ' or ' || new_bit; end if; end if; if COL_MINUS_COL2_MAX is not null then new_bit := '(' || COLUMN_NAME || '-' || COLUMN_2_NAME || ')>' || COL_MINUS_COL2_MAX; if wcls is null then wcls := new_bit; else wcls := wcls || ' or ' || new_bit; end if; end if; RETURN wcls; END mk_predef_where_cls; -- = = = = = = = = = = = = = = = = = = = = = = = = = = -- Make an out-spec (and a description that describes it) -- based on COLUMN_NAME and, if it is used, with -- COLUMN_2_NAME. COLUMN_TYPE_CND indicates the general -- data type of the column(s): C=Char, N=Numeric, D=Date PROCEDURE mk_predef_out_spec (COLUMN_NAME IN VARCHAR2, COLUMN_TYPE_CND IN VARCHAR2, COLUMN_2_NAME IN VARCHAR2, OUT_SPEC OUT VARCHAR2, OUT_DESC OUT VARCHAR2) IS ospec VARCHAR2(100); BEGIN if COLUMN_TYPE_CND = 'N' then OUT_SPEC := 'to_char(' || COLUMN_NAME || ')'; elsif COLUMN_TYPE_CND = 'D' then OUT_SPEC := 'to_char(' || COLUMN_NAME || ',''DD-MM-YYYY'')'; else OUT_SPEC := COLUMN_NAME; end if; OUT_DESC := COLUMN_NAME; if COLUMN_2_NAME is not null then OUT_SPEC := OUT_SPEC || ' || ''|'' || '; OUT_DESC := OUT_DESC || '|'; if COLUMN_TYPE_CND = 'N' then OUT_SPEC := OUT_SPEC || 'to_char(' || COLUMN_2_NAME || ')'; elsif COLUMN_TYPE_CND = 'D' then OUT_SPEC := OUT_SPEC || 'to_char(' || COLUMN_2_NAME || ',''DD-MM-YYYY'')'; else OUT_SPEC := OUT_SPEC || COLUMN_2_NAME; end if; OUT_DESC := OUT_DESC || COLUMN_2_NAME; end if; END mk_predef_out_spec; -- = = = = = = = = = = = = = = = = = = = = = = = = = = -- Make a where-clause for foreign key checks. FUNCTION mk_fk_where_cls (THIS_DATA_DOMAIN VARCHAR2, THIS_TABLE_NAME VARCHAR2, THIS_TABLE_ALIAS CHAR, FOREIGN_KEY_LIST VARCHAR2, REF_DATA_DOMAIN VARCHAR2, REF_TABLE_NAME VARCHAR2, REF_KEY_LIST VARCHAR2, FK_NOT_ORPHAN_YN CHAR, FK_NOT_NULL_YN CHAR, FK_NOT_PARTIAL_YN CHAR) RETURN VARCHAR2 IS talias CHAR(1); ralias CHAR(1); icol NUMBER(4); the_ref_domain VARCHAR2(30); the_ref_table VARCHAR2(30); colnam VARCHAR2(40); refcol VARCHAR2(40); last_colnam VARCHAR2(40); last_not_null VARCHAR2(60); any_null VARCHAR2(800); any_xlast_null VARCHAR2(800); -- any except last null keys_eql VARCHAR2(1200); partial_chk VARCHAR2(900); orphan_chk VARCHAR2(2000); where_cls VARCHAR2(2000); BEGIN talias := THIS_TABLE_ALIAS; ralias := 'r'; the_ref_domain := nvl (REF_DATA_DOMAIN, THIS_DATA_DOMAIN); the_ref_table := nvl (REF_TABLE_NAME, THIS_TABLE_NAME); last_colnam := null; any_xlast_null := null; icol := 0; loop icol := icol + 1; colnam := key_col (FOREIGN_KEY_LIST, icol); exit when colnam is null; -- << exit loop colnam := talias || '.' || colnam; refcol := key_col (REF_KEY_LIST, icol); exit when refcol is null; -- << exit loop refcol := ralias || '.' || refcol; if icol = 1 then any_null := '('; keys_eql := '('; else any_null := any_null || ' or '; keys_eql := keys_eql || ' and '; end if; any_null := any_null || colnam || ' is null'; keys_eql := keys_eql || refcol || ' = ' || colnam; if last_colnam is not null then if any_xlast_null is null then any_xlast_null := '('; else any_xlast_null := any_xlast_null || ' or '; end if; any_xlast_null := any_xlast_null || last_colnam || ' is null'; end if; last_colnam := colnam; end loop; -- through column-pairs in the foreign-key if last_colnam is null then RETURN null; end if; any_null := any_null || ')'; keys_eql := keys_eql || ')'; last_not_null := last_colnam || ' is not null'; if any_xlast_null is not null then any_xlast_null := any_xlast_null || ')'; end if; if instr(any_null,' and ') > 0 then -- ie. multi-column key partial_chk := '(' || any_null || ' and ' || last_not_null || ')'; else partial_chk := null; end if; where_cls := null; if FK_NOT_ORPHAN_YN = 'Y' then orphan_chk := '( (not ' || any_null || ') and not exists ' || '(select ''x'' from ' || the_ref_table || ' ' || ralias || ' where ' || keys_eql || ') )'; if where_cls is null then where_cls := orphan_chk; else where_cls := where_cls || ' or ' || orphan_chk; end if; end if; if FK_NOT_NULL_YN = 'Y' then if where_cls is null then where_cls := any_null; else where_cls := where_cls || ' or ' || any_null; end if; end if; if FK_NOT_PARTIAL_YN = 'Y' and any_xlast_null is not null and (FK_NOT_NULL_YN is null or FK_NOT_NULL_YN <> 'Y') then partial_chk := '(' || any_xlast_null || ' and ' || last_not_null || ')'; if where_cls is null then where_cls := partial_chk; else where_cls := where_cls || ' or ' || partial_chk; end if; end if; RETURN where_cls; END mk_fk_where_cls; -- = = = = = = = = = = = = = = = = = = = = = = = = = = -- Make the sql for a rule -- (and record it in CHKDB_RULE_SQL) FUNCTION mk_rule_sql (data_domain VARCHAR2, ruleset_id VARCHAR2, table_name VARCHAR2, rule_id VARCHAR2, rule_class VARCHAR2, primary_key_spec VARCHAR2, row_out_spec VARCHAR2, row_out_desc VARCHAR2, table_alias CHAR, where_cls VARCHAR2) RETURN VARCHAR2 IS val_out_spec VARCHAR2(1000); val_out_desc VARCHAR2(1000); out_spec VARCHAR2(2000); rule_sql VARCHAR2(3000); BEGIN val_out_spec := nvl(row_out_spec,'null'); val_out_desc := nvl(row_out_desc,'VALUES_CHECKED'); out_spec := '''' || data_domain || ''',' || '''' || ruleset_id || ''',' || '''' || table_name || ''',' || '''' || rule_id || ''',' || 'rowid' || ',' || primary_key_spec || ',' || rule_class || ',' || val_out_spec || ',' || '''' || val_out_desc || ''',' || '''' || sysdate || ''''; rule_sql := 'insert into ' || chk_out_table || ' ' || chk_out_cols || ' select ' || out_spec || ' from ' || table_name || ' ' || table_alias || ' where ' || where_cls; RETURN rule_sql; END mk_rule_sql; -- = = = = = = = = = = = = = = = = = = = = = = = = = = -- Apply a rule and write results to table CHKDB_TABLE, -- save the sql in CHKDB_RULE_SQL, and if there is an -- error, save details in CHKDB_RULE_ERR. PROCEDURE apply_a_rule (data_domain VARCHAR2, ruleset_id VARCHAR2, table_name VARCHAR2, rule_id VARCHAR2, rule_sql VARCHAR2) IS err_num NUMBER; err_msg VARCHAR2(100); BEGIN insert into CHKDB_RULE_SQL (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_SQL_DATE, RULE_SQL) values (data_domain, ruleset_id, table_name, rule_id, sysdate, rule_sql); commit; BEGIN execute immediate rule_sql; EXCEPTION WHEN OTHERS THEN err_num := SQLCODE; err_msg := substr(SQLERRM,1,100); insert into CHKDB_RULE_ERR (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_ERR_DATE, ERR_NUMBER, ERR_MESSAGE) values (data_domain, ruleset_id, table_name, rule_id, sysdate, err_num, err_msg); commit; END; END apply_a_rule; -- ######################################################### END CHKDB_CHECK_DB; / -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- Copyright and Open Source License -- -- Copyright (c) Brian Marshall 2003 -- -- Permission is hereby granted, free of charge, to any -- person obtaining a copy of this software and associated -- documentation files (the "Software"), to deal in the -- Software without restriction, including without limitation -- the rights to use, copy, modify, merge, publish, distribute, -- sublicense, and/or sell copies of the Software, and to -- permit persons to whom the Software is furnished to do so, -- subject to the following conditions: -- -- The above copyright notice and this permission notice shall be -- included in all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -- OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -- HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -- WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -- OTHER DEALINGS IN THE SOFTWARE. -- -- ################################################################# chkdb_tables.sql0100755000076400007640000003241507760521540013203 0ustar brianbrian-- ================================================================= -- Create the tables for ChkDB rule-based data checking. -- -- Overview -- Table Name Primary Key Columns -- ----------------- -------------------------------------- -- CHKDB_DOMAIN DATA_DOMAIN -- CHKDB_TABLE DATA_DOMAIN, TABLE_NAME -- COLUMN_SEQ_NUM -- CHKDB_RULESET DATA_DOMAIN, RULESET_ID -- CHKDB_RULE DATA_DOMAIN, RULESET_ID, TABLE_NAME, -- RULE_ID -- CHKDB_RESULT DATA_DOMAIN, RULESET_ID, TABLE_NAME, -- RULE_ID, SELECTED_ROWID -- CHKDB_RULE_SQL DATA_DOMAIN, RULESET_ID, TABLE_NAME, -- RULE_ID -- CHKDB_RULE_ERR DATA_DOMAIN, RULESET_ID, TABLE_NAME, -- RULE_ID -- -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- CHKDB_DOMAIN -- one row is: a set of tables and/or views against which -- sets of data-checking rules can be defined. create table CHKDB_DOMAIN ( DATA_DOMAIN VARCHAR2(20), DESCRIPTION VARCHAR2(60), OWNER VARCHAR2(40), ACTIVE_YN CHAR(1) DEFAULT 'Y' NOT NULL, constraint CHKDB_DOMAIN_PK primary key (DATA_DOMAIN) ); -- OWNER can be used for the name of the person responsible -- for the domain being in the database. -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- CHKDB_TABLE -- one row is: a table or view in a data domain, either: -- - a table/view to be checked -- - a table/view used to setup or use ChkDB -- -- This table is used to describe: -- - views into your database (for checking) -- - tables populated from your database (for checking) -- - tables to help define/populate ChkDB views/tables -- - tables to be dropped when ChkDB is removed -- -- This table should not describe tables in your corporate -- database. -- -- As a courtesy to the DBA responsible for the database, -- the names of all tables and views created for ChkDB -- checking should begin with 'CHKDB_'. create table CHKDB_TABLE ( DATA_DOMAIN VARCHAR2(20), TABLE_NAME VARCHAR2(30), DESCRIPTION VARCHAR2(60), ACTIVE_YN CHAR(1) DEFAULT 'Y' NOT NULL, CHECKABLE_YN CHAR(1) DEFAULT 'Y' NOT NULL, TABLE_VIEW_TV CHAR(1) DEFAULT 'T' NOT NULL, DROP_ON_REMOVE_YN CHAR(1) DEFAULT 'Y' NOT NULL, PRIMARY_KEY_LIST VARCHAR2(600), TABLE_GROUP VARCHAR2(20), TABLE_SUBGROUP VARCHAR2(20), constraint CHKDB_TABLE_PK primary key (DATA_DOMAIN, TABLE_NAME) ); -- If CHECKABLE_YN = 'Y' then PRIMARY_KEY_LIST must -- contain a list like 'COL1,COL2,COL3' (which may -- contain spaces). -- -- If DROP_ON_REMOVE_YN = 'Y', the table/view will be -- dropped if the domain or all of ChkDB is removed. -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- CHKDB_RULESET -- one row is: a set of rules for a data domain. create table CHKDB_RULESET ( DATA_DOMAIN VARCHAR2(20), RULESET_ID VARCHAR2(20), DESCRIPTION VARCHAR2(60), OWNER VARCHAR2(40), ACTIVE_YN CHAR(1) DEFAULT 'Y' NOT NULL, constraint CHKDB_RULESET_PK primary key (DATA_DOMAIN, RULESET_ID) ); -- OWNER can be used for the name of the person responsible -- for the ruleset being in the database. -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- CHKDB_RULE -- one row is: a rule (in a rule set) for a table (in -- a data domain). create table CHKDB_RULE ( -- primary key... DATA_DOMAIN VARCHAR2(20), RULESET_ID VARCHAR2(20), TABLE_NAME VARCHAR2(30), RULE_ID VARCHAR2(20), -- about the rule... ACTIVE_YN CHAR(1) DEFAULT 'Y' NOT NULL, DESCRIPTION VARCHAR2(60), RULE_CLASS NUMBER(5) DEFAULT 0 NOT NULL, -- how the rule selects rows... -- Way 1: specify where-clause... CHK_WHERE_CLS VARCHAR2(2000), ROW_OUT_DESC VARCHAR2(1000), ROW_OUT_SPEC VARCHAR2(1000), -- Way 2: various predefined checks... COLUMN_NAME VARCHAR2(30), COLUMN_TYPE_CND CHAR(1), NOT_NULL_YN CHAR(1), MIN_VALUE VARCHAR2(20), MAX_VALUE VARCHAR2(20), MAX_LENGTH NUMBER(4), IS_A_NUMBER_YN CHAR(1), NOT_BEFORE_TODAY_YN CHAR(1), NOT_AFTER_TODAY_YN CHAR(1), IN_LIST VARCHAR2(1000), NO_ILLEGAL_CHARS VARCHAR2(200), COLUMN_2_NAME VARCHAR2(30), COL_NOT_EQ_COL2_YN CHAR(1), COL_NOT_NE_COL2_YN CHAR(1), COL_NOT_LT_COL2_YN CHAR(1), COL_NOT_GT_COL2_YN CHAR(1), COL_MINUS_COL2_MIN NUMBER(10), COL_MINUS_COL2_MAX NUMBER(10), -- Way 3: foreign key check... FOREIGN_KEY_LIST VARCHAR2(600), REF_DATA_DOMAIN VARCHAR2(20), REF_TABLE_NAME VARCHAR2(30), REF_KEY_LIST VARCHAR2(600), FK_NOT_ORPHAN_YN CHAR(1), FK_NOT_NULL_YN CHAR(1), FK_NOT_PARTIAL_YN CHAR(1), constraint CHKDB_RULE_PK primary key (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID) ); -- ACTIVE_YN - if 'N', rule will not be applied -- -- DESCRIPTION describes the condition this rule is -- designed to identify. ex: "Department Manager is not set" -- -- RULE_CLASS can be used to classify, group or order rules. -- Its intent is to group/order rows selected by rules - -- maybe like this: -- 0: Aspect of Interest (default) -- 1: Somewhat Undesirable -- 2: Undesirable -- 3: Very Undesirable -- 4: Extremely Undesirable -- 5: Not Acceptable -- -- = = = = = = = = = = = = = = = = = = -- How The Rule Selects Rows -- -- A rule must use one (and only one) of the ways below. -- -- = = = = = = = = = = -- Way 1: specify where-clause -- -- This way is generally only used if the condition -- of the rule can not be specified any other way. -- -- CHK_WHERE_CLS must be set and these must be null: -- COLUMN_NAME, FOREIGN_KEY_LIST -- -- CHK_WHERE_CLS contains a where clause to select -- rows from the table (which will have an alias of t). -- Ex 1. 'MGR_EMP_ID is null' -- Ex 2. 'NUM_SHIPPED > NUM_REQUESTED' -- Ex 3. 'AA is not null and not exists -- (select ''x'' from REFTAB r -- where r.BB = t.AA)' -- -- Note: In an SQL string constant, a single quote is -- written as a pair of single quotes. -- -- ROW_OUT_SPEC contains an SQL string expression that -- will be selected by the rule (presumably to show the -- data that caused the rule to select the row). -- Examples: 'EMP_ID' or 'to_char(hire_date)' -- -- ROW_OUT_DESC is a description or title for the data -- selected by ROW_OUT_SPEC. -- -- = = = = = = = = = = -- Way 2: predefined checks -- -- This is the easy way of specifying a rule; it is -- generally used if possible. -- -- COLUMN_NAME must be set, and these must be null: -- CHK_WHERE_CLS, FOREIGN_KEY_LIST -- -- COLUMN_TYPE_CND must be set, and other columns -- can be set to do various checks. -- -- COLUMN_TYPE_CND indicates the general data type: -- C means CHAR, VARCHAR, VARCHAR2 -- N means NUMERIC, INTEGER, DOUBLE, etc. -- D means DATE -- -- MIN_VALUE and MAX_VALUE may contain character strings, -- numbers or dates in the form YYYY-MM-DD . -- -- If a second column in the table is specified in -- COLUMN_2_NAME, this column must have the same general -- datatype as the column named in COLUMN_NAME. -- -- IN_LIST may contain a list of acceptable values -- separated by commas. DO NOT enclose the list in -- parentheses. Spaces are removed before checking. -- This check cannot be used when an acceptable value -- contains a comma or meaningful spaces. -- Ex: 'Y,N' or 'PRIMARY,SECONDARY,TERTIARY' -- '1,2,3' or '1.00, 3.14' -- IN_LIST does NOT support date columns. -- -- NO_ILLEGAL_CHARS may contain characters that a -- (character) value should not contain. -- Ex: '[]{}()"''`' -- A single quote is specified as two single quotes. -- -- = = = = = = = = = = -- Way 3: foreign key checks -- -- This way is for checking a foreign key - a set of -- columns that, for a row in the table being checked, -- identify one (or more) other row(s) in some table. -- -- To use this way... FOREIGN_KEY_LIST must be set and -- these must be null: CHK_WHERE_CLS, COLUMN_NAME -- -- FOREIGN_KEY_LIST identifies a key in the table being -- checked. -- -- REF_DATA_DOMAIN, REF_TABLE_NAME and REF_KEY_LIST -- identify the key that the foreign key should match. -- They are used only if FK_NOT_ORPHAN_YN = 'Y'. -- -- A rule can check that... -- - a code exists in the code-table -- - a code in a code-table is used in a table -- or, more generally... -- - a child-table row has a row in the parent table -- - a parent-table row has a row in a child table -- -- At least one of these flags must be set to 'Y': -- -- FK_NOT_ORPHAN_YN - the rule will select rows where -- no column in the FOREIGN_KEY_LIST key is null -- and there is no row in REF_TABLE_NAME where -- the columns in REF_KEY_LIST match the columns -- in FOREIGN_KEY_LIST. -- - REF_KEY_LIST must be set -- - if REF_TABLE_NAME is null, default is TABLE_NAME -- - if REF_DATA_DOMAIN is null, default is DATA_DOMAIN -- -- FK_NOT_NULL_YN - the rule will select rows where -- all columns in the foreign are null. -- -- FK_NOT_PARTIAL_YN - the rule will select rows where -- - the last column in the key is not null -- - some other column in the key is null -- -- -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- CHKDB_RESULT -- one row is: an instance of a row in a table (in a data -- domain) being selected by a rule (in a rule set). create table CHKDB_RESULT ( DATA_DOMAIN VARCHAR2(20), RULESET_ID VARCHAR2(20), TABLE_NAME VARCHAR2(30), RULE_ID VARCHAR2(20), SELECTED_ROWID ROWID, ROW_PRIMARY_KEY VARCHAR2(600), RULE_CLASS NUMBER(5), ROW_OUT_DATA VARCHAR2(1000), ROW_OUT_DESC VARCHAR2(1000), CHECK_DATE DATE, constraint CHKDB_RESULT_PK primary key (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, SELECTED_ROWID) ); -- If, in the rule's CHK_VALUE_SPEC is null, -- then SELECTED_VALUES will contain null. -- ROW_OUT_DATA may contain data from the row indicating -- why it was selected by the rule. ROW_OUT_DESC describes -- the contents of ROW_OUT_DATA. -- Question for those who are interested: -- Should CHECK_DATE be part of the primary key? -- Or, should software that is going to insert rows have -- to first delete rows for the table or rule-set? -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- CHKDB_RULE_SQL -- one row is: the sql generated for a rule when it was -- last executed. create table CHKDB_RULE_SQL ( DATA_DOMAIN VARCHAR2(20), RULESET_ID VARCHAR2(20), TABLE_NAME VARCHAR2(30), RULE_ID VARCHAR2(20), RULE_SQL_DATE DATE, RULE_SQL VARCHAR2(3000), constraint CHKDB_RULE_SQL_PK primary key (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID) ); -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- CHKDB_RULE_ERR -- one row is: an instance of an attempt to apply a rule -- but the rule was mal-formed and the SQL statement -- resulted in an error. create table CHKDB_RULE_ERR ( DATA_DOMAIN VARCHAR2(20), RULESET_ID VARCHAR2(20), TABLE_NAME VARCHAR2(30), RULE_ID VARCHAR2(20), RULE_ERR_DATE DATE, ERR_NUMBER NUMBER, ERR_MESSAGE VARCHAR2(100), constraint CHKDB_RULE_ERR_PK primary key (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID) ); -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- Copyright and Open Source License -- -- Copyright (c) Brian Marshall 2003 -- -- Permission is hereby granted, free of charge, to any -- person obtaining a copy of this software and associated -- documentation files (the "Software"), to deal in the -- Software without restriction, including without limitation -- the rights to use, copy, modify, merge, publish, distribute, -- sublicense, and/or sell copies of the Software, and to -- permit persons to whom the Software is furnished to do so, -- subject to the following conditions: -- -- The above copyright notice and this permission notice shall be -- included in all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -- OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -- HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -- WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -- OTHER DEALINGS IN THE SOFTWARE. -- -- ================================================================= chkdb_truncate.sql0100664000076400007640000000315607760521540013555 0ustar brianbrian-- ================================================================= -- Truncate the tables for ChkDB rule-based data checking. truncate table CHKDB_DOMAIN; truncate table CHKDB_TABLE; truncate table CHKDB_RULESET; truncate table CHKDB_RULE; truncate table CHKDB_RESULT; truncate table CHKDB_RULE_SQL; truncate table CHKDB_RULE_ERR; -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- Copyright and Open Source License -- -- Copyright (c) Brian Marshall 2003 -- -- Permission is hereby granted, free of charge, to any -- person obtaining a copy of this software and associated -- documentation files (the "Software"), to deal in the -- Software without restriction, including without limitation -- the rights to use, copy, modify, merge, publish, distribute, -- sublicense, and/or sell copies of the Software, and to -- permit persons to whom the Software is furnished to do so, -- subject to the following conditions: -- -- The above copyright notice and this permission notice shall be -- included in all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -- OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -- HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -- WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -- OTHER DEALINGS IN THE SOFTWARE. -- -- ================================================================= drop_chkdb.sql0100664000076400007640000000313007760521540012664 0ustar brianbrian-- ================================================================= prompt Dropping the tables for ChkDB rule-based data checking... drop table CHKDB_DOMAIN; drop table CHKDB_TABLE; drop table CHKDB_RULESET; drop table CHKDB_RULE; drop table CHKDB_RESULT; drop table CHKDB_RULE_SQL; drop table CHKDB_RULE_ERR; -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- Copyright and Open Source License -- -- Copyright (c) Brian Marshall 2003 -- -- Permission is hereby granted, free of charge, to any -- person obtaining a copy of this software and associated -- documentation files (the "Software"), to deal in the -- Software without restriction, including without limitation -- the rights to use, copy, modify, merge, publish, distribute, -- sublicense, and/or sell copies of the Software, and to -- permit persons to whom the Software is furnished to do so, -- subject to the following conditions: -- -- The above copyright notice and this permission notice shall be -- included in all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -- OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -- HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -- WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -- OTHER DEALINGS IN THE SOFTWARE. -- -- ================================================================= INSTALL.txt0100664000076400007640000000534507760521540011725 0ustar brianbrian================================================================= INSTALL.txt - Installing ChkDB Rule-Based Data Checking Contents: Downloading a Distribution File Unpacking a Distribution Installing in a Database to be Checked Uninstalling ChkDB = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = Downloading a Distribution File Download a ChkDB distribution file for your system (Windows or Unix/Linux) from www.chkdb.org. Go to the Download page, click on the appropriate link, and let your browser save the file on your system. Move the distribution file to an empty directory. = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = Unpacking the Distribution In Windows, unzip the distribution file with a zip application or, in a command window: unzip chkdb01.zip (or whatever the filename is) In Unix/Linux, in a terminal window: tar -xzf chkdb01.gz (or whatever the filename is) = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = Installing in a Database to be Checked Before ChkDB checking can be done in an Oracle database, five ChkDB tables must be created and a PL/SQL package must be stored. Either execute setup_chkdb.sql using SQL*Plus OR execute the individual scripts yourself: - chkdb_tables.sql to create 5 ChkDB tables - chkdb_software.sql to store a PL/SQL package = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = Uninstalling ChkDB The ChkDB tables and PL/SQL can be removed from a database by executing: remove_chkdb.sql = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = Copyright and Open Source License Copyright (c) Brian Marshall 2003 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================================= ogsi_1_ruleset.sql0100664000076400007640000033314507760521540013525 0ustar brianbrian-- ============================================================== -- Define rulesets for the OIL_GAS_SEIS_INV data domain -- -- These rulesets are used to check basic data integrity -- in seismic inventory data - tables that describe a -- company's seismic data. -- -- The OIL_GAS_SEIS_INV domain provides for data being stored -- in a variety of ways. An individual rule-set will do checks -- on the assumption that data is stored in a particular way. -- For any given database to be checked, there will be a subset -- of the rule-sets that are appropriate to use. -- -- This is a work in progress. Suggestions and contributions -- are appreciated. -- -- Note: In rules in which a where-clause is specified, -- the table being checked has an alias of t. -- -- Where rule-descriptions are in parenthesies like... -- -- (desc in parenthesies) -- it means ACTIVE_YN = 'N' and the rule is inactive. -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- Define the INFO_ITEM_BASIC rule-set. delete CHKDB_RULESET where DATA_DOMAIN = 'OIL_GAS_SEIS_INV' and RULESET_ID = 'INFO_ITEM_BASIC'; delete CHKDB_RULE where DATA_DOMAIN = 'OIL_GAS_SEIS_INV' and RULESET_ID = 'INFO_ITEM_BASIC'; insert into CHKDB_RULESET (DATA_DOMAIN, RULESET_ID, DESCRIPTION) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'Check of data in the CHKDB_OGSI_INFO_ITEM table'); -- = = = = = = = = = = = = = = = = = = = = = = = -- Rules for the CHKDB_OGSI_INFO_ITEM table insert into CHKDB_RULE -- (info_item_id too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'INFO_ITEM_ID_LONG', 2, 'info_item_id is too long', 'INFO_ITEM_ID', 'C', 20, 'N'); insert into CHKDB_RULE -- active_yn bad? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, IN_LIST) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'ACTIVE_YN_BAD', 4, 'ACTIVE_YN is not Y or N', 'ACTIVE_YN', 'C', 'Y,N'); insert into CHKDB_RULE -- (effective_date null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'EFFECTIVE_DATE_NULL', 3, 'effective_date is not set', 'EFFECTIVE_DATE', 'D', 'Y', 'N'); insert into CHKDB_RULE -- (expiry_date null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'EXPIRY_DATE_NULL', 3, 'expiry_date is not set', 'EXPIRY_DATE', 'D', 'Y', 'N'); insert into CHKDB_RULE -- expiry_ before effective_date? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, COLUMN_2_NAME, COL_NOT_LT_COL2_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'EXPIRY_LT_EFFECTIVE', 3, 'expiry_date before effective_date', 'EXPIRY_DATE', 'D', 'EFFECTIVE_DATE', 'Y'); insert into CHKDB_RULE -- (numeric_id null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'NUMERIC_ID_NULL', 3, 'numeric_id is not set', 'NUMERIC_ID', 'N', 'Y', 'N'); insert into CHKDB_RULE -- seis_line_id not exist? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, FOREIGN_KEY_LIST, REF_DATA_DOMAIN, REF_TABLE_NAME, REF_KEY_LIST, FK_NOT_ORPHAN_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'SEIS_LINE_ID_NOT', 4, 'seis_line_id does not exist', 'SEIS_LINE_ID', 'OIL_GAS_SEIS_INV', 'CHKDB_OGSI_SEIS_LINE', 'SEIS_LINE_ID', 'Y'); insert into CHKDB_RULE -- (seis_line_id null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'SEIS_LINE_ID_NULL', 3, 'seis_line_id is not set', 'SEIS_LINE_ID', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (seis_line_id too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'SEIS_LINE_ID_LONG', 2, 'seis_line_id is too long', 'SEIS_LINE_ID', 'C', 20, 'N'); insert into CHKDB_RULE -- (line_name null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'LINE_NAME_NULL', 3, 'line_name is not set', 'LINE_NAME', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (line_name too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'LINE_NAME_LONG', 2, 'line_name is too long', 'LINE_NAME', 'C', 20, 'N'); insert into CHKDB_RULE -- (line_key_2 null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'LINE_KEY_2_NULL', 3, 'line_key_2 is not set', 'LINE_KEY_2', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (line_key_2 too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'LINE_KEY_2_LONG', 2, 'line_key_2 is too long', 'LINE_KEY_2', 'C', 20, 'N'); insert into CHKDB_RULE -- (line_name,key2 not exist?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, FOREIGN_KEY_LIST, REF_DATA_DOMAIN, REF_TABLE_NAME, REF_KEY_LIST, FK_NOT_ORPHAN_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'LINE_NAME_KEY2_NOT', 4, 'line_name,line_key_2 does not exist', 'LINE_NAME,LINE_KEY_2', 'OIL_GAS_SEIS_INV', 'CHKDB_OGSI_SEIS_LINE', 'LINE_NAME,LINE_KEY_2', 'Y','N'); insert into CHKDB_RULE -- item_type null? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'ITEM_TYPE_NULL', 3, 'item_type is not set', 'ITEM_TYPE', 'C', 'Y'); insert into CHKDB_RULE -- (item_type too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'ITEM_TYPE_LONG', 2, 'item_type is too long', 'ITEM_TYPE', 'C', 20, 'N'); insert into CHKDB_RULE -- item_format null? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'ITEM_FORMAT_NULL', 3, 'item_format is not set', 'ITEM_FORMAT', 'C', 'Y'); insert into CHKDB_RULE -- (item_format too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'ITEM_FORMAT_LONG', 2, 'item_format is too long', 'ITEM_FORMAT', 'C', 20, 'N'); insert into CHKDB_RULE -- (data_version null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'DATA_VERSION_NULL', 3, 'item_format is not set', 'DATA_VERSION', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (data_version too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'DATA_VERSION_LONG', 2, 'data_version is too long', 'DATA_VERSION', 'C', 20, 'N'); insert into CHKDB_RULE -- sample_length bad? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MIN_VALUE, MAX_VALUE) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'SAMPLE_LENGTH_BAD', 2, 'sample_length is invalid', 'SAMPLE_LENGTH_MS', 'N', '0.1', '10.0'); insert into CHKDB_RULE -- (sample_length null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'SAMPLE_LENGTH_NULL', 3, 'sample_length is not set', 'SAMPLE_LENGTH_MS', 'N', 'Y', 'N'); insert into CHKDB_RULE -- samples_per_record bad? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MIN_VALUE, MAX_VALUE) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'SAMP_PER_REC_BAD', 2, 'samples_per_record is invalid', 'SAMPLES_PER_RECORD', 'N', '10', '100000'); insert into CHKDB_RULE -- (samples_per_record null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'SAMP_PER_REC_NULL', 3, 'samples_per_record is not set', 'SAMPLES_PER_RECORD', 'N', 'Y', 'N'); insert into CHKDB_RULE -- record_length_ms bad? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MIN_VALUE, MAX_VALUE) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'RECORD_LENGTH_BAD', 2, 'record_length_ms is invalid', 'RECORD_LENGTH_MS', 'N', '10', '100000'); insert into CHKDB_RULE -- (record_length_ms null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'RECORD_LENGTH_NULL', 3, 'record_length_ms is not set', 'RECORD_LENGTH_MS', 'N', 'Y', 'N'); insert into CHKDB_RULE -- rec-len,samp-len,samp/rec bad? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, CHK_WHERE_CLS, ROW_OUT_DESC, ROW_OUT_SPEC, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'RLEN_SLEN_SREC_BAD', 2, 'rec-len, samp-len, samp/rec not consistent', 'RECORD_LENGTH_MS is not null and ' || 'SAMPLE_LENGTH_MS is not null and ' || 'SAMPLES_PER_RECORD is not null and ' || 'abs((RECORD_LENGTH_MS/SAMPLE_LENGTH_MS)-' || 'SAMPLES_PER_RECORD) > 2.0', 'rec-len|samp-len|samp/rec', 'to_char(RECORD_LENGTH_MS)||''|''||' || 'to_char(SAMPLE_LENGTH_MS)||''|''||' || 'to_char(SAMPLES_PER_RECORD)', 'Y'); insert into CHKDB_RULE -- (process_date null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'PROCESS_DATE_NULL', 3, 'process_date is not set', 'PROCESS_DATE', 'D', 'Y', 'N'); insert into CHKDB_RULE -- (processed_by null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'PROCESSED_BY_NULL', 3, 'processed_by is not set', 'PROCESSED_BY', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (create_start_date null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'CREATE_START_DT_NULL', 3, 'create_start_date is not set', 'CREATE_START_DATE', 'D', 'Y', 'N'); insert into CHKDB_RULE -- (create_end_date null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'CREATE_END_DATE_NULL', 3, 'create_end_date is not set', 'CREATE_END_DATE', 'D', 'Y', 'N'); insert into CHKDB_RULE -- create_start <= create_end? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, COLUMN_2_NAME, COL_NOT_GT_COL2_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'CRE_START_AFTER_END', 2, 'create_start_date after create_end_date', 'CREATE_START_DATE', 'D', 'CREATE_END_DATE', 'Y'); insert into CHKDB_RULE -- item_bytes bad? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MIN_VALUE, MAX_VALUE) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'ITEM_BYTES_BAD', 3, 'item_bytes is invalid', 'ITEM_BYTES', 'N', '1', '100000000000'); insert into CHKDB_RULE -- (item_bytes null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'ITEM_BYTES_NULL', 3, 'item_bytes is not set', 'ITEM_BYTES', 'N', 'Y', 'N'); insert into CHKDB_RULE -- (item_category too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'ITEM_CATEGORY_LONG', 2, 'item_category is too long', 'ITEM_CATEGORY', 'C', 20, 'N'); insert into CHKDB_RULE -- (item_subcategory too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'ITEM_SUBCAT_LONG', 2, 'item_subcategory is too long', 'ITEM_SUBCATEGORY', 'C', 20, 'N'); -- the common line attributes... insert into CHKDB_RULE -- country null? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'COUNTRY_NULL', 3, 'country is not set', 'COUNTRY', 'C', 'Y'); insert into CHKDB_RULE -- (country too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'COUNTRY_LONG', 2, 'country is too long', 'COUNTRY', 'C', 20, 'N'); insert into CHKDB_RULE -- prov_state null? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'PROV_STATE_NULL', 3, 'prov_state is not set', 'PROV_STATE', 'C', 'Y'); insert into CHKDB_RULE -- (prov_state too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'PROV_STATE_LONG', 2, 'prov_state is too long', 'PROV_STATE', 'C', 20, 'N'); insert into CHKDB_RULE -- (county null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'COUNTY_NULL', 3, 'county is not set', 'COUNTY', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (county too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'COUNTY_LONG', 2, 'county is too long', 'COUNTY', 'C', 20, 'N'); insert into CHKDB_RULE -- (district null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'DISTRICT_NULL', 3, 'district is not set', 'DISTRICT', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (district too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'DISTRICT_LONG', 2, 'district is too long', 'DISTRICT', 'C', 20, 'N'); insert into CHKDB_RULE -- (region null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'REGION_NULL', 3, 'region is not set', 'REGION', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (region too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'REGION_LONG', 2, 'region is too long', 'REGION', 'C', 20, 'N'); insert into CHKDB_RULE -- (area null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'AREA_NULL', 3, 'area is not set', 'AREA', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (area too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'AREA_LONG', 2, 'area is too long', 'AREA', 'C', 20, 'N'); insert into CHKDB_RULE -- (prospect null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'PROSPECT_NULL', 3, 'prospect is not set', 'PROSPECT', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (prospect too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'PROSPECT_LONG', 2, 'prospect is too long', 'PROSPECT', 'C', 20, 'N'); insert into CHKDB_RULE -- (survey null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'SURVEY_NULL', 3, 'survey is not set', 'SURVEY', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (survey too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'SURVEY_LONG', 2, 'survey is too long', 'SURVEY', 'C', 20, 'N'); insert into CHKDB_RULE -- line_length bad? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MIN_VALUE, MAX_VALUE) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'LINE_LENGTH_BAD', 3, 'line_length is invalid', 'LINE_LENGTH', 'N', '0.01', '100000.00'); insert into CHKDB_RULE -- (line_length null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'LINE_LENGTH_NULL', 3, 'line_length is not set', 'LINE_LENGTH', 'N', 'Y', 'N'); insert into CHKDB_RULE -- (line_length_units null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'LINE_LEN_UNITS_NULL', 3, 'line_length_units is not set', 'LINE_LENGTH_UNITS', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (line_length_units too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'LINE_LEN_UNITS_LONG', 2, 'line_length_units is too long', 'LINE_LENGTH_UNITS', 'C', 20, 'N'); insert into CHKDB_RULE -- first_shot_point null? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'FIRST_SP_NULL', 4, 'first_shot_point is not set', 'FIRST_SHOT_POINT', 'C', 'Y', 'Y'); insert into CHKDB_RULE -- (first_shot_point too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'FIRST_SP_LONG', 2, 'first_shot_point is too long', 'FIRST_SHOT_POINT', 'C', 10, 'N'); insert into CHKDB_RULE -- last_shot_point null? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'LAST_SP_NULL', 4, 'last_shot_point is not set', 'LAST_SHOT_POINT', 'C', 'Y', 'Y'); insert into CHKDB_RULE -- (last_shot_point too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'LAST_SP_LONG', 2, 'last_shot_point is too long', 'LAST_SHOT_POINT', 'C', 10, 'N'); insert into CHKDB_RULE -- first sp same as last sp? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, COLUMN_2_NAME, COL_NOT_NE_COL2_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'FIRST_LAST_SP_SAME', 4, 'first and last shotpoints are the same', 'FIRST_SHOT_POINT', 'C', 'LAST_SHOT_POINT', 'Y'); insert into CHKDB_RULE -- (first_rec_num null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'FIRST_REC_NUM_NULL', 3, 'first_rec_num is not set', 'FIRST_REC_NUM', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (first_rec_num too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'FIRST_REC_NUM_LONG', 2, 'first_rec_num is too long', 'FIRST_REC_NUM', 'C', 10, 'N'); insert into CHKDB_RULE -- (last_rec_num null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'LAST_REC_NUM_NULL', 3, 'last_rec_num is not set', 'LAST_REC_NUM', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (last_rec_num too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'LAST_REC_NUM_LONG', 2, 'last_rec_num is too long', 'LAST_REC_NUM', 'C', 10, 'N'); insert into CHKDB_RULE -- (first_nline_num null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'FIRST_NLINE_NUM_NULL', 3, 'first_nline_num is not set', 'FIRST_NLINE_NUM', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (last_nline_num null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'LAST_NLINE_NUM_NULL', 3, 'last_nline_num is not set', 'LAST_NLINE_NUM', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (first_xline_num null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'FIRST_XLINE_NUM_NULL', 3, 'first_xline_num is not set', 'FIRST_XLINE_NUM', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (last_xline_num null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'LAST_XLINE_NUM_NULL', 3, 'last_xline_num is not set', 'LAST_XLINE_NUM', 'C', 'Y', 'N'); insert into CHKDB_RULE -- min_latitude bad? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MIN_VALUE, MAX_VALUE) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'MIN_LATITUDE_BAD', 4, 'min_latitude is invalid', 'MIN_LATITUDE', 'N', '-90.00', '90.00'); insert into CHKDB_RULE -- (min_latitude null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'MIN_LATITUDE_NULL', 3, 'min_latitude is not set', 'MIN_LATITUDE', 'N', 'Y', 'N'); insert into CHKDB_RULE -- max_latitude bad? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MIN_VALUE, MAX_VALUE) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'MAX_LATITUDE_BAD', 4, 'max_latitude is invalid', 'MAX_LATITUDE', 'N', '-90.00', '90.00'); insert into CHKDB_RULE -- (max_latitude null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'MAX_LATITUDE_NULL', 3, 'max_latitude is not set', 'MAX_LATITUDE', 'N', 'Y', 'N'); insert into CHKDB_RULE -- min_longitude bad? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MIN_VALUE, MAX_VALUE) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'MIN_LONGITUDE_BAD', 4, 'min_longitude is invalid', 'MIN_LONGITUDE', 'N', '-90.00', '90.00'); insert into CHKDB_RULE -- (min_longitude null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'MIN_LONGITUDE_NULL', 3, 'min_longitude is not set', 'MIN_LONGITUDE', 'N', 'Y', 'N'); insert into CHKDB_RULE -- max_longitude bad? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MIN_VALUE, MAX_VALUE) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'MAX_LONGITUDE_BAD', 4, 'max_longitude is invalid', 'MAX_LONGITUDE', 'N', '-90.00', '90.00'); insert into CHKDB_RULE -- (max_longitude null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_ITEM_BASIC', 'CHKDB_OGSI_INFO_ITEM', 'MAX_LONGITUDE_NULL', 3, 'max_longitude is not set', 'MAX_LONGITUDE', 'N', 'Y', 'N'); -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- Define the SEIS_LINE_BASIC rule-set. delete CHKDB_RULESET where DATA_DOMAIN = 'OIL_GAS_SEIS_INV' and RULESET_ID = 'SEIS_LINE_BASIC'; delete CHKDB_RULE where DATA_DOMAIN = 'OIL_GAS_SEIS_INV' and RULESET_ID = 'SEIS_LINE_BASIC'; insert into CHKDB_RULESET (DATA_DOMAIN, RULESET_ID, DESCRIPTION) values ('OIL_GAS_SEIS_INV', 'SEIS_LINE_BASIC', 'Check of data in the CHKDB_OGSI_SEIS_LINE table'); -- = = = = = = = = = = = = = = = = = = = = = = = -- Rules for the CHKDB_OGSI_SEIS_LINE table insert into CHKDB_RULE -- (seis_line_id too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'SEIS_LINE_BASIC', 'CHKDB_OGSI_SEIS_LINE', 'SEIS_LINE_ID_LONG', 2, 'seis_line_id is too long', 'SEIS_LINE_ID', 'C', 20, 'N'); insert into CHKDB_RULE -- active_yn bad? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, IN_LIST) values ('OIL_GAS_SEIS_INV', 'SEIS_LINE_BASIC', 'CHKDB_OGSI_SEIS_LINE', 'ACTIVE_YN_BAD', 4, 'ACTIVE_YN is not Y or N', 'ACTIVE_YN', 'C', 'Y,N'); insert into CHKDB_RULE -- (effective_date null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'SEIS_LINE_BASIC', 'CHKDB_OGSI_SEIS_LINE', 'EFFECTIVE_DATE_NULL', 3, 'effective_date is not set', 'EFFECTIVE_DATE', 'D', 'Y', 'N'); insert into CHKDB_RULE -- (expiry_date null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'SEIS_LINE_BASIC', 'CHKDB_OGSI_SEIS_LINE', 'EXPIRY_DATE_NULL', 3, 'expiry_date is not set', 'EXPIRY_DATE', 'D', 'Y', 'N'); insert into CHKDB_RULE -- expiry_ before effective_date? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, COLUMN_2_NAME, COL_NOT_LT_COL2_YN) values ('OIL_GAS_SEIS_INV', 'SEIS_LINE_BASIC', 'CHKDB_OGSI_SEIS_LINE', 'EXPIRY_LT_EFFECTIVE', 3, 'expiry_date before effective_date', 'EXPIRY_DATE', 'D', 'EFFECTIVE_DATE', 'Y'); insert into CHKDB_RULE -- (numeric_id null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'SEIS_LINE_BASIC', 'CHKDB_OGSI_SEIS_LINE', 'NUMERIC_ID_NULL', 3, 'numeric_id is not set', 'NUMERIC_ID', 'N', 'Y', 'N'); insert into CHKDB_RULE -- line_name null? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN) values ('OIL_GAS_SEIS_INV', 'SEIS_LINE_BASIC', 'CHKDB_OGSI_SEIS_LINE', 'LINE_NAME_NULL', 3, 'line_name is not set', 'LINE_NAME', 'C', 'Y'); insert into CHKDB_RULE -- (line_name too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'SEIS_LINE_BASIC', 'CHKDB_OGSI_SEIS_LINE', 'LINE_NAME_LONG', 2, 'line_name is too long', 'LINE_NAME', 'C', 20, 'N'); insert into CHKDB_RULE -- line_key_2 null? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN) values ('OIL_GAS_SEIS_INV', 'SEIS_LINE_BASIC', 'CHKDB_OGSI_SEIS_LINE', 'LINE_KEY_2_NULL', 3, 'line_key_2 is not set', 'LINE_KEY_2', 'C', 'Y'); insert into CHKDB_RULE -- (line_key_2 too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'SEIS_LINE_BASIC', 'CHKDB_OGSI_SEIS_LINE', 'LINE_KEY_2_LONG', 2, 'line_key_2 is too long', 'LINE_KEY_2', 'C', 20, 'N'); insert into CHKDB_RULE -- is_3d_yn bad? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, IN_LIST) values ('OIL_GAS_SEIS_INV', 'SEIS_LINE_BASIC', 'CHKDB_OGSI_SEIS_LINE', 'IS_3D_YN_BAD', 4, 'IS_3D_YN is something other than Y or N', 'IS_3D_YN', 'C', 'Y,N'); insert into CHKDB_RULE -- (is_3d_yn null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'SEIS_LINE_BASIC', 'CHKDB_OGSI_SEIS_LINE', 'IS_3D_YN_NULL', 3, 'IS_3D_YN is not set', 'IS_3D_YN', 'C', 'Y', 'N'); insert into CHKDB_RULE -- parent_seis_line_id not exist? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, FOREIGN_KEY_LIST, REF_DATA_DOMAIN, REF_TABLE_NAME, REF_KEY_LIST, FK_NOT_ORPHAN_YN) values ('OIL_GAS_SEIS_INV', 'SEIS_LINE_BASIC', 'CHKDB_OGSI_SEIS_LINE', 'PARENT_LINE_ID_NOT', 4, 'parent_seis_line_id does not exist', 'PARENT_SEIS_LINE_ID', 'OIL_GAS_SEIS_INV', 'CHKDB_OGSI_SEIS_LINE', 'SEIS_LINE_ID', 'Y'); insert into CHKDB_RULE -- (parent_seis_line_id too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'SEIS_LINE_BASIC', 'CHKDB_OGSI_SEIS_LINE', 'PARENT_LINE_ID_LONG', 2, 'parent_seis_line_id is too long', 'PARENT_SEIS_LINE_ID', 'C', 20, 'N'); insert into CHKDB_RULE -- parent name|key2 not exist? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, FOREIGN_KEY_LIST, REF_DATA_DOMAIN, REF_TABLE_NAME, REF_KEY_LIST, FK_NOT_ORPHAN_YN) values ('OIL_GAS_SEIS_INV', 'SEIS_LINE_BASIC', 'CHKDB_OGSI_SEIS_LINE', 'PARENT_NAME_KEY2_NOT', 4, 'parent_line_name|parent_line_key_2 does not exist', 'PARENT_LINE_NAME,PARENT_LINE_KEY_2', 'OIL_GAS_SEIS_INV', 'CHKDB_OGSI_SEIS_LINE', 'LINE_NAME,LINE_KEY_2', 'Y'); insert into CHKDB_RULE -- (parent_line_name too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'SEIS_LINE_BASIC', 'CHKDB_OGSI_SEIS_LINE', 'PARENT_LIN_NAME_LONG', 2, 'parent_line_name is too long', 'PARENT_LINE_NAME', 'C', 20, 'N'); insert into CHKDB_RULE -- (parent_line_key_2 too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'SEIS_LINE_BASIC', 'CHKDB_OGSI_SEIS_LINE', 'PARENT_KEY2_LONG', 2, 'parent_line_key_2 is too long', 'PARENT_LINE_KEY_2', 'C', 20, 'N'); -- the common line attributes... insert into CHKDB_RULE -- country null? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN) values ('OIL_GAS_SEIS_INV', 'SEIS_LINE_BASIC', 'CHKDB_OGSI_SEIS_LINE', 'COUNTRY_NULL', 3, 'country is not set', 'COUNTRY', 'C', 'Y'); insert into CHKDB_RULE -- (country too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'SEIS_LINE_BASIC', 'CHKDB_OGSI_SEIS_LINE', 'COUNTRY_LONG', 2, 'country is too long', 'COUNTRY', 'C', 20, 'N'); insert into CHKDB_RULE -- prov_state null? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN) values ('OIL_GAS_SEIS_INV', 'SEIS_LINE_BASIC', 'CHKDB_OGSI_SEIS_LINE', 'PROV_STATE_NULL', 3, 'prov_state is not set', 'PROV_STATE', 'C', 'Y'); insert into CHKDB_RULE -- (prov_state too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'SEIS_LINE_BASIC', 'CHKDB_OGSI_SEIS_LINE', 'PROV_STATE_LONG', 2, 'prov_state is too long', 'PROV_STATE', 'C', 20, 'N'); insert into CHKDB_RULE -- (county null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'SEIS_LINE_BASIC', 'CHKDB_OGSI_SEIS_LINE', 'COUNTY_NULL', 3, 'county is not set', 'COUNTY', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (county too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'SEIS_LINE_BASIC', 'CHKDB_OGSI_SEIS_LINE', 'COUNTY_LONG', 2, 'county is too long', 'COUNTY', 'C', 20, 'N'); insert into CHKDB_RULE -- (district null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'SEIS_LINE_BASIC', 'CHKDB_OGSI_SEIS_LINE', 'DISTRICT_NULL', 3, 'district is not set', 'DISTRICT', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (district too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'SEIS_LINE_BASIC', 'CHKDB_OGSI_SEIS_LINE', 'DISTRICT_LONG', 2, 'district is too long', 'DISTRICT', 'C', 20, 'N'); insert into CHKDB_RULE -- (region null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'SEIS_LINE_BASIC', 'CHKDB_OGSI_SEIS_LINE', 'REGION_NULL', 3, 'region is not set', 'REGION', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (region too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'SEIS_LINE_BASIC', 'CHKDB_OGSI_SEIS_LINE', 'REGION_LONG', 2, 'region is too long', 'REGION', 'C', 20, 'N'); insert into CHKDB_RULE -- (area null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'SEIS_LINE_BASIC', 'CHKDB_OGSI_SEIS_LINE', 'AREA_NULL', 3, 'area is not set', 'AREA', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (area too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'SEIS_LINE_BASIC', 'CHKDB_OGSI_SEIS_LINE', 'AREA_LONG', 2, 'area is too long', 'AREA', 'C', 20, 'N'); insert into CHKDB_RULE -- (prospect null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'SEIS_LINE_BASIC', 'CHKDB_OGSI_SEIS_LINE', 'PROSPECT_NULL', 3, 'prospect is not set', 'PROSPECT', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (prospect too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'SEIS_LINE_BASIC', 'CHKDB_OGSI_SEIS_LINE', 'PROSPECT_LONG', 2, 'prospect is too long', 'PROSPECT', 'C', 20, 'N'); insert into CHKDB_RULE -- (survey null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'SEIS_LINE_BASIC', 'CHKDB_OGSI_SEIS_LINE', 'SURVEY_NULL', 3, 'survey is not set', 'SURVEY', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (survey too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'SEIS_LINE_BASIC', 'CHKDB_OGSI_SEIS_LINE', 'SURVEY_LONG', 2, 'survey is too long', 'SURVEY', 'C', 20, 'N'); insert into CHKDB_RULE -- line_length bad? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MIN_VALUE, MAX_VALUE) values ('OIL_GAS_SEIS_INV', 'SEIS_LINE_BASIC', 'CHKDB_OGSI_SEIS_LINE', 'LINE_LENGTH_BAD', 3, 'line_length is invalid', 'LINE_LENGTH', 'N', '0.01', '100000.00'); insert into CHKDB_RULE -- (line_length null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'SEIS_LINE_BASIC', 'CHKDB_OGSI_SEIS_LINE', 'LINE_LENGTH_NULL', 3, 'line_length is not set', 'LINE_LENGTH', 'N', 'Y', 'N'); insert into CHKDB_RULE -- (line_length_units null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'SEIS_LINE_BASIC', 'CHKDB_OGSI_SEIS_LINE', 'LINE_LEN_UNITS_NULL', 3, 'line_length_units is not set', 'LINE_LENGTH_UNITS', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (line_length_units too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'SEIS_LINE_BASIC', 'CHKDB_OGSI_SEIS_LINE', 'LINE_LEN_UNITS_LONG', 2, 'line_length_units is too long', 'LINE_LENGTH_UNITS', 'C', 20, 'N'); insert into CHKDB_RULE -- first_shot_point null? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'SEIS_LINE_BASIC', 'CHKDB_OGSI_SEIS_LINE', 'FIRST_SP_NULL', 4, 'first_shot_point is not set', 'FIRST_SHOT_POINT', 'C', 'Y', 'Y'); insert into CHKDB_RULE -- (first_shot_point too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'SEIS_LINE_BASIC', 'CHKDB_OGSI_SEIS_LINE', 'FIRST_SP_LONG', 2, 'first_shot_point is too long', 'FIRST_SHOT_POINT', 'C', 10, 'N'); insert into CHKDB_RULE -- last_shot_point null? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'SEIS_LINE_BASIC', 'CHKDB_OGSI_SEIS_LINE', 'LAST_SP_NULL', 4, 'last_shot_point is not set', 'LAST_SHOT_POINT', 'C', 'Y', 'Y'); insert into CHKDB_RULE -- (last_shot_point too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'SEIS_LINE_BASIC', 'CHKDB_OGSI_SEIS_LINE', 'LAST_SP_LONG', 2, 'last_shot_point is too long', 'LAST_SHOT_POINT', 'C', 10, 'N'); insert into CHKDB_RULE -- first sp same as last sp? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, COLUMN_2_NAME, COL_NOT_NE_COL2_YN) values ('OIL_GAS_SEIS_INV', 'SEIS_LINE_BASIC', 'CHKDB_OGSI_SEIS_LINE', 'FIRST_LAST_SP_SAME', 4, 'first and last shotpoints are the same', 'FIRST_SHOT_POINT', 'C', 'LAST_SHOT_POINT', 'Y'); insert into CHKDB_RULE -- (first_rec_num null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'SEIS_LINE_BASIC', 'CHKDB_OGSI_SEIS_LINE', 'FIRST_REC_NUM_NULL', 3, 'first_rec_num is not set', 'FIRST_REC_NUM', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (first_rec_num too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'SEIS_LINE_BASIC', 'CHKDB_OGSI_SEIS_LINE', 'FIRST_REC_NUM_LONG', 2, 'first_rec_num is too long', 'FIRST_REC_NUM', 'C', 10, 'N'); insert into CHKDB_RULE -- (last_rec_num null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'SEIS_LINE_BASIC', 'CHKDB_OGSI_SEIS_LINE', 'LAST_REC_NUM_NULL', 3, 'last_rec_num is not set', 'LAST_REC_NUM', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (last_rec_num too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'SEIS_LINE_BASIC', 'CHKDB_OGSI_SEIS_LINE', 'LAST_REC_NUM_LONG', 2, 'last_rec_num is too long', 'LAST_REC_NUM', 'C', 10, 'N'); insert into CHKDB_RULE -- (first_nline_num null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'SEIS_LINE_BASIC', 'CHKDB_OGSI_SEIS_LINE', 'FIRST_NLINE_NUM_NULL', 3, 'first_nline_num is not set', 'FIRST_NLINE_NUM', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (last_nline_num null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'SEIS_LINE_BASIC', 'CHKDB_OGSI_SEIS_LINE', 'LAST_NLINE_NUM_NULL', 3, 'last_nline_num is not set', 'LAST_NLINE_NUM', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (first_xline_num null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'SEIS_LINE_BASIC', 'CHKDB_OGSI_SEIS_LINE', 'FIRST_XLINE_NUM_NULL', 3, 'first_xline_num is not set', 'FIRST_XLINE_NUM', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (last_xline_num null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'SEIS_LINE_BASIC', 'CHKDB_OGSI_SEIS_LINE', 'LAST_XLINE_NUM_NULL', 3, 'last_xline_num is not set', 'LAST_XLINE_NUM', 'C', 'Y', 'N'); insert into CHKDB_RULE -- min_latitude bad? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MIN_VALUE, MAX_VALUE) values ('OIL_GAS_SEIS_INV', 'SEIS_LINE_BASIC', 'CHKDB_OGSI_SEIS_LINE', 'MIN_LATITUDE_BAD', 4, 'min_latitude is invalid', 'MIN_LATITUDE', 'N', '-90.00', '90.00'); insert into CHKDB_RULE -- (min_latitude null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'SEIS_LINE_BASIC', 'CHKDB_OGSI_SEIS_LINE', 'MIN_LATITUDE_NULL', 3, 'min_latitude is not set', 'MIN_LATITUDE', 'N', 'Y', 'N'); insert into CHKDB_RULE -- max_latitude bad? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MIN_VALUE, MAX_VALUE) values ('OIL_GAS_SEIS_INV', 'SEIS_LINE_BASIC', 'CHKDB_OGSI_SEIS_LINE', 'MAX_LATITUDE_BAD', 4, 'max_latitude is invalid', 'MAX_LATITUDE', 'N', '-90.00', '90.00'); insert into CHKDB_RULE -- (max_latitude null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'SEIS_LINE_BASIC', 'CHKDB_OGSI_SEIS_LINE', 'MAX_LATITUDE_NULL', 3, 'max_latitude is not set', 'MAX_LATITUDE', 'N', 'Y', 'N'); insert into CHKDB_RULE -- min_longitude bad? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MIN_VALUE, MAX_VALUE) values ('OIL_GAS_SEIS_INV', 'SEIS_LINE_BASIC', 'CHKDB_OGSI_SEIS_LINE', 'MIN_LONGITUDE_BAD', 4, 'min_longitude is invalid', 'MIN_LONGITUDE', 'N', '-90.00', '90.00'); insert into CHKDB_RULE -- (min_longitude null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'SEIS_LINE_BASIC', 'CHKDB_OGSI_SEIS_LINE', 'MIN_LONGITUDE_NULL', 3, 'min_longitude is not set', 'MIN_LONGITUDE', 'N', 'Y', 'N'); insert into CHKDB_RULE -- max_longitude bad? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MIN_VALUE, MAX_VALUE) values ('OIL_GAS_SEIS_INV', 'SEIS_LINE_BASIC', 'CHKDB_OGSI_SEIS_LINE', 'MAX_LONGITUDE_BAD', 4, 'max_longitude is invalid', 'MAX_LONGITUDE', 'N', '-90.00', '90.00'); insert into CHKDB_RULE -- (max_longitude null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'SEIS_LINE_BASIC', 'CHKDB_OGSI_SEIS_LINE', 'MAX_LONGITUDE_NULL', 3, 'max_longitude is not set', 'MAX_LONGITUDE', 'N', 'Y', 'N'); -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- Define the PHYS_ITEM_BASIC rule-set. delete CHKDB_RULESET where DATA_DOMAIN = 'OIL_GAS_SEIS_INV' and RULESET_ID = 'PHYS_ITEM_BASIC'; delete CHKDB_RULE where DATA_DOMAIN = 'OIL_GAS_SEIS_INV' and RULESET_ID = 'PHYS_ITEM_BASIC'; insert into CHKDB_RULESET (DATA_DOMAIN, RULESET_ID, DESCRIPTION) values ('OIL_GAS_SEIS_INV', 'PHYS_ITEM_BASIC', 'Check of data in the CHKDB_OGSI_PHYS_ITEM table'); -- = = = = = = = = = = = = = = = = = = = = = = = -- Rules for the CHKDB_OGSI_PHYS_ITEM table insert into CHKDB_RULE -- (phys_item_id too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'PHYS_ITEM_BASIC', 'CHKDB_OGSI_PHYS_ITEM', 'PHYS_ITEM_ID_LONG', 2, 'phys_item_id is too long', 'PHYS_ITEM_ID', 'C', 20, 'N'); insert into CHKDB_RULE -- active_yn bad? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, IN_LIST) values ('OIL_GAS_SEIS_INV', 'PHYS_ITEM_BASIC', 'CHKDB_OGSI_PHYS_ITEM', 'ACTIVE_YN_BAD', 4, 'ACTIVE_YN is not Y or N', 'ACTIVE_YN', 'C', 'Y,N'); insert into CHKDB_RULE -- (effective_date null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'PHYS_ITEM_BASIC', 'CHKDB_OGSI_PHYS_ITEM', 'EFFECTIVE_DATE_NULL', 3, 'effective_date is not set', 'EFFECTIVE_DATE', 'D', 'Y', 'N'); insert into CHKDB_RULE -- (expiry_date null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'PHYS_ITEM_BASIC', 'CHKDB_OGSI_PHYS_ITEM', 'EXPIRY_DATE_NULL', 3, 'expiry_date is not set', 'EXPIRY_DATE', 'D', 'Y', 'N'); insert into CHKDB_RULE -- expiry_ before effective_date? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, COLUMN_2_NAME, COL_NOT_LT_COL2_YN) values ('OIL_GAS_SEIS_INV', 'PHYS_ITEM_BASIC', 'CHKDB_OGSI_PHYS_ITEM', 'EXPIRY_LT_EFFECTIVE', 3, 'expiry_date before effective_date', 'EXPIRY_DATE', 'D', 'EFFECTIVE_DATE', 'Y'); insert into CHKDB_RULE -- (numeric_id null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'PHYS_ITEM_BASIC', 'CHKDB_OGSI_PHYS_ITEM', 'NUMERIC_ID_NULL', 3, 'numeric_id is not set', 'NUMERIC_ID', 'N', 'Y', 'N'); insert into CHKDB_RULE -- item_type null? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'PHYS_ITEM_BASIC', 'CHKDB_OGSI_PHYS_ITEM', 'ITEM_TYPE_NULL', 3, 'item_type is not set', 'ITEM_TYPE', 'C', 'Y', 'Y'); insert into CHKDB_RULE -- (item_type too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'PHYS_ITEM_BASIC', 'CHKDB_OGSI_PHYS_ITEM', 'ITEM_TYPE_LONG', 2, 'item_type is too long', 'ITEM_TYPE', 'C', 20, 'N'); insert into CHKDB_RULE -- (item_size null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'PHYS_ITEM_BASIC', 'CHKDB_OGSI_PHYS_ITEM', 'ITEM_SIZE_NULL', 2, 'item_size is not set', 'ITEM_SIZE', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (item_size not num?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, IS_A_NUMBER_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'PHYS_ITEM_BASIC', 'CHKDB_OGSI_PHYS_ITEM', 'ITEM_SIZE_NOT_NUM', 2, 'item_size is not a number', 'ITEM_SIZE', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (item_size_units null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'PHYS_ITEM_BASIC', 'CHKDB_OGSI_PHYS_ITEM', 'ITEM_SIZE_UNITS_NULL', 3, 'item_size_units is not set', 'ITEM_SIZE_UNITS', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (item_size_units too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'PHYS_ITEM_BASIC', 'CHKDB_OGSI_PHYS_ITEM', 'ITEM_SIZE_UNITS_LONG', 2, 'item_size_units is too long', 'ITEM_SIZE_UNITS', 'C', 20, 'N'); insert into CHKDB_RULE -- (item_density null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'PHYS_ITEM_BASIC', 'CHKDB_OGSI_PHYS_ITEM', 'ITEM_DENSITY_NULL', 2, 'item_density is not set', 'ITEM_DENSITY', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (item_density not num?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, IS_A_NUMBER_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'PHYS_ITEM_BASIC', 'CHKDB_OGSI_PHYS_ITEM', 'ITEM_DENSITY_NOT_NUM', 2, 'item_density is not a number', 'ITEM_DENSITY', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (item_name null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'PHYS_ITEM_BASIC', 'CHKDB_OGSI_PHYS_ITEM', 'ITEM_NAME_NULL', 3, 'item_name is not set', 'ITEM_NAME', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (item_name too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'PHYS_ITEM_BASIC', 'CHKDB_OGSI_PHYS_ITEM', 'ITEM_NAME_LONG', 2, 'item_name is too long', 'ITEM_NAME', 'C', 20, 'N'); insert into CHKDB_RULE -- (lable1 null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'PHYS_ITEM_BASIC', 'CHKDB_OGSI_PHYS_ITEM', 'LABEL1_NULL', 3, 'lable1 is not set', 'LABEL1', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (lable1 too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'PHYS_ITEM_BASIC', 'CHKDB_OGSI_PHYS_ITEM', 'LABEL1_LONG', 2, 'lable1 is too long', 'LABEL1', 'C', 20, 'N'); insert into CHKDB_RULE -- (lable2 null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'PHYS_ITEM_BASIC', 'CHKDB_OGSI_PHYS_ITEM', 'LABEL2_NULL', 3, 'lable2 is not set', 'LABEL2', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (lable2 too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'PHYS_ITEM_BASIC', 'CHKDB_OGSI_PHYS_ITEM', 'LABEL2_LONG', 2, 'lable2 is too long', 'LABEL2', 'C', 20, 'N'); insert into CHKDB_RULE -- (lable3 null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'PHYS_ITEM_BASIC', 'CHKDB_OGSI_PHYS_ITEM', 'LABEL3_NULL', 3, 'lable3 is not set', 'LABEL3', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (lable3 too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'PHYS_ITEM_BASIC', 'CHKDB_OGSI_PHYS_ITEM', 'LABEL3_LONG', 2, 'lable3 is too long', 'LABEL3', 'C', 20, 'N'); insert into CHKDB_RULE -- (phys_item_status null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'PHYS_ITEM_BASIC', 'CHKDB_OGSI_PHYS_ITEM', 'PHYS_ITEM_STAT_NULL', 3, 'phys_item_status is not set', 'PHYS_ITEM_STATUS', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (phys_item_status too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'PHYS_ITEM_BASIC', 'CHKDB_OGSI_PHYS_ITEM', 'PHYS_ITEM_STAT_LONG', 2, 'phys_item_status is too long', 'PHYS_ITEM_STATUS', 'C', 20, 'N'); insert into CHKDB_RULE -- (store_id null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'PHYS_ITEM_BASIC', 'CHKDB_OGSI_PHYS_ITEM', 'STORE_ID_NULL', 5, 'store_id is not set', 'STORE_ID', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (store_id too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'PHYS_ITEM_BASIC', 'CHKDB_OGSI_PHYS_ITEM', 'STORE_ID_LONG', 4, 'store_id is too long', 'STORE_ID', 'C', 20, 'N'); insert into CHKDB_RULE -- (box_id null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'PHYS_ITEM_BASIC', 'CHKDB_OGSI_PHYS_ITEM', 'BOX_ID_NULL', 5, 'box_id is not set', 'BOX_ID', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (box_id too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'PHYS_ITEM_BASIC', 'CHKDB_OGSI_PHYS_ITEM', 'BOX_ID_LONG', 2, 'BOX_id is too long', 'BOX_ID', 'C', 20, 'N'); insert into CHKDB_RULE -- (create_date bad?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MIN_VALUE, NOT_AFTER_TODAY_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'PHYS_ITEM_BASIC', 'CHKDB_OGSI_PHYS_ITEM', 'CREATE_DATE_BAD', 4, 'create_date is before 1940 or after today', 'CREATE_DATE', 'D', '1940-01-01', 'Y', 'N'); insert into CHKDB_RULE -- (create_date null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'PHYS_ITEM_BASIC', 'CHKDB_OGSI_PHYS_ITEM', 'CREATE_DATE_NULL', 3, 'create_date is not set', 'CREATE_DATE', 'D', 'Y', 'N'); -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- Define the DATA_STORE_BASIC rule-set. delete CHKDB_RULESET where DATA_DOMAIN = 'OIL_GAS_SEIS_INV' and RULESET_ID = 'DATA_STORE_BASIC'; delete CHKDB_RULE where DATA_DOMAIN = 'OIL_GAS_SEIS_INV' and RULESET_ID = 'DATA_STORE_BASIC'; insert into CHKDB_RULESET (DATA_DOMAIN, RULESET_ID, DESCRIPTION) values ('OIL_GAS_SEIS_INV', 'DATA_STORE_BASIC', 'Check of data in the CHKDB_OGSI_DATA_STORE table'); -- = = = = = = = = = = = = = = = = = = = = = = = -- Rules for the CHKDB_OGSI_DATA_STORE table insert into CHKDB_RULE -- (store_id too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'DATA_STORE_BASIC', 'CHKDB_OGSI_DATA_STORE', 'STORE_ID_LONG', 2, 'store_id is too long', 'STORE_ID', 'C', 20, 'N'); insert into CHKDB_RULE -- active_yn bad? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, IN_LIST) values ('OIL_GAS_SEIS_INV', 'DATA_STORE_BASIC', 'CHKDB_OGSI_DATA_STORE', 'ACTIVE_YN_BAD', 4, 'ACTIVE_YN is not Y or N', 'ACTIVE_YN', 'C', 'Y,N'); insert into CHKDB_RULE -- (effective_date null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'DATA_STORE_BASIC', 'CHKDB_OGSI_DATA_STORE', 'EFFECTIVE_DATE_NULL', 3, 'effective_date is not set', 'EFFECTIVE_DATE', 'D', 'Y', 'N'); insert into CHKDB_RULE -- (expiry_date null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'DATA_STORE_BASIC', 'CHKDB_OGSI_DATA_STORE', 'EXPIRY_DATE_NULL', 3, 'expiry_date is not set', 'EXPIRY_DATE', 'D', 'Y', 'N'); insert into CHKDB_RULE -- expiry_ before effective_date? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, COLUMN_2_NAME, COL_NOT_LT_COL2_YN) values ('OIL_GAS_SEIS_INV', 'DATA_STORE_BASIC', 'CHKDB_OGSI_DATA_STORE', 'EXPIRY_LT_EFFECTIVE', 3, 'expiry_date before effective_date', 'EXPIRY_DATE', 'D', 'EFFECTIVE_DATE', 'Y'); insert into CHKDB_RULE -- (numeric_id null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'DATA_STORE_BASIC', 'CHKDB_OGSI_DATA_STORE', 'NUMERIC_ID_NULL', 3, 'numeric_id is not set', 'NUMERIC_ID', 'N', 'Y', 'N'); insert into CHKDB_RULE -- contained_by_store_id not exist? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, FOREIGN_KEY_LIST, REF_DATA_DOMAIN, REF_TABLE_NAME, REF_KEY_LIST, FK_NOT_ORPHAN_YN) values ('OIL_GAS_SEIS_INV', 'DATA_STORE_BASIC', 'CHKDB_OGSI_DATA_STORE', 'CONTAINED_BY_ID_NOT', 4, 'contained_by_store_id does not exist', 'CONTAINED_BY_STORE_ID', 'OIL_GAS_SEIS_INV', 'CHKDB_OGSI_DATA_STORE', 'STORE_ID', 'Y'); insert into CHKDB_RULE -- (contained_by_store_id too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'DATA_STORE_BASIC', 'CHKDB_OGSI_DATA_STORE', 'CONTAINED_BY_ID_LONG', 2, 'contained_by_store_id is too long', 'CONTAINED_BY_STORE_ID', 'C', 20, 'N'); insert into CHKDB_RULE -- data_store_type null? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'DATA_STORE_BASIC', 'CHKDB_OGSI_DATA_STORE', 'DATA_STORE_TYPE_NULL', 3, 'data_store_type is not set', 'DATA_STORE_TYPE', 'C', 'Y', 'Y'); insert into CHKDB_RULE -- (data_store_type too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'DATA_STORE_BASIC', 'CHKDB_OGSI_DATA_STORE', 'DATA_STORE_TYPE_LONG', 2, 'data_store_type is too long', 'DATA_STORE_TYPE', 'C', 20, 'N'); insert into CHKDB_RULE -- (data_store_status null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'DATA_STORE_BASIC', 'CHKDB_OGSI_DATA_STORE', 'DATA_STORE_STAT_NULL', 3, 'data_store_status is not set', 'DATA_STORE_STATUS', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (data_store_status too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'DATA_STORE_BASIC', 'CHKDB_OGSI_DATA_STORE', 'DATA_STORE_STAT_LONG', 2, 'data_store_status is too long', 'DATA_STORE_STATUS', 'C', 20, 'N'); insert into CHKDB_RULE -- (location null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'DATA_STORE_BASIC', 'CHKDB_OGSI_DATA_STORE', 'LOCATION_NULL', 3, 'location is not set', 'LOCATION', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (location too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'DATA_STORE_BASIC', 'CHKDB_OGSI_DATA_STORE', 'LOCATION_LONG', 2, 'location is too long', 'LOCATION', 'C', 20, 'N'); insert into CHKDB_RULE -- (store_name null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'DATA_STORE_BASIC', 'CHKDB_OGSI_DATA_STORE', 'STORE_NAME_NULL', 3, 'store_name is not set', 'STORE_NAME', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (store_name too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'DATA_STORE_BASIC', 'CHKDB_OGSI_DATA_STORE', 'STORE_NAME_LONG', 2, 'store_name is too long', 'STORE_NAME', 'C', 20, 'N'); insert into CHKDB_RULE -- (store_name2 null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'DATA_STORE_BASIC', 'CHKDB_OGSI_DATA_STORE', 'STORE_NAME2_NULL', 3, 'store_name2 is not set', 'STORE_NAME2', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (store_name2 too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'DATA_STORE_BASIC', 'CHKDB_OGSI_DATA_STORE', 'STORE_NAME2_LONG', 2, 'store_name2 is too long', 'STORE_NAME2', 'C', 20, 'N'); insert into CHKDB_RULE -- (store_barcode null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'DATA_STORE_BASIC', 'CHKDB_OGSI_DATA_STORE', 'STORE_BARCODE_NULL', 3, 'store_barcode is not set', 'STORE_BARCODE', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (store_barcode too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'DATA_STORE_BASIC', 'CHKDB_OGSI_DATA_STORE', 'STORE_BARCODE_LONG', 2, 'store_barcode is too long', 'STORE_BARCODE', 'C', 20, 'N'); insert into CHKDB_RULE -- (store_desc null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'DATA_STORE_BASIC', 'CHKDB_OGSI_DATA_STORE', 'STORE_DESC_NULL', 3, 'store_desc is not set', 'STORE_DESC', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (store_desc too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'DATA_STORE_BASIC', 'CHKDB_OGSI_DATA_STORE', 'STORE_DESC_LONG', 2, 'store_desc is too long', 'STORE_DESC', 'C', 20, 'N'); -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- Define the INFO_LINE_BASIC rule-set. delete CHKDB_RULESET where DATA_DOMAIN = 'OIL_GAS_SEIS_INV' and RULESET_ID = 'INFO_LINE_BASIC'; delete CHKDB_RULE where DATA_DOMAIN = 'OIL_GAS_SEIS_INV' and RULESET_ID = 'INFO_LINE_BASIC'; insert into CHKDB_RULESET (DATA_DOMAIN, RULESET_ID, DESCRIPTION) values ('OIL_GAS_SEIS_INV', 'INFO_LINE_BASIC', 'Check of data in the CHKDB_OGSI_INFO_LINE table'); -- = = = = = = = = = = = = = = = = = = = = = = = -- Rules for the CHKDB_OGSI_INFO_LINE table insert into CHKDB_RULE -- info_item_id not exist? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, FOREIGN_KEY_LIST, REF_DATA_DOMAIN, REF_TABLE_NAME, REF_KEY_LIST, FK_NOT_ORPHAN_YN, FK_NOT_NULL_YN) values ('OIL_GAS_SEIS_INV', 'INFO_LINE_BASIC', 'CHKDB_OGSI_INFO_LINE', 'INFO_ITEM_ID_NOT', 5, 'info_item_id does not exist', 'INFO_ITEM_ID', 'OIL_GAS_SEIS_INV', 'CHKDB_OGSI_INFO_ITEM', 'INFO_ITEM_ID', 'Y', 'Y'); insert into CHKDB_RULE -- (info_item_id too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_LINE_BASIC', 'CHKDB_OGSI_INFO_LINE', 'INFO_ITEM_ID_LONG', 2, 'info_item_id is too long', 'INFO_ITEM_ID', 'C', 20, 'N'); insert into CHKDB_RULE -- seis_line_id not exist? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, FOREIGN_KEY_LIST, REF_DATA_DOMAIN, REF_TABLE_NAME, REF_KEY_LIST, FK_NOT_ORPHAN_YN, FK_NOT_NULL_YN) values ('OIL_GAS_SEIS_INV', 'INFO_LINE_BASIC', 'CHKDB_OGSI_INFO_LINE', 'SEIS_LINE_ID_NOT', 5, 'seis_line_id does not exist', 'SEIS_LINE_ID', 'OIL_GAS_SEIS_INV', 'CHKDB_OGSI_SEIS_LINE', 'SEIS_LINE_ID', 'Y', 'Y'); insert into CHKDB_RULE -- (seis_line_id too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_LINE_BASIC', 'CHKDB_OGSI_INFO_LINE', 'SEIS_LINE_ID_LONG', 2, 'seis_line_id is too long', 'SEIS_LINE_ID', 'C', 20, 'N'); insert into CHKDB_RULE -- info_line_uniq null? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_LINE_BASIC', 'CHKDB_OGSI_INFO_LINE', 'INFO_LINE_UNIQ_NULL', 5, 'info_line_uniq is not set', 'INFO_LINE_UNIQ', 'C', 'Y', 'Y'); insert into CHKDB_RULE -- (info_line_uniq too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_LINE_BASIC', 'CHKDB_OGSI_INFO_LINE', 'INFO_LINE_UNIQ_LONG', 2, 'info_line_uniq is too long', 'INFO_LINE_UNIQ', 'C', 20, 'N'); insert into CHKDB_RULE -- active_yn bad? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, IN_LIST) values ('OIL_GAS_SEIS_INV', 'INFO_LINE_BASIC', 'CHKDB_OGSI_INFO_LINE', 'ACTIVE_YN_BAD', 4, 'ACTIVE_YN is not Y or N', 'ACTIVE_YN', 'C', 'Y,N'); insert into CHKDB_RULE -- (effective_date null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_LINE_BASIC', 'CHKDB_OGSI_INFO_LINE', 'EFFECTIVE_DATE_NULL', 3, 'effective_date is not set', 'EFFECTIVE_DATE', 'D', 'Y', 'N'); insert into CHKDB_RULE -- (expiry_date null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_LINE_BASIC', 'CHKDB_OGSI_INFO_LINE', 'EXPIRY_DATE_NULL', 3, 'expiry_date is not set', 'EXPIRY_DATE', 'D', 'Y', 'N'); insert into CHKDB_RULE -- expiry_ before effective_date? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, COLUMN_2_NAME, COL_NOT_LT_COL2_YN) values ('OIL_GAS_SEIS_INV', 'INFO_LINE_BASIC', 'CHKDB_OGSI_INFO_LINE', 'EXPIRY_LT_EFFECTIVE', 3, 'expiry_date before effective_date', 'EXPIRY_DATE', 'D', 'EFFECTIVE_DATE', 'Y'); -- the common line attributes... insert into CHKDB_RULE -- (country null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_LINE_BASIC', 'CHKDB_OGSI_INFO_LINE', 'COUNTRY_NULL', 3, 'country is not set', 'COUNTRY', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (country too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_LINE_BASIC', 'CHKDB_OGSI_INFO_LINE', 'COUNTRY_LONG', 2, 'country is too long', 'COUNTRY', 'C', 20, 'N'); insert into CHKDB_RULE -- (prov_state null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_LINE_BASIC', 'CHKDB_OGSI_INFO_LINE', 'PROV_STATE_NULL', 3, 'prov_state is not set', 'PROV_STATE', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (prov_state too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_LINE_BASIC', 'CHKDB_OGSI_INFO_LINE', 'PROV_STATE_LONG', 2, 'prov_state is too long', 'PROV_STATE', 'C', 20, 'N'); insert into CHKDB_RULE -- (county null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_LINE_BASIC', 'CHKDB_OGSI_INFO_LINE', 'COUNTY_NULL', 3, 'county is not set', 'COUNTY', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (county too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_LINE_BASIC', 'CHKDB_OGSI_INFO_LINE', 'COUNTY_LONG', 2, 'county is too long', 'COUNTY', 'C', 20, 'N'); insert into CHKDB_RULE -- (district null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_LINE_BASIC', 'CHKDB_OGSI_INFO_LINE', 'DISTRICT_NULL', 3, 'district is not set', 'DISTRICT', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (district too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_LINE_BASIC', 'CHKDB_OGSI_INFO_LINE', 'DISTRICT_LONG', 2, 'district is too long', 'DISTRICT', 'C', 20, 'N'); insert into CHKDB_RULE -- (region null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_LINE_BASIC', 'CHKDB_OGSI_INFO_LINE', 'REGION_NULL', 3, 'region is not set', 'REGION', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (region too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_LINE_BASIC', 'CHKDB_OGSI_INFO_LINE', 'REGION_LONG', 2, 'region is too long', 'REGION', 'C', 20, 'N'); insert into CHKDB_RULE -- (area null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_LINE_BASIC', 'CHKDB_OGSI_INFO_LINE', 'AREA_NULL', 3, 'area is not set', 'AREA', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (area too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_LINE_BASIC', 'CHKDB_OGSI_INFO_LINE', 'AREA_LONG', 2, 'area is too long', 'AREA', 'C', 20, 'N'); insert into CHKDB_RULE -- (prospect null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_LINE_BASIC', 'CHKDB_OGSI_INFO_LINE', 'PROSPECT_NULL', 3, 'prospect is not set', 'PROSPECT', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (prospect too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_LINE_BASIC', 'CHKDB_OGSI_INFO_LINE', 'PROSPECT_LONG', 2, 'prospect is too long', 'PROSPECT', 'C', 20, 'N'); insert into CHKDB_RULE -- (survey null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_LINE_BASIC', 'CHKDB_OGSI_INFO_LINE', 'SURVEY_NULL', 3, 'survey is not set', 'SURVEY', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (survey too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_LINE_BASIC', 'CHKDB_OGSI_INFO_LINE', 'SURVEY_LONG', 2, 'survey is too long', 'SURVEY', 'C', 20, 'N'); insert into CHKDB_RULE -- line_length bad? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MIN_VALUE, MAX_VALUE) values ('OIL_GAS_SEIS_INV', 'INFO_LINE_BASIC', 'CHKDB_OGSI_INFO_LINE', 'LINE_LENGTH_BAD', 3, 'line_length is invalid', 'LINE_LENGTH', 'N', '0.01', '100000.00'); insert into CHKDB_RULE -- (line_length null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_LINE_BASIC', 'CHKDB_OGSI_INFO_LINE', 'LINE_LENGTH_NULL', 3, 'line_length is not set', 'LINE_LENGTH', 'N', 'Y', 'N'); insert into CHKDB_RULE -- (line_length_units null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_LINE_BASIC', 'CHKDB_OGSI_INFO_LINE', 'LINE_LEN_UNITS_NULL', 3, 'line_length_units is not set', 'LINE_LENGTH_UNITS', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (line_length_units too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_LINE_BASIC', 'CHKDB_OGSI_INFO_LINE', 'LINE_LEN_UNITS_LONG', 2, 'line_length_units is too long', 'LINE_LENGTH_UNITS', 'C', 20, 'N'); insert into CHKDB_RULE -- (first_shot_point null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_LINE_BASIC', 'CHKDB_OGSI_INFO_LINE', 'FIRST_SP_NULL', 4, 'first_shot_point is not set', 'FIRST_SHOT_POINT', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (first_shot_point too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_LINE_BASIC', 'CHKDB_OGSI_INFO_LINE', 'FIRST_SP_LONG', 2, 'first_shot_point is too long', 'FIRST_SHOT_POINT', 'C', 10, 'N'); insert into CHKDB_RULE -- last_shot_point null? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_LINE_BASIC', 'CHKDB_OGSI_INFO_LINE', 'LAST_SP_NULL', 4, 'last_shot_point is not set', 'LAST_SHOT_POINT', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (last_shot_point too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_LINE_BASIC', 'CHKDB_OGSI_INFO_LINE', 'LAST_SP_LONG', 2, 'last_shot_point is too long', 'LAST_SHOT_POINT', 'C', 10, 'N'); insert into CHKDB_RULE -- first sp same as last sp? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, COLUMN_2_NAME, COL_NOT_NE_COL2_YN) values ('OIL_GAS_SEIS_INV', 'INFO_LINE_BASIC', 'CHKDB_OGSI_INFO_LINE', 'FIRST_LAST_SP_SAME', 4, 'first and last shotpoints are the same', 'FIRST_SHOT_POINT', 'C', 'LAST_SHOT_POINT', 'Y'); insert into CHKDB_RULE -- (first_rec_num null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_LINE_BASIC', 'CHKDB_OGSI_INFO_LINE', 'FIRST_REC_NUM_NULL', 3, 'first_rec_num is not set', 'FIRST_REC_NUM', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (first_rec_num too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_LINE_BASIC', 'CHKDB_OGSI_INFO_LINE', 'FIRST_REC_NUM_LONG', 2, 'first_rec_num is too long', 'FIRST_REC_NUM', 'C', 10, 'N'); insert into CHKDB_RULE -- (last_rec_num null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_LINE_BASIC', 'CHKDB_OGSI_INFO_LINE', 'LAST_REC_NUM_NULL', 3, 'last_rec_num is not set', 'LAST_REC_NUM', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (last_rec_num too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_LINE_BASIC', 'CHKDB_OGSI_INFO_LINE', 'LAST_REC_NUM_LONG', 2, 'last_rec_num is too long', 'LAST_REC_NUM', 'C', 10, 'N'); insert into CHKDB_RULE -- (first_nline_num null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_LINE_BASIC', 'CHKDB_OGSI_INFO_LINE', 'FIRST_NLINE_NUM_NULL', 3, 'first_nline_num is not set', 'FIRST_NLINE_NUM', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (last_nline_num null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_LINE_BASIC', 'CHKDB_OGSI_INFO_LINE', 'LAST_NLINE_NUM_NULL', 3, 'last_nline_num is not set', 'LAST_NLINE_NUM', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (first_xline_num null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_LINE_BASIC', 'CHKDB_OGSI_INFO_LINE', 'FIRST_XLINE_NUM_NULL', 3, 'first_xline_num is not set', 'FIRST_XLINE_NUM', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (last_xline_num null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_LINE_BASIC', 'CHKDB_OGSI_INFO_LINE', 'LAST_XLINE_NUM_NULL', 3, 'last_xline_num is not set', 'LAST_XLINE_NUM', 'C', 'Y', 'N'); insert into CHKDB_RULE -- min_latitude bad? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MIN_VALUE, MAX_VALUE) values ('OIL_GAS_SEIS_INV', 'INFO_LINE_BASIC', 'CHKDB_OGSI_INFO_LINE', 'MIN_LATITUDE_BAD', 4, 'min_latitude is invalid', 'MIN_LATITUDE', 'N', '-90.00', '90.00'); insert into CHKDB_RULE -- (min_latitude null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_LINE_BASIC', 'CHKDB_OGSI_INFO_LINE', 'MIN_LATITUDE_NULL', 3, 'min_latitude is not set', 'MIN_LATITUDE', 'N', 'Y', 'N'); insert into CHKDB_RULE -- max_latitude bad? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MIN_VALUE, MAX_VALUE) values ('OIL_GAS_SEIS_INV', 'INFO_LINE_BASIC', 'CHKDB_OGSI_INFO_LINE', 'MAX_LATITUDE_BAD', 4, 'max_latitude is invalid', 'MAX_LATITUDE', 'N', '-90.00', '90.00'); insert into CHKDB_RULE -- (max_latitude null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_LINE_BASIC', 'CHKDB_OGSI_INFO_LINE', 'MAX_LATITUDE_NULL', 3, 'max_latitude is not set', 'MAX_LATITUDE', 'N', 'Y', 'N'); insert into CHKDB_RULE -- min_longitude bad? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MIN_VALUE, MAX_VALUE) values ('OIL_GAS_SEIS_INV', 'INFO_LINE_BASIC', 'CHKDB_OGSI_INFO_LINE', 'MIN_LONGITUDE_BAD', 4, 'min_longitude is invalid', 'MIN_LONGITUDE', 'N', '-90.00', '90.00'); insert into CHKDB_RULE -- (min_longitude null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_LINE_BASIC', 'CHKDB_OGSI_INFO_LINE', 'MIN_LONGITUDE_NULL', 3, 'min_longitude is not set', 'MIN_LONGITUDE', 'N', 'Y', 'N'); insert into CHKDB_RULE -- max_longitude bad? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MIN_VALUE, MAX_VALUE) values ('OIL_GAS_SEIS_INV', 'INFO_LINE_BASIC', 'CHKDB_OGSI_INFO_LINE', 'MAX_LONGITUDE_BAD', 4, 'max_longitude is invalid', 'MAX_LONGITUDE', 'N', '-90.00', '90.00'); insert into CHKDB_RULE -- (max_longitude null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_LINE_BASIC', 'CHKDB_OGSI_INFO_LINE', 'MAX_LONGITUDE_NULL', 3, 'max_longitude is not set', 'MAX_LONGITUDE', 'N', 'Y', 'N'); -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- Define the INFO_PHYS_BASIC rule-set. delete CHKDB_RULESET where DATA_DOMAIN = 'OIL_GAS_SEIS_INV' and RULESET_ID = 'INFO_PHYS_BASIC'; delete CHKDB_RULE where DATA_DOMAIN = 'OIL_GAS_SEIS_INV' and RULESET_ID = 'INFO_PHYS_BASIC'; insert into CHKDB_RULESET (DATA_DOMAIN, RULESET_ID, DESCRIPTION) values ('OIL_GAS_SEIS_INV', 'INFO_PHYS_BASIC', 'Check of data in the CHKDB_OGSI_INFO_PHYS table'); -- = = = = = = = = = = = = = = = = = = = = = = = -- Rules for the CHKDB_OGSI_INFO_PHYS table insert into CHKDB_RULE -- info_item_id not exist? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, FOREIGN_KEY_LIST, REF_DATA_DOMAIN, REF_TABLE_NAME, REF_KEY_LIST, FK_NOT_ORPHAN_YN, FK_NOT_NULL_YN) values ('OIL_GAS_SEIS_INV', 'INFO_PHYS_BASIC', 'CHKDB_OGSI_INFO_PHYS', 'INFO_ITEM_ID_NOT', 5, 'info_item_id does not exist', 'INFO_ITEM_ID', 'OIL_GAS_SEIS_INV', 'CHKDB_OGSI_INFO_ITEM', 'INFO_ITEM_ID', 'Y', 'Y'); insert into CHKDB_RULE -- (info_item_id too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_PHYS_BASIC', 'CHKDB_OGSI_INFO_PHYS', 'INFO_ITEM_ID_LONG', 2, 'info_item_id is too long', 'INFO_ITEM_ID', 'C', 20, 'N'); insert into CHKDB_RULE -- phys_item_id not exist? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, FOREIGN_KEY_LIST, REF_DATA_DOMAIN, REF_TABLE_NAME, REF_KEY_LIST, FK_NOT_ORPHAN_YN, FK_NOT_NULL_YN) values ('OIL_GAS_SEIS_INV', 'INFO_PHYS_BASIC', 'CHKDB_OGSI_INFO_PHYS', 'SEIS_LINE_ID_NOT', 5, 'phys_item_id does not exist', 'PHYS_ITEM_ID', 'OIL_GAS_SEIS_INV', 'CHKDB_OGSI_PHYS_ITEM', 'PHYS_ITEM_ID', 'Y', 'Y'); insert into CHKDB_RULE -- (phys_item_id too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_PHYS_BASIC', 'CHKDB_OGSI_INFO_PHYS', 'PHYS_ITEM_ID_LONG', 2, 'phys_item_id is too long', 'PHYS_ITEM_ID', 'C', 20, 'N'); insert into CHKDB_RULE -- info_phys_uniq null? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_PHYS_BASIC', 'CHKDB_OGSI_INFO_PHYS', 'INFO_PHYS_UNIQ_NULL', 5, 'info_phys_uniq is not set', 'INFO_PHYS_UNIQ', 'C', 'Y', 'Y'); insert into CHKDB_RULE -- (info_phys_uniq too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_PHYS_BASIC', 'CHKDB_OGSI_INFO_PHYS', 'INFO_PHYS_UNIQ_LONG', 2, 'info_phys_uniq is too long', 'INFO_PHYS_UNIQ', 'C', 20, 'N'); insert into CHKDB_RULE -- active_yn bad? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, IN_LIST) values ('OIL_GAS_SEIS_INV', 'INFO_PHYS_BASIC', 'CHKDB_OGSI_INFO_PHYS', 'ACTIVE_YN_BAD', 4, 'ACTIVE_YN is not Y or N', 'ACTIVE_YN', 'C', 'Y,N'); insert into CHKDB_RULE -- (effective_date null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_PHYS_BASIC', 'CHKDB_OGSI_INFO_PHYS', 'EFFECTIVE_DATE_NULL', 3, 'effective_date is not set', 'EFFECTIVE_DATE', 'D', 'Y', 'N'); insert into CHKDB_RULE -- (expiry_date null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_PHYS_BASIC', 'CHKDB_OGSI_INFO_PHYS', 'EXPIRY_DATE_NULL', 3, 'expiry_date is not set', 'EXPIRY_DATE', 'D', 'Y', 'N'); insert into CHKDB_RULE -- expiry_ before effective_date? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, COLUMN_2_NAME, COL_NOT_LT_COL2_YN) values ('OIL_GAS_SEIS_INV', 'INFO_PHYS_BASIC', 'CHKDB_OGSI_INFO_PHYS', 'EXPIRY_LT_EFFECTIVE', 3, 'expiry_date before effective_date', 'EXPIRY_DATE', 'D', 'EFFECTIVE_DATE', 'Y'); insert into CHKDB_RULE -- (store_id null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_PHYS_BASIC', 'CHKDB_OGSI_INFO_PHYS', 'STORE_ID_NULL', 5, 'store_id is not set', 'STORE_ID', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (store_id too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_PHYS_BASIC', 'CHKDB_OGSI_INFO_PHYS', 'STORE_ID_LONG', 4, 'store_id is too long', 'STORE_ID', 'C', 20, 'N'); insert into CHKDB_RULE -- (store_name null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_PHYS_BASIC', 'CHKDB_OGSI_INFO_PHYS', 'STORE_NAME_NULL', 5, 'store_name is not set', 'STORE_NAME', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (store_name too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_PHYS_BASIC', 'CHKDB_OGSI_INFO_PHYS', 'STORE_NAME_LONG', 4, 'store_name is too long', 'STORE_NAME', 'C', 20, 'N'); insert into CHKDB_RULE -- (store_pos null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_PHYS_BASIC', 'CHKDB_OGSI_INFO_PHYS', 'STORE_POS_NULL', 5, 'store_pos is not set', 'STORE_POS', 'N', 'Y', 'N'); insert into CHKDB_RULE -- (store_offset null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'INFO_PHYS_BASIC', 'CHKDB_OGSI_INFO_PHYS', 'STORE_OFFSET_NULL', 5, 'store_offset is not set', 'STORE_OFFSET', 'N', 'Y', 'N'); -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- Define the PHYS_STORE_BASIC rule-set. delete CHKDB_RULESET where DATA_DOMAIN = 'OIL_GAS_SEIS_INV' and RULESET_ID = 'PHYS_STORE_BASIC'; delete CHKDB_RULE where DATA_DOMAIN = 'OIL_GAS_SEIS_INV' and RULESET_ID = 'PHYS_STORE_BASIC'; insert into CHKDB_RULESET (DATA_DOMAIN, RULESET_ID, DESCRIPTION) values ('OIL_GAS_SEIS_INV', 'PHYS_STORE_BASIC', 'Check of data in the CHKDB_OGSI_PHYS_STORE table'); -- = = = = = = = = = = = = = = = = = = = = = = = -- Rules for the CHKDB_OGSI_PHYS_STORE table insert into CHKDB_RULE -- phys_item_id not exist? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, FOREIGN_KEY_LIST, REF_DATA_DOMAIN, REF_TABLE_NAME, REF_KEY_LIST, FK_NOT_ORPHAN_YN, FK_NOT_NULL_YN) values ('OIL_GAS_SEIS_INV', 'PHYS_STORE_BASIC', 'CHKDB_OGSI_PHYS_STORE', 'SEIS_LINE_ID_NOT', 5, 'phys_item_id does not exist', 'PHYS_ITEM_ID', 'OIL_GAS_SEIS_INV', 'CHKDB_OGSI_PHYS_ITEM', 'PHYS_ITEM_ID', 'Y', 'Y'); insert into CHKDB_RULE -- (phys_item_id too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'PHYS_STORE_BASIC', 'CHKDB_OGSI_PHYS_STORE', 'PHYS_ITEM_ID_LONG', 2, 'phys_item_id is too long', 'PHYS_ITEM_ID', 'C', 20, 'N'); insert into CHKDB_RULE -- store_id not exist? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, FOREIGN_KEY_LIST, REF_DATA_DOMAIN, REF_TABLE_NAME, REF_KEY_LIST, FK_NOT_ORPHAN_YN, FK_NOT_NULL_YN) values ('OIL_GAS_SEIS_INV', 'PHYS_STORE_BASIC', 'CHKDB_OGSI_PHYS_STORE', 'STORE_ID_NOT', 5, 'store_id does not exist', 'STORE_ID', 'OIL_GAS_SEIS_INV', 'CHKDB_OGSI_DATA_STORE', 'STORE_ID', 'Y', 'Y'); insert into CHKDB_RULE -- (store_id too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'PHYS_STORE_BASIC', 'CHKDB_OGSI_PHYS_STORE', 'STORE_ID_LONG', 2, 'store_id is too long', 'STORE_ID', 'C', 20, 'N'); insert into CHKDB_RULE -- phys_store_uniq null? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'PHYS_STORE_BASIC', 'CHKDB_OGSI_PHYS_STORE', 'PHYS_STORE_UNIQ_NULL', 5, 'phys_store_uniq is not set', 'PHYS_STORE_UNIQ', 'C', 'Y', 'Y'); insert into CHKDB_RULE -- (phys_store_uniq too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'PHYS_STORE_BASIC', 'CHKDB_OGSI_PHYS_STORE', 'PHYS_STORE_UNIQ_LONG', 2, 'phys_store_uniq is too long', 'PHYS_STORE_UNIQ', 'C', 20, 'N'); insert into CHKDB_RULE -- active_yn bad? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, IN_LIST) values ('OIL_GAS_SEIS_INV', 'PHYS_STORE_BASIC', 'CHKDB_OGSI_PHYS_STORE', 'ACTIVE_YN_BAD', 4, 'ACTIVE_YN is not Y or N', 'ACTIVE_YN', 'C', 'Y,N'); insert into CHKDB_RULE -- (effective_date null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'PHYS_STORE_BASIC', 'CHKDB_OGSI_PHYS_STORE', 'EFFECTIVE_DATE_NULL', 3, 'effective_date is not set', 'EFFECTIVE_DATE', 'D', 'Y', 'N'); insert into CHKDB_RULE -- (expiry_date null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'PHYS_STORE_BASIC', 'CHKDB_OGSI_PHYS_STORE', 'EXPIRY_DATE_NULL', 3, 'expiry_date is not set', 'EXPIRY_DATE', 'D', 'Y', 'N'); insert into CHKDB_RULE -- expiry_ before effective_date? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, COLUMN_2_NAME, COL_NOT_LT_COL2_YN) values ('OIL_GAS_SEIS_INV', 'PHYS_STORE_BASIC', 'CHKDB_OGSI_PHYS_STORE', 'EXPIRY_LT_EFFECTIVE', 3, 'expiry_date before effective_date', 'EXPIRY_DATE', 'D', 'EFFECTIVE_DATE', 'Y'); insert into CHKDB_RULE -- (box_id null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'PHYS_STORE_BASIC', 'CHKDB_OGSI_PHYS_STORE', 'BOX_ID_NULL', 5, 'box_id is not set', 'BOX_ID', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (box_id too long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_SEIS_INV', 'PHYS_STORE_BASIC', 'CHKDB_OGSI_PHYS_STORE', 'BOX_ID_LONG', 4, 'box_id is too long', 'BOX_ID', 'C', 20, 'N'); -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- Copyright and Open Source License -- -- Copyright (c) Brian Marshall 2003 -- -- Permission is hereby granted, free of charge, to any -- person obtaining a copy of this software and associated -- documentation files (the "Software"), to deal in the -- Software without restriction, including without limitation -- the rights to use, copy, modify, merge, publish, distribute, -- sublicense, and/or sell copies of the Software, and to -- permit persons to whom the Software is furnished to do so, -- subject to the following conditions: -- -- The above copyright notice and this permission notice shall be -- included in all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -- OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -- HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -- WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -- OTHER DEALINGS IN THE SOFTWARE. -- -- ============================================================== ogsi_seisinv_domain.sql0100664000076400007640000005064307760521540014630 0ustar brianbrian-- ============================================================== -- Create and setup the OIL_GAS_SEIS_INV data domain -- for checking Oil & Gas Seismic Inventory data. -- -- The OIL_GAS_SEIS_INV domain is a set of tables/views -- containing data for checking purposes -- -- This is NOT a design of how seismic inventory data -- could/should be stored; it is a design of how stored -- data can be viewed (or temporarily dumped) so that data -- checking can be done. Fields are very wide so that they -- can (hopefully) store even bad values. -- -- An implementation of this domain will only use the -- tables and columns required for the checking to be -- done. The domain supports many ways of representing -- seismic inventory data. -- -- This is a work in progress. Suggestions are appreciated. -- -- Overview -- Table/View Name Primary Key Columns -- ---------------------- --------------------------------- -- -- table for the fundamental entity -- CHKDB_OGSI_INFO_ITEM INFO_ITEM_ID -- -- tables for basic entities that may exist -- CHKDB_OGSI_SEIS_LINE SEIS_LINE_ID -- CHKDB_OGSI_PHYS_ITEM PHYS_ITEM_ID -- CHKDB_OGSI_DATA_STORE STORE_ID -- -- tables for many-to-many relationships -- CHKDB_OGSI_INFO_LINE INFO_ITEM_ID, SEIS_LINE_ID, -- INFO_LINE_UNIQ -- CHKDB_OGSI_INFO_PHYS INFO_ITEM_ID, PHYS_ITEM_ID, -- INFO_PHYS_UNIQ -- CHKDB_OGSI_PHYS_STORE PHYS_ITEM_ID, STORE_ID, -- PHYS_STORE_UNIQ -- -- ============================================================== -- Many different ways... -- -- This domain supports a variety of ways of representing -- seismic inventory data. A database to be checked is -- mapped into the CHKDB_OGSI tables in some particular way; -- tables and columns for other ways are not populated. -- -- The relationship between an info-item and a seismic line -- can be stored as: -- - a key into CHKDB_OGSI_SEIS_LINE in a row in -- CHKDB_OGSI_INFO_LINE -- - line attributes in a row in CHKDB_OGSI_INFO_LINE -- - line attributes in CHKDB_OGSI_INFO_ITEM -- -- The location of a physical item is specified in a STORE_ID -- column, either: -- - in CHKDB_OGSI_PHYS_STORE rows for the item, or, -- - in CHKDB_OGSI_PHYS_ITEM rows (if only one location) -- -- The CHKDB_OGSI_PHYS_STORE table, can contain multiple rows -- for a physical item - a sequence of STORE_IDs which define -- a history of the location of the item. -- -- If used, CHKDB_OGSI_DATA_STORE contains information about -- locations in/at which physical items may be stored; its -- primary key is STORE_ID. Data-stores may nest - a box -- on a shelf in a room in a building. -- -- CHKDB_OGSI_DATA_STORE.LOCATION can be used two ways: -- - an alternate name or description for the data-store -- - the location of the data-store -- In the second case, a single CHKDB_OGSI_DATA_STORE row -- is storing two levels of location information (ex. a row -- for a box and LOCATION contains a room number). -- -- A box may be a implemented as a data-store or as an -- attribute in CHKDB_OGSI_PHYS_STORE or CHKDB_OGSI_PHYS_ITEM. -- -- -- ============================================================== -- Setup the tables/views of the data domain. -- -- The 'create table' statements can be used: -- - to create tables that are populated and then checked -- - as guides to creating views into tables in your -- database that are then checked. -- -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- CHKDB_OGSI_INFO_ITEM -- one row is: a set of data associated with a seismic -- line: ex. a SEG-Y file, a field dataset, section JPG -- -- Two ways of identifying the seismic line are supported: -- SEIS_LINE_ID and LINE_NAME+LINE_KEY_2. -- -- The 'common line-attribute columns' also exist -- in CHKDB_OGSI_SEIS_LINE and CHKDB_OGSI_INFO_LINE. -- In this table, they are either: -- - denormalized information about the line -- - information about a subset of the line create table CHKDB_OGSI_INFO_ITEM ( INFO_ITEM_ID VARCHAR2(80), ACTIVE_YN CHAR(1), EFFECTIVE_DATE DATE, EXPIRY_DATE DATE, NUMERIC_ID NUMBER(15,0), SEIS_LINE_ID VARCHAR2(80), LINE_NAME VARCHAR2(80), LINE_KEY_2 VARCHAR2(80), ITEM_TYPE VARCHAR2(80), ITEM_FORMAT VARCHAR2(80), DATA_VERSION VARCHAR2(80), SAMPLE_LENGTH_MS NUMBER(10,4), SAMPLES_PER_RECORD NUMBER(10,0), RECORD_LENGTH_MS NUMBER(12,4), PROCESS_DATE VARCHAR2(40), PROCESSED_BY VARCHAR2(80), CREATE_START_DATE DATE, CREATE_END_DATE DATE, ITEM_BYTES NUMBER(15,0), ITEM_CATEGORY VARCHAR2(80), ITEM_SUBCATEGORY VARCHAR2(80), -- common line-attribute columns... COUNTRY VARCHAR2(80), PROV_STATE VARCHAR2(80), COUNTY VARCHAR2(80), DISTRICT VARCHAR2(80), REGION VARCHAR2(80), AREA VARCHAR2(80), PROSPECT VARCHAR2(80), SURVEY VARCHAR2(80), LINE_LENGTH NUMBER(16,2), LINE_LENGTH_UNITS VARCHAR2(20), FIRST_SHOT_POINT VARCHAR2(20), LAST_SHOT_POINT VARCHAR2(20), FIRST_REC_NUM VARCHAR2(20), LAST_REC_NUM VARCHAR2(20), FIRST_NLINE_NUM NUMBER(10,0), LAST_NLINE_NUM NUMBER(10,0), FIRST_XLINE_NUM NUMBER(10,0), LAST_XLINE_NUM NUMBER(10,0), MIN_LATITUDE NUMBER(15,7), MAX_LATITUDE NUMBER(15,7), MIN_LONGITUDE NUMBER(15,7), MAX_LONGITUDE NUMBER(15,7), constraint CHKDB_OGSI_INFO_ITEM_PK primary key (INFO_ITEM_ID) ); -- NUMERIC_ID: a numeric surrogate key and/or foreign key -- ITEM_TYPE: ex: "STACK DATA", "SECTION", "OB", etc. -- ITEM_FORMAT: ex: "SEGB", "SEGY", "JPG", "TEXT", etc. -- DATA_VERSION: ex: "FIELD DATA", "RAW STACK", "FILT MIG" -- ITEM_CATEGORY and ITEM_SUBCATEGORY might be used by -- rules developed for a particular implementation. -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- CHKDB_OGSI_SEIS_LINE -- one row is: a seismic line - a line defined by a set -- of geographic points at which seismic sources and/or -- receivers were located. -- -- The set of 'common line-attribute columns' also exist -- in CHKDB_OGSI_INFO_ITEM and CHKDB_OGSI_INFO_LINE: -- - denormalized information about the line, or, -- - information about a subset of the line create table CHKDB_OGSI_SEIS_LINE ( SEIS_LINE_ID VARCHAR2(80), ACTIVE_YN CHAR(1), EFFECTIVE_DATE DATE, EXPIRY_DATE DATE, NUMERIC_ID NUMBER(15,0), LINE_NAME VARCHAR2(80), LINE_KEY_2 VARCHAR2(80), IS_3D_YN CHAR(1), PARENT_SEIS_LINE_ID VARCHAR2(80), PARENT_LINE_NAME VARCHAR2(80), PARENT_LINE_KEY_2 VARCHAR2(80), -- common line-attribute columns... COUNTRY VARCHAR2(80), PROV_STATE VARCHAR2(80), COUNTY VARCHAR2(80), DISTRICT VARCHAR2(80), REGION VARCHAR2(80), AREA VARCHAR2(80), PROSPECT VARCHAR2(80), SURVEY VARCHAR2(80), LINE_LENGTH NUMBER(16,2), LINE_LENGTH_UNITS VARCHAR2(40), FIRST_SHOT_POINT VARCHAR2(40), LAST_SHOT_POINT VARCHAR2(40), FIRST_REC_NUM VARCHAR2(40), LAST_REC_NUM VARCHAR2(40), FIRST_NLINE_NUM NUMBER(10,0), LAST_NLINE_NUM NUMBER(10,0), FIRST_XLINE_NUM NUMBER(10,0), LAST_XLINE_NUM NUMBER(10,0), MIN_LATITUDE NUMBER(15,7), MAX_LATITUDE NUMBER(15,7), MIN_LONGITUDE NUMBER(15,7), MAX_LONGITUDE NUMBER(15,7), constraint CHKDB_OGSI_SEIS_LINE_PK primary key (SEIS_LINE_ID) ); -- NUMERIC_ID: a numeric surrogate key and/or foreign key -- A line may have a parent-line if it is a reshoot or -- subset of that parent-line. -- LINE_KEY_2 (if used) is the data that, along with the -- line-name, uniquely identify a line. -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- CHKDB_OGSI_PHYS_ITEM -- one row is: a thing in/on which a CHKDB_OGSI_INFO_ITEM -- may be recorded. create table CHKDB_OGSI_PHYS_ITEM ( PHYS_ITEM_ID VARCHAR2(80), ACTIVE_YN CHAR(1), EFFECTIVE_DATE DATE, EXPIRY_DATE DATE, NUMERIC_ID NUMBER(15,0), ITEM_TYPE VARCHAR2(80), ITEM_SIZE VARCHAR2(40), ITEM_SIZE_UNITS VARCHAR2(40), ITEM_DENSITY VARCHAR2(40), ITEM_NAME VARCHAR2(80), LABEL1 VARCHAR2(80), LABEL2 VARCHAR2(80), LABEL3 VARCHAR2(80), PHYS_ITEM_STATUS VARCHAR2(40), STORE_ID VARCHAR2(80), BOX_ID VARCHAR2(80), CREATE_DATE DATE, constraint CHKDB_OGSI_PHYS_ITEM_PK primary key (PHYS_ITEM_ID) ); -- NUMERIC_ID: a numeric surrogate key and/or foreign key -- ITEM_TYPE ex: "3590", "CD", "LOCAL_DISK", "HR_DATABASE" -- (implies an encoding and addressing scheme) -- ITEM_NAME: what you ask for if you want this item -- ex: "CD12345" (where the item is a CD) -- ex: "C:" (where the item is the local disk) -- LABEL1, LABEL2, LABEL3: optional, application specific -- ex: LABEL1=Client's barcode, LABEL2=legacy system's -- reel-id, LABEL3=storage facility's barcode -- STORE_ID can contain the current location of the item. -- BOX_ID can identify the containing box (which may be a -- STORE_ID or an attribute of the item or storage) -- Seismic data on disk - what is the physical item? -- - If many info-items can be in a file, -- the file could be the physical item. -- - Alternatively, the directory, disk, server -- or 'the network' could be the physical item. -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- CHKDB_OGSI_DATA_STORE -- one row is: a container or location in/at which one -- or more physical items can be stored. -- -- Data-stores may nest - ex: a Tape (a physical item) -- may be in a Box on a Shelf in a Room in a Building. create table CHKDB_OGSI_DATA_STORE ( STORE_ID VARCHAR2(80), ACTIVE_YN CHAR(1), EFFECTIVE_DATE DATE, EXPIRY_DATE DATE, NUMERIC_ID NUMBER(15,0), CONTAINED_BY_STORE_ID VARCHAR2(80), DATA_STORE_TYPE VARCHAR2(80), DATA_STORE_STATUS VARCHAR2(80), LOCATION VARCHAR2(80), STORE_NAME VARCHAR2(80), STORE_NAME2 VARCHAR2(80), STORE_BARCODE VARCHAR2(80), STORE_DESC VARCHAR2(400), constraint CHKDB_OGSI_DATA_STORE_PK primary key (STORE_ID) ); -- NUMERIC_ID: a numeric surrogate key and/or foreign key -- DATA_STORE_STATUS: current status of location - ex: -- in-use, closed, destroyed -- STORE_NAME, STORE_NAME2, STORE_BARCODE can -- contain alternate ways of identifying location. -- LOCATION can contain either: -- - an alternate name or description of this data-store -- - the location of this data-store -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- CHKDB_OGSI_INFO_LINE -- one row is: an instance of an info-item being related -- to (possibly a subset of) a seismic line. -- The 'common line-attribute columns' also exist -- in CHKDB_OGSI_SEIS_LINE and CHKDB_OGSI_INFO_ITEM. -- In this table, they are either: -- - denormalized information about the line -- - information about a subset of the line create table CHKDB_OGSI_INFO_LINE ( INFO_ITEM_ID VARCHAR2(80), SEIS_LINE_ID VARCHAR2(80), INFO_LINE_UNIQ VARCHAR2(80), ACTIVE_YN CHAR(1), EFFECTIVE_DATE DATE, EXPIRY_DATE DATE, -- common line-attribute columns... COUNTRY VARCHAR2(80), PROV_STATE VARCHAR2(80), COUNTY VARCHAR2(80), DISTRICT VARCHAR2(80), REGION VARCHAR2(80), AREA VARCHAR2(80), PROSPECT VARCHAR2(80), SURVEY VARCHAR2(80), LINE_LENGTH NUMBER(16,2), LINE_LENGTH_UNITS VARCHAR2(20), FIRST_SHOT_POINT VARCHAR2(20), LAST_SHOT_POINT VARCHAR2(20), FIRST_REC_NUM VARCHAR2(20), LAST_REC_NUM VARCHAR2(20), FIRST_NLINE_NUM NUMBER(10,0), LAST_NLINE_NUM NUMBER(10,0), FIRST_XLINE_NUM NUMBER(10,0), LAST_XLINE_NUM NUMBER(10,0), MIN_LATITUDE NUMBER(15,7), MAX_LATITUDE NUMBER(15,7), MIN_LONGITUDE NUMBER(15,7), MAX_LONGITUDE NUMBER(15,7), constraint CHKDB_OGSI_INFO_LINE_PK primary key (INFO_ITEM_ID, SEIS_LINE_ID, INFO_LINE_UNIQ) ); -- INFO_LINE_UNIQ is used to make rows unique considering -- that there can be a many-to-many relationship between -- info-items and seismic-lines. -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- CHKDB_OGSI_INFO_PHYS -- one row is: an instance of an info-item being recorded -- on/in a physical-item. create table CHKDB_OGSI_INFO_PHYS ( INFO_ITEM_ID VARCHAR2(80), PHYS_ITEM_ID VARCHAR2(80), INFO_PHYS_UNIQ VARCHAR2(80), ACTIVE_YN CHAR(1), EFFECTIVE_DATE DATE, EXPIRY_DATE DATE, STORE_ID VARCHAR2(80), STORE_NAME VARCHAR2(200), STORE_POS NUMBER(20,0), STORE_OFFSET NUMBER(20,0), constraint CHKDB_OGSI_INFO_PHYS_PK primary key (INFO_ITEM_ID, PHYS_ITEM_ID, INFO_PHYS_UNIQ) ); -- INFO_PHYS_UNIQ is used to make rows unique considering -- that there can be a many-to-many relationship between -- info-items and physical-items. If a sequence number -- can be used, it can be stored in this column as a -- string and in STORE_POS as a number. -- Optional columns - use depends on physical item type: -- STORE_NAME: ex: a filename on a disk or CD -- STORE_POS: ex: a file position on a tape -- STORE_OFFSET: ex: bytes offset from start of tape -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- CHKDB_OGSI_PHYS_STORE -- one row is: an instance of a physical item being stored -- in/at a data-store (a container or location). -- There is a many-to-many relationship between physical -- items and data-stores. However, an item can only exist -- in/at one data-store at any one time; multiple rows for -- one item describe the item being in/at a sequence of -- data-stores. create table CHKDB_OGSI_PHYS_STORE ( PHYS_ITEM_ID VARCHAR2(80), STORE_ID VARCHAR2(80), PHYS_STORE_UNIQ VARCHAR2(80), ACTIVE_YN CHAR(1), EFFECTIVE_DATE DATE, EXPIRY_DATE DATE, BOX_ID VARCHAR2(80), constraint CHKDB_OGSI_PHYS_STORE_PK primary key (PHYS_ITEM_ID, STORE_ID, PHYS_STORE_UNIQ) ); -- BOX_ID can identify the containing box (which may be a -- STORE_ID or an attribute of the storage) -- ============================================================== -- Define the domain in CHKDB_DOMAIN delete CHKDB_DOMAIN where DATA_DOMAIN = 'OIL_GAS_SEIS_INV'; insert into CHKDB_DOMAIN (DATA_DOMAIN, DESCRIPTION) values ('OIL_GAS_SEIS_INV', 'Tables/Views for checking seismic inventory data (metadata)'); -- ============================================================== -- Define the tables/views in the domain in CHKDB_TABLE -- and the table keys in CHKDB_KEY and CHKDB_KEY_COLUMN delete CHKDB_TABLE where DATA_DOMAIN = 'OIL_GAS_SEIS_INV'; -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- Tables in the domain. -- = = = = = = = = = = = = = = = = -- table CHKDB_OGSI_INFO_ITEM insert into CHKDB_TABLE (DATA_DOMAIN, TABLE_NAME, DESCRIPTION, PRIMARY_KEY_LIST, CHECKABLE_YN, TABLE_VIEW_TV, DROP_ON_REMOVE_YN) values ('OIL_GAS_SEIS_INV', 'CHKDB_OGSI_INFO_ITEM', 'Data about (some part of) a seismic line', 'INFO_ITEM_ID', 'Y', 'T', 'Y'); -- = = = = = = = = = = = = = = = = -- table CHKDB_OGSI_SEIS_LINE insert into CHKDB_TABLE (DATA_DOMAIN, TABLE_NAME, DESCRIPTION, PRIMARY_KEY_LIST, CHECKABLE_YN, TABLE_VIEW_TV, DROP_ON_REMOVE_YN) values ('OIL_GAS_SEIS_INV', 'CHKDB_OGSI_SEIS_LINE', 'A seismic line', 'SEIS_LINE_ID', 'Y', 'T', 'Y'); -- = = = = = = = = = = = = = = = = -- table CHKDB_OGSI_PHYS_ITEM insert into CHKDB_TABLE (DATA_DOMAIN, TABLE_NAME, DESCRIPTION, PRIMARY_KEY_LIST, CHECKABLE_YN, TABLE_VIEW_TV, DROP_ON_REMOVE_YN) values ('OIL_GAS_SEIS_INV', 'CHKDB_OGSI_PHYS_ITEM', 'Media/facility on/in which information items are stored', 'PHYS_ITEM_ID', 'Y', 'T', 'Y'); -- = = = = = = = = = = = = = = = = -- table CHKDB_OGSI_DATA_STORE insert into CHKDB_TABLE (DATA_DOMAIN, TABLE_NAME, DESCRIPTION, PRIMARY_KEY_LIST, CHECKABLE_YN, TABLE_VIEW_TV, DROP_ON_REMOVE_YN) values ('OIL_GAS_SEIS_INV', 'CHKDB_OGSI_DATA_STORE', 'Location at which physical items can be stored', 'STORE_ID', 'Y', 'T', 'Y'); -- = = = = = = = = = = = = = = = = -- table CHKDB_OGSI_INFO_LINE insert into CHKDB_TABLE (DATA_DOMAIN, TABLE_NAME, DESCRIPTION, PRIMARY_KEY_LIST, CHECKABLE_YN, TABLE_VIEW_TV, DROP_ON_REMOVE_YN) values ('OIL_GAS_SEIS_INV', 'CHKDB_OGSI_INFO_LINE', 'Information items for seismic lines', 'INFO_ITEM_ID,SEIS_LINE_ID,INFO_LINE_UNIQ', 'Y', 'T', 'Y'); -- = = = = = = = = = = = = = = = = -- table CHKDB_OGSI_INFO_PHYS insert into CHKDB_TABLE (DATA_DOMAIN, TABLE_NAME, DESCRIPTION, PRIMARY_KEY_LIST, CHECKABLE_YN, TABLE_VIEW_TV, DROP_ON_REMOVE_YN) values ('OIL_GAS_SEIS_INV', 'CHKDB_OGSI_INFO_PHYS', 'Information items on physical items (ex. tapes)', 'INFO_ITEM_ID,PHYS_ITEM_ID,INFO_PHYS_UNIQ', 'Y', 'T', 'Y'); -- = = = = = = = = = = = = = = = = -- table CHKDB_OGSI_PHYS_STORE insert into CHKDB_TABLE (DATA_DOMAIN, TABLE_NAME, DESCRIPTION, PRIMARY_KEY_LIST, CHECKABLE_YN, TABLE_VIEW_TV, DROP_ON_REMOVE_YN) values ('OIL_GAS_SEIS_INV', 'CHKDB_OGSI_PHYS_STORE', 'Physical items (ex. tapes) in/at data-stores', 'PHYS_ITEM_ID,STORE_ID,PHYS_STORE_UNIQ', 'Y', 'T', 'Y'); -- ============================================================== -- Copyright and Open Source License -- -- Copyright (c) Brian Marshall 2003 -- -- Permission is hereby granted, free of charge, to any -- person obtaining a copy of this software and associated -- documentation files (the "Software"), to deal in the -- Software without restriction, including without limitation -- the rights to use, copy, modify, merge, publish, distribute, -- sublicense, and/or sell copies of the Software, and to -- permit persons to whom the Software is furnished to do so, -- subject to the following conditions: -- -- The above copyright notice and this permission notice shall be -- included in all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -- OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -- HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -- WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -- OTHER DEALINGS IN THE SOFTWARE. -- -- ================================================================= ogw1_ruleset.sql0100664000076400007640000014046307760521540013220 0ustar brianbrian-- ============================================================== -- Define the WELL_HDR_BASIC and DST_BASIC rulesets -- for the OIL_GAS_WELL_1 data domain -- -- These rulesets are used to check basic data integrity -- in well data - tables that describe oil and gas wells, -- and their associated DSTs, etc. -- -- This is a work in progress. Suggestions and contributions -- are appreciated. -- -- Note: In rules in which a where-clause is specified, -- the table being checked has an alias of t. -- -- Where rule-descriptions are in parenthesies like... -- -- (desc in parenthesies) -- it means ACTIVE_YN = 'N' and the rule is inactive. -- -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- Define the WELL_HDR_BASIC rule-set. delete CHKDB_RULESET where DATA_DOMAIN = 'OIL_GAS_WELL_1' and RULESET_ID = 'WELL_HDR_BASIC'; delete CHKDB_RULE where DATA_DOMAIN = 'OIL_GAS_WELL_1' and RULESET_ID = 'WELL_HDR_BASIC'; insert into CHKDB_RULESET (DATA_DOMAIN, RULESET_ID, DESCRIPTION) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'Check of basic data about a well'); -- = = = = = = = = = = = = = = = = = = = = = = = -- Rules for CHKDB_OGW1_WELL (all wells) insert into CHKDB_RULE -- (uwi long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL', 'UWI_LONG', 3, 'uwi is too long', 'UWI', 'C', 16, 'N'); insert into CHKDB_RULE -- (numeric_id null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL', 'NUMERIC_ID_NULL', 3, 'numeric_id is not set', 'NUMERIC_ID', 'C', 'Y', 'N'); insert into CHKDB_RULE -- parent_uwi not? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, FOREIGN_KEY_LIST, REF_DATA_DOMAIN, REF_TABLE_NAME, REF_KEY_LIST, FK_NOT_ORPHAN_YN) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL', 'PARENT_UWI_BAD', 4, 'parent_uwi does not exist', 'PARENT_UWI', 'OIL_GAS_WELL_1', 'CHKDB_OGW1_WELL', 'UWI', 'Y'); insert into CHKDB_RULE -- (parent_uwi long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL', 'PARENT_UWI_LONG', 3, 'parent_uwi is too long', 'PARENT_UWI', 'C', 16, 'N'); insert into CHKDB_RULE -- (data_source null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL', 'DATA_SOURCE_NULL', 3, 'data_source is not set', 'DATA_SOURCE', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (data_source long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL', 'DATA_SOURCE_LONG', 3, 'data_source is too long', 'DATA_SOURCE', 'C', 20, 'N'); insert into CHKDB_RULE -- well_name null? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL', 'WELL_NAME_NULL', 3, 'well_name is not set', 'WELL_NAME', 'C', 'Y', 'Y'); insert into CHKDB_RULE -- (well_name long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL', 'WELL_NAME_LONG', 3, 'well_name is too long', 'WELL_NAME', 'C', 60, 'N'); insert into CHKDB_RULE -- (govt_well_id null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL', 'GOVT_WELL_ID_NULL', 3, 'govt_well_id is not set', 'GOVT_WELL_ID', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (govt_well_id long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL', 'GOVT_WELL_ID_LONG', 3, 'govt_well_id is too long', 'GOVT_WELL_ID', 'C', 30, 'N'); insert into CHKDB_RULE -- well_class null? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL', 'WELL_CLASS_NULL', 3, 'well_class is not set', 'WELL_CLASS', 'C', 'Y'); insert into CHKDB_RULE -- (well_class long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL', 'WELL_CLASS_LONG', 3, 'well_class is too long', 'WELL_CLASS', 'C', 20, 'N'); insert into CHKDB_RULE -- current_status null? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL', 'WELL_STATUS_NULL', 4, 'current_status is not set', 'CURRENT_STATUS', 'C', 'Y'); insert into CHKDB_RULE -- (current_status long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL', 'CURRENT_STATUS_LONG', 3, 'current_status is too long', 'CURRENT_STATUS', 'C', 20, 'N'); insert into CHKDB_RULE -- (current_status_date bad?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MIN_VALUE, NOT_AFTER_TODAY_YN, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL', 'CUR_STATUS_DATE_BAD', 3, 'current_status_date is invalid', 'CURRENT_STATUS_DATE', 'D', '1907-01-01', 'Y', 'N'); insert into CHKDB_RULE -- (country null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL', 'COUNTRY_NULL', 2, 'country of well not set', 'COUNTRY', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (country long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL', 'COUNTRY_LONG', 3, 'country is too long', 'COUNTRY', 'C', 20, 'N'); insert into CHKDB_RULE -- province/state null? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL', 'PROVINCE_STATE_NULL', 2, 'province/state of well not set', 'PROVINCE_STATE', 'C', 'Y'); insert into CHKDB_RULE -- (province/state long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL', 'PROVINCE_STATE_LONG', 3, 'province/state is too long', 'PROVINCE_STATE', 'C', 20, 'N'); insert into CHKDB_RULE -- (county null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL', 'COUNTY_NULL', 2, 'county of well not set', 'COUNTY', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (county long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL', 'COUNTY_LONG', 3, 'county is too long', 'COUNTY', 'C', 20, 'N'); insert into CHKDB_RULE -- (district null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL', 'DISTRICT_NULL', 2, 'district of well not set', 'DISTRICT', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (district long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL', 'DISTRICT_LONG', 3, 'district is too long', 'DISTRICT', 'C', 20, 'N'); insert into CHKDB_RULE -- (region null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL', 'REGION_NULL', 2, 'region of well not set', 'REGION', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (region long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL', 'REGION_LONG', 3, 'region is too long', 'REGION', 'C', 20, 'N'); insert into CHKDB_RULE -- (area null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL', 'AREA_NULL', 2, 'area of well not set', 'AREA', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (area long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL', 'AREA_LONG', 3, 'area is too long', 'AREA', 'C', 20, 'N'); insert into CHKDB_RULE -- (prospect null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL', 'PROSPECT_NULL', 2, 'prospect of well not set', 'PROSPECT', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (prospect long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL', 'PROSPECT_LONG', 3, 'prospect is too long', 'PROSPECT', 'C', 20, 'N'); insert into CHKDB_RULE -- bottom_hole_latitude bad? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MIN_VALUE, MAX_VALUE) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL', 'BH_LAT_BAD', 4, 'bottom_hole_latitude is invalid', 'BOTTOM_HOLE_LATITUDE', 'N', '-90.0', '90.0'); insert into CHKDB_RULE -- bottom_hole_longitude bad? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MIN_VALUE, MAX_VALUE) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL', 'BH_LON_BAD', 4, 'bottom_hole_longitude is invalid', 'BOTTOM_HOLE_LONGITUDE', 'N', '-180.0', '180.0'); insert into CHKDB_RULE -- surface_latitude bad? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MIN_VALUE, MAX_VALUE) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL', 'SURFACE_LAT_BAD', 4, 'surface_latitude is invalid', 'SURFACE_LATITUDE', 'N', '-90.0', '90.0'); insert into CHKDB_RULE -- surface_longitude bad? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MIN_VALUE, MAX_VALUE) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL', 'SURFACE_LON_BAD', 4, 'surface_longitude is invalid', 'SURFACE_LONGITUDE', 'N', '-180.0', '180.0'); insert into CHKDB_RULE -- surface and bh lat far apart? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, COLUMN_2_NAME, COL_MINUS_COL2_MIN, COL_MINUS_COL2_MAX) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL', 'SURF_BH_LAT_APART', 3, 'surface and bottom-hole latitude too far apart', 'SURFACE_LATITUDE', 'N', 'BOTTOM_HOLE_LATITUDE', -0.1, 0.1); insert into CHKDB_RULE -- surface and bh lon far apart? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, COLUMN_2_NAME, COL_MINUS_COL2_MIN, COL_MINUS_COL2_MAX) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL', 'SURF_BH_LON_APART', 3, 'surface and bottom-hole longitude too far apart', 'SURFACE_LONGITUDE', 'N', 'BOTTOM_HOLE_LONGITUDE', -1.0, 1.0); -- = = = = = = = = = = = = = = = = = = = = = = = -- Rules for CHKDB_OGW1_WELL_SPUDDED -- (ie. at least spudded) insert into CHKDB_RULE -- spud_date bad? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MIN_VALUE, NOT_AFTER_TODAY_YN) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL_SPUDDED', 'SPUD_DATE_BAD', 3, 'spud_date is invalid', 'SPUD_DATE', 'D', '1907-01-01', 'Y'); insert into CHKDB_RULE -- operator null? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL_SPUDDED', 'WELL_OPERATOR_NULL', 2, 'operator is not set', 'OPERATOR', 'C', 'Y'); insert into CHKDB_RULE -- (operator long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL_SPUDDED', 'OPERATOR_LONG', 3, 'operator is too long', 'OPERATOR', 'C', 20, 'N'); insert into CHKDB_RULE -- surface_latitude null? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL_SPUDDED', 'SURFACE_LAT_NULL', 4, 'surface_latitude is not set', 'SURFACE_LATITUDE', 'N', 'Y'); insert into CHKDB_RULE -- surface_longitude null? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL_SPUDDED', 'SURFACE_LON_NULL', 4, 'surface_longitude is not set', 'SURFACE_LONGITUDE', 'N', 'Y'); insert into CHKDB_RULE -- field null? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL_SPUDDED', 'FIELD_NULL', 2, 'field is not set', 'FIELD', 'C', 'Y'); insert into CHKDB_RULE -- (field long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL_SPUDDED', 'FIELD_LONG', 3, 'field is too long', 'FIELD', 'C', 20, 'N'); insert into CHKDB_RULE -- pool null? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL_SPUDDED', 'POOL_NULL', 2, 'pool is not set', 'POOL', 'C', 'Y'); insert into CHKDB_RULE -- (pool long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL_SPUDDED', 'POOL_LONG', 3, 'pool is too long', 'POOL', 'C', 20, 'N'); -- = = = = = = = = = = = = = = = = = = = = = = = -- Rules for CHKDB_OGW1_WELL_COMPLETE -- (ie. completed or abandoned) insert into CHKDB_RULE -- spud_date null? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL_COMPLETE', 'SPUD_DATE_BAD', 3, 'spud_date is not set', 'SPUD_DATE', 'D', 'Y'); insert into CHKDB_RULE -- finished_drilling_date bad? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, COLUMN_2_NAME, COL_NOT_LT_COL2_YN, NOT_AFTER_TODAY_YN) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL_COMPLETE', 'FIN_DRL_DT_BAD', 3, 'finished_drilling_date is invalid or not set', 'FINISHED_DRILLING_DATE', 'D', 'Y', 'SPUD_DATE', 'Y', 'Y'); insert into CHKDB_RULE -- rig_release_date bad? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, COLUMN_2_NAME, COL_NOT_LT_COL2_YN, NOT_AFTER_TODAY_YN) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL_COMPLETE', 'RIG_REL_DT_BAD', 3, 'rig_release_date is invalid or not set', 'RIG_RELEASE_DATE', 'D', 'Y', 'SPUD_DATE', 'Y', 'Y'); insert into CHKDB_RULE -- completion_date bad? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, COLUMN_2_NAME, COL_NOT_LT_COL2_YN, NOT_AFTER_TODAY_YN) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL_COMPLETE', 'COMPLETION_DT_BAD', 3, 'completion_date is invalid or not set', 'COMPLETION_DATE', 'D', 'SPUD_DATE', 'Y', 'Y'); insert into CHKDB_RULE -- abandonment_date bad? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, COLUMN_2_NAME, COL_NOT_LT_COL2_YN, NOT_AFTER_TODAY_YN) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL_COMPLETE', 'ABANDONMENT_DT_BAD', 3, 'abandonment_date is invalid or not set', 'ABANDONMENT_DATE', 'D', 'SPUD_DATE', 'Y', 'Y'); insert into CHKDB_RULE -- bottom_hole_latitude null? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL_COMPLETE', 'BH_LAT_NULL', 4, 'bottom_hole_latitude is not set', 'BOTTOM_HOLE_LATITUDE', 'N', 'Y'); insert into CHKDB_RULE -- bottom_hole_longitude null? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL_COMPLETE', 'BH_LON_NULL', 4, 'bottom_hole_longitude is not set', 'BOTTOM_HOLE_LONGITUDE', 'N', 'Y'); insert into CHKDB_RULE -- kb_elevation bad? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, MIN_VALUE, MAX_VALUE) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL_COMPLETE', 'KB_ELEV_BAD', 4, 'KB elevation is invalid or not set', 'KB_ELEVATION', 'N', 'Y', '10.0', '15000.0'); insert into CHKDB_RULE -- ground_elevation bad? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, MIN_VALUE, MAX_VALUE) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL_COMPLETE', 'GROUND_ELEV_BAD', 3, 'ground_elevation is invalid or not set', 'GROUND_ELEVATION', 'N', 'Y', '0.0', '15000.0'); insert into CHKDB_RULE -- ground and kb far apart? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, COLUMN_2_NAME, COL_MINUS_COL2_MIN, COL_MINUS_COL2_MAX) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL_COMPLETE', 'KB_GRND_APART', 3, 'ground and KB elevations too far apart ', 'GROUND_ELEVATION', 'N', 'KB_ELEVATION', 50.0, 50.0); insert into CHKDB_RULE -- cf_elevation bad? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, MIN_VALUE, MAX_VALUE, COLUMN_2_NAME, COL_MINUS_COL2_MIN, COL_MINUS_COL2_MAX) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL_COMPLETE', 'CF_ELEV_BAD', 3, 'casing flange elevation is invalid or not set', 'CASING_FLANGE_ELEVATION', 'N', 'Y', '-100.0', '15000.0', 'GROUND_ELEVATION', -100.0, 100.0); insert into CHKDB_RULE -- total_depth bad? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, MIN_VALUE, MAX_VALUE) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL_COMPLETE', 'TOTAL_DEPTH_BAD', 4, 'total (measured) depth is invalid or not set', 'TOTAL_DEPTH', 'N', 'Y', '10.0', '20000.0'); insert into CHKDB_RULE -- true_vertical_depth null? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL_COMPLETE', 'TVD_NULL', 3, 'true_vertical_depth is not set', 'TRUE_VERTICAL_DEPTH', 'N', 'Y', 'Y'); insert into CHKDB_RULE -- true_vertical_depth bad? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, ACTIVE_YN, COLUMN_2_NAME, COL_NOT_GT_COL2_YN, MIN_VALUE, MAX_VALUE) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL_COMPLETE', 'TVD_BAD', 3, 'true_vertical_depth is invalid', 'TRUE_VERTICAL_DEPTH', 'N', 'Y', 'TOTAL_DEPTH', 'Y', '10.0', '15000.0'); insert into CHKDB_RULE -- (driller_td bad?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, MIN_VALUE, MAX_VALUE, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL_COMPLETE', 'DRILLER_TD_BAD', 4, 'driller_td is invalid or not set', 'DRILLER_TD', 'N', 'Y', '100.0', '20000.0', 'N'); insert into CHKDB_RULE -- (logger_td bad?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, MIN_VALUE, MAX_VALUE, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL_COMPLETE', 'LOGGER_TD_BAD', 4, 'logger_td is invalid or not set', 'LOGGER_TD', 'N', 'Y', '100.0', '20000.0', 'N'); insert into CHKDB_RULE -- (whipstock_depth bad?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, MIN_VALUE, MAX_VALUE, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL_COMPLETE', 'WHIPSTOCK_DEPTH_BAD', 4, 'whipstock_depth is invalid or not set', 'WHIPSTOCK_DEPTH', 'N', 'Y', '100.0', '20000.0', 'N'); insert into CHKDB_RULE -- (plugback_depth bad?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, MIN_VALUE, MAX_VALUE, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL_COMPLETE', 'PLUGBACK_DEPTH_BAD', 4, 'plugback_depth is invalid or not set', 'PLUGBACK_DEPTH', 'N', 'Y', '100.0', '20000.0', 'N'); insert into CHKDB_RULE -- (lease_name null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL_COMPLETE', 'LEASE_NAME_NULL', 2, 'lease_name is not set', 'LEASE_NAME', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (lease_name long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL_COMPLETE', 'LEASE_NAME_LONG', 3, 'lease_name is too long', 'LEASE_NAME', 'C', 20, 'N'); insert into CHKDB_RULE -- (lease_num null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL_COMPLETE', 'LEASE_NUM_NULL', 2, 'lease_num is not set', 'LEASE_NUM', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (lease_num long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL_COMPLETE', 'LEASE_NUM_LONG', 3, 'lease_num is too long', 'LEASE_NUM', 'C', 20, 'N'); insert into CHKDB_RULE -- (lease_num long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, IS_A_NUMBER_YN, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'WELL_HDR_BASIC', 'CHKDB_OGW1_WELL_COMPLETE', 'LEASE_NUM_NOTNUM', 3, 'lease_num is not a number', 'LEASE_NUM', 'C', 'Y', 'N'); -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- Define the DST_BASIC rule-set. delete CHKDB_RULESET where DATA_DOMAIN = 'OIL_GAS_WELL_1' and RULESET_ID = 'DST_BASIC'; delete CHKDB_RULE where DATA_DOMAIN = 'OIL_GAS_WELL_1' and RULESET_ID = 'DST_BASIC'; insert into CHKDB_RULESET (DATA_DOMAIN, RULESET_ID, DESCRIPTION) values ('OIL_GAS_WELL_1', 'DST_BASIC', 'Check of basic data about a drill stem test'); -- = = = = = = = = = = = = = = = = = = = = = = = -- Rules for CHKDB_OGW1_DST (all DSTs) insert into CHKDB_RULE -- uwi not? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, FOREIGN_KEY_LIST, REF_DATA_DOMAIN, REF_TABLE_NAME, REF_KEY_LIST, FK_NOT_ORPHAN_YN) values ('OIL_GAS_WELL_1', 'DST_BASIC', 'CHKDB_OGW1_DST', 'UWI_BAD', 4, 'uwi does not exist', 'UWI', 'OIL_GAS_WELL_1', 'CHKDB_OGW1_WELL', 'UWI', 'Y'); insert into CHKDB_RULE -- (uwi long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'DST_BASIC', 'CHKDB_OGW1_DST', 'UWI_LONG', 3, 'uwi is too long', 'UWI', 'C', 16, 'N'); insert into CHKDB_RULE -- (run_num long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'DST_BASIC', 'CHKDB_OGW1_DST', 'RUN_NUM_LONG', 3, 'run_num is too long', 'RUN_NUM', 'C', 20, 'N'); insert into CHKDB_RULE -- (test_num long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'DST_BASIC', 'CHKDB_OGW1_DST', 'TEST_NUM_LONG', 3, 'test_num is too long', 'TEST_NUM', 'C', 20, 'N'); insert into CHKDB_RULE -- (test_uniq long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'DST_BASIC', 'CHKDB_OGW1_DST', 'TEST_UNIQ_LONG', 3, 'test_uniq is too long', 'TEST_UNIQ', 'C', 20, 'N'); insert into CHKDB_RULE -- (numeric_id null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'DST_BASIC', 'CHKDB_OGW1_DST', 'NUMERIC_ID_NULL', 3, 'numeric_id is not set', 'NUMERIC_ID', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (data_source null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'DST_BASIC', 'CHKDB_OGW1_DST', 'DATA_SOURCE_NULL', 3, 'data_source is not set', 'DATA_SOURCE', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (data_source long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'DST_BASIC', 'CHKDB_OGW1_DST', 'DATA_SOURCE_LONG', 3, 'data_source is too long', 'DATA_SOURCE', 'C', 20, 'N'); insert into CHKDB_RULE -- (report_test_num null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'DST_BASIC', 'CHKDB_OGW1_DST', 'REP_TEST_NUM_NULL', 3, 'report_test_num is not set', 'REPORT_TEST_NUM', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (report_test_num long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'DST_BASIC', 'CHKDB_OGW1_DST', 'REP_TEST_NUM_LONG', 3, 'report_test_num is too long', 'REPORT_TEST_NUM', 'C', 20, 'N'); insert into CHKDB_RULE -- test_date bad? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, MIN_VALUE, NOT_AFTER_TODAY_YN) values ('OIL_GAS_WELL_1', 'DST_BASIC', 'CHKDB_OGW1_DST', 'TESTDATE_BAD', 3, 'test_date is invalid or not set', 'TEST_DATE', 'D', 'Y', '1880-01-01', 'Y'); insert into CHKDB_RULE -- (test_status null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'DST_BASIC', 'CHKDB_OGW1_DST', 'TEST_STATUS_NULL', 3, 'test_status is not set', 'TEST_STATUS', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (test_status long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'DST_BASIC', 'CHKDB_OGW1_DST', 'TEST_STATUS_LONG', 3, 'test_status is too long', 'TEST_STATUS', 'C', 20, 'N'); insert into CHKDB_RULE -- (GOOD_TEST_YN null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'DST_BASIC', 'CHKDB_OGW1_DST', 'GOOD_TEST_YN_NULL', 3, 'GOOD_TEST_YN is not set', 'GOOD_TEST_YN', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (GOOD_TEST_YN not Y,N?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, IN_LIST, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'DST_BASIC', 'CHKDB_OGW1_DST', 'GOOD_TEST_YN_NOT_YN', 3, 'GOOD_TEST_YN must be Y or N', 'GOOD_TEST_YN', 'C', 'Y,N', 'N'); insert into CHKDB_RULE -- (test_company null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'DST_BASIC', 'CHKDB_OGW1_DST', 'TEST_COMPANY_NULL', 3, 'test_company is not set', 'TEST_COMPANY', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (test_company long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'DST_BASIC', 'CHKDB_OGW1_DST', 'TEST_COMPANY_LONG', 3, 'test_company is too long', 'TEST_COMPANY', 'C', 20, 'N'); insert into CHKDB_RULE -- (dst_type null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'DST_BASIC', 'CHKDB_OGW1_DST', 'DST_TYPE_NULL', 3, 'dst_type is not set', 'DST_TYPE', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (dst_type long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'DST_BASIC', 'CHKDB_OGW1_DST', 'DST_TYPE_LONG', 3, 'dst_type is too long', 'DST_TYPE', 'C', 20, 'N'); insert into CHKDB_RULE -- top_depth bad? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, MIN_VALUE, MAX_VALUE) values ('OIL_GAS_WELL_1', 'DST_BASIC', 'CHKDB_OGW1_DST', 'TOP_DEPTH_BAD', 4, 'top_depth is invalid or not set', 'TOP_DEPTH', 'N', 'Y', '10.0', '20000.0'); insert into CHKDB_RULE -- bottom_depth bad? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, MIN_VALUE, MAX_VALUE) values ('OIL_GAS_WELL_1', 'DST_BASIC', 'CHKDB_OGW1_DST', 'BOT_DEPTH_BAD', 4, 'bottom_depth is invalid or not set', 'BOTTOM_DEPTH', 'N', 'Y', '10.0', '20000.0'); insert into CHKDB_RULE -- bot, top inverted or bad? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, COLUMN_2_NAME, COL_MINUS_COL2_MIN, COL_MINUS_COL2_MAX) values ('OIL_GAS_WELL_1', 'DST_BASIC', 'CHKDB_OGW1_DST', 'BOT_TOP_DEPTH_BAD', 3, 'Bottom depth above or too far below top_depth', 'BOTTOM_DEPTH', 'N', 'TOP_DEPTH', 0.0, 100.0); -- = = = = = = = = = = = = = = = = = = = = = = = -- Rules for CHKDB_OGW1_DST_GOOD -- (ie. not a 'misrun') insert into CHKDB_RULE -- (top_formation null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'DST_BASIC', 'CHKDB_OGW1_DST_GOOD', 'TOP_FORMATION_NULL', 3, 'top_formation is not set', 'TOP_FORMATION', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (top_formation long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'DST_BASIC', 'CHKDB_OGW1_DST_GOOD', 'TOP_FORMATION_LONG', 3, 'top_formation is too long', 'TOP_FORMATION', 'C', 20, 'N'); insert into CHKDB_RULE -- (bottom_formation null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'DST_BASIC', 'CHKDB_OGW1_DST_GOOD', 'BOT_FORMATION_NULL', 3, 'bottom_formation is not set', 'BOTTOM_FORMATION', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (bottom_formation long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'DST_BASIC', 'CHKDB_OGW1_DST_GOOD', 'BOT_FORMATION_LONG', 3, 'bottom_formation is too long', 'BOTTOM_FORMATION', 'C', 20, 'N'); insert into CHKDB_RULE -- td_at_test_time bad? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, MIN_VALUE, MAX_VALUE) values ('OIL_GAS_WELL_1', 'DST_BASIC', 'CHKDB_OGW1_DST_GOOD', 'TD_AT_TEST_BAD', 4, 'td_at_test_time is invalid or not set', 'TD_AT_TEST_TIME', 'N', 'Y', '10.0', '20000.0'); insert into CHKDB_RULE -- init_hydrostatic_press bad? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MIN_VALUE, MAX_VALUE) values ('OIL_GAS_WELL_1', 'DST_BASIC', 'CHKDB_OGW1_DST_GOOD', 'INIT_HS_PRESS_BAD', 3, 'init_hydrostatic_press is bad', 'INIT_HYDROSTATIC_PRESS', 'N', '100.0', '100000.0'); insert into CHKDB_RULE -- VO1_INIT_PRESS bad? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MIN_VALUE, MAX_VALUE) values ('OIL_GAS_WELL_1', 'DST_BASIC', 'CHKDB_OGW1_DST_GOOD', 'VO1_INIT_PRESS_BAD', 3, 'Initial flow pressure in first flow period is bad', 'VO1_INIT_PRESS', 'N', '1.0', '100000.0'); insert into CHKDB_RULE -- VO1_FIN_PRESS bad? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MIN_VALUE, MAX_VALUE) values ('OIL_GAS_WELL_1', 'DST_BASIC', 'CHKDB_OGW1_DST_GOOD', 'VO1_FIN_PRESS_BAD', 3, 'Final flow pressure in first flow period is bad', 'VO1_FIN_PRESS', 'N', '1.0', '100000.0'); insert into CHKDB_RULE -- SI1_FIN_PRESS bad? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MIN_VALUE, MAX_VALUE) values ('OIL_GAS_WELL_1', 'DST_BASIC', 'CHKDB_OGW1_DST_GOOD', 'SI1_FIN_PRESS_BAD', 3, 'Final flow pressure in first shut-in period is bad', 'SI1_FIN_PRESS', 'N', '1.0', '100000.0'); insert into CHKDB_RULE -- VO2_INIT_PRESS bad? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MIN_VALUE, MAX_VALUE) values ('OIL_GAS_WELL_1', 'DST_BASIC', 'CHKDB_OGW1_DST_GOOD', 'VO2_INIT_PRESS_BAD', 3, 'Initial flow pressure in second flow period is bad', 'VO2_INIT_PRESS', 'N', '1.0', '100000.0'); insert into CHKDB_RULE -- VO2_FIN_PRESS bad? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MIN_VALUE, MAX_VALUE) values ('OIL_GAS_WELL_1', 'DST_BASIC', 'CHKDB_OGW1_DST_GOOD', 'VO2_FIN_PRESS_BAD', 3, 'Final flow pressure in second flow period is bad', 'VO2_FIN_PRESS', 'N', '1.0', '100000.0'); insert into CHKDB_RULE -- SI2_FIN_PRESS bad? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MIN_VALUE, MAX_VALUE) values ('OIL_GAS_WELL_1', 'DST_BASIC', 'CHKDB_OGW1_DST_GOOD', 'SI2_FIN_PRESS_BAD', 3, 'Final flow pressure in second shut-in period is bad', 'SI2_FIN_PRESS', 'N', '1.0', '100000.0'); insert into CHKDB_RULE -- fin_hydrostatic_press bad? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MIN_VALUE, MAX_VALUE) values ('OIL_GAS_WELL_1', 'DST_BASIC', 'CHKDB_OGW1_DST_GOOD', 'FIN_HS_PRESS_BAD', 3, 'fin_hydrostatic_press is bad', 'FIN_HYDROSTATIC_PRESS', 'N', '100.0', '100000.0'); insert into CHKDB_RULE -- (sulphur_status null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'DST_BASIC', 'CHKDB_OGW1_DST_GOOD', 'SULPHUR_STATUS_NULL', 3, 'sulphur_status is not set', 'SULPHUR_STATUS', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (sulphur_status long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'DST_BASIC', 'CHKDB_OGW1_DST_GOOD', 'SULPHUR_STATUS_LONG', 3, 'sulphur_status is too long', 'SULPHUR_STATUS', 'C', 20, 'N'); insert into CHKDB_RULE -- temperature bad? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MIN_VALUE, MAX_VALUE) values ('OIL_GAS_WELL_1', 'DST_BASIC', 'CHKDB_OGW1_DST_GOOD', 'TEMPERATURE_BAD', 3, 'temperature is bad', 'TEMPERATURE', 'N', '20.0', '200.0'); -- = = = = = = = = = = = = = = = = = = = = = = = -- Rules for CHKDB_OGW1_DST_PERIOD -- (period of flowing/valve-open or shutin/valve-closed -- in a good drill stem test) insert into CHKDB_RULE -- dst not? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, FOREIGN_KEY_LIST, REF_DATA_DOMAIN, REF_TABLE_NAME, REF_KEY_LIST, FK_NOT_ORPHAN_YN) values ('OIL_GAS_WELL_1', 'DST_BASIC', 'CHKDB_OGW1_DST_PERIOD', 'DST_BAD', 4, 'DST does not exist', 'UWI,RUN_NUM,TEST_NUM,TEST_UNIQ', 'OIL_GAS_WELL_1', 'CHKDB_OGW1_DST', 'UWI,RUN_NUM,TEST_NUM,TEST_UNIQ', 'Y'); insert into CHKDB_RULE -- (period_uniq long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'DST_BASIC', 'CHKDB_OGW1_DST_PERIOD', 'PERIOD_UNIQ_LONG', 3, 'period_uniq is too long', 'PERIOD_UNIQ', 'C', 20, 'N'); insert into CHKDB_RULE -- (period_uniq not num?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, IS_A_NUMBER_YN, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'DST_BASIC', 'CHKDB_OGW1_DST_PERIOD', 'PERIOD_UNIQ_NOTNUM', 3, 'period_uniq is not a number', 'PERIOD_UNIQ', 'C', 'Y', 'N'); insert into CHKDB_RULE -- (period_seq_num null?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'DST_BASIC', 'CHKDB_OGW1_DST_PERIOD', 'PERIOD_SEQ_NUM_NULL', 4, 'period_seq_num is not set', 'PERIOD_SEQ_NUM', 'N', 'Y', 'N'); insert into CHKDB_RULE -- period_seq_num bad? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MIN_VALUE, MAX_VALUE) values ('OIL_GAS_WELL_1', 'DST_BASIC', 'CHKDB_OGW1_DST_PERIOD', 'PERIOD_SEQ_NUM_BAD', 4, 'period_seq_num is invalid', 'PERIOD_SEQ_NUM', 'N', '0', '9'); insert into CHKDB_RULE -- period_type null? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN) values ('OIL_GAS_WELL_1', 'DST_BASIC', 'CHKDB_OGW1_DST_PERIOD', 'PERIOD_TYPE_NULL', 3, 'period-type is not set', 'PERIOD_TYPE', 'C', 'Y'); insert into CHKDB_RULE -- (period_type long?) (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH, ACTIVE_YN) values ('OIL_GAS_WELL_1', 'DST_BASIC', 'CHKDB_OGW1_DST_PERIOD', 'PERIOD_TYPE_LONG', 3, 'period_type is too long', 'PERIOD_TYPE', 'C', 20, 'N'); insert into CHKDB_RULE -- duration_minutes bad? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MIN_VALUE, MAX_VALUE) values ('OIL_GAS_WELL_1', 'DST_BASIC', 'CHKDB_OGW1_DST_PERIOD', 'MINUTES_BAD', 3, 'duration is missing or bad', 'DURATION_MINUTES', 'N', '1.0', '1000.0'); insert into CHKDB_RULE -- initial pressure bad? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MIN_VALUE, MAX_VALUE) values ('OIL_GAS_WELL_1', 'DST_BASIC', 'CHKDB_OGW1_DST_PERIOD', 'INIT_PRESS_BAD', 3, 'initial pressure is invalid', 'INIT_PRESS', 'N', '1.0', '100000.0'); insert into CHKDB_RULE -- final pressure bad? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, MIN_VALUE, MAX_VALUE) values ('OIL_GAS_WELL_1', 'DST_BASIC', 'CHKDB_OGW1_DST_PERIOD', 'FIN_PRESS_BAD', 3, 'final pressure is invalid or not set', 'FIN_PRESS', 'N', 'Y', '1.0', '100000.0'); -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- Copyright and Open Source License -- -- Copyright (c) Brian Marshall 2003 -- -- Permission is hereby granted, free of charge, to any -- person obtaining a copy of this software and associated -- documentation files (the "Software"), to deal in the -- Software without restriction, including without limitation -- the rights to use, copy, modify, merge, publish, distribute, -- sublicense, and/or sell copies of the Software, and to -- permit persons to whom the Software is furnished to do so, -- subject to the following conditions: -- -- The above copyright notice and this permission notice shall be -- included in all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -- OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -- HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -- WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -- OTHER DEALINGS IN THE SOFTWARE. -- -- ============================================================== ogw1_well_domain.sql0100664000076400007640000003321607760521540014024 0ustar brianbrian-- ============================================================== -- Create and setup the OIL_GAS_WELL_1 data domain. -- -- The OIL_GAS_WELL_1 domain is a set of tables/views -- containing data required for data checking in an -- oil and gas well database. -- -- This is NOT a design of how well data could/should be -- stored; it is a design of how stored data can be viewed -- (or temporarily dumped) so that data checking can be done. -- Fields are very wide so that they can (hopefully) hold -- even bad values. -- -- This is a work in progress. Suggestions and contributions -- are appreciated. -- -- Overview -- Table/View Name Primary Key Columns -- ------------------------ --------------------------------- -- CHKDB_OGW1_WELL UWI -- CHKDB_OGW1_WELL_SPUDDED UWI -- CHKDB_OGW1_WELL_COMPLETE UWI -- CHKDB_OGW1_DST UWI, RUN_NUM, TEST_NUM, TEST_UNIQ -- CHKDB_OGW1_DST_GOOD UWI, RUN_NUM, TEST_NUM, TEST_UNIQ -- CHKDB_OGW1_DST_PERIOD UWI, RUN_NUM, TEST_NUM, TEST_UNIQ, -- PERIOD_UNIQ -- -- -- ============================================================== -- Different Ways of Using this Data Domain File -- -- The 'create table' statements can be used either of two ways: -- - to create tables that are populated and then checked, or, -- - as guides to creating views into tables in your -- database that are then checked. -- -- In this file, tables are defined for basic entities -- (ex. wells, DSTs) and views are defined for subset entities -- (ex. completed-wells, good-DSTs). If this file is used -- as written, the tables must be populated prior to checking. -- -- Alternatively, you could create CHKDB_OGW1_WELL and -- CHKDB_OGW1_DST as views into tables in your corporate -- well database (and no pre-populating would be required). -- -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- CHKDB_OGW1_WELL -- one row is: an oil or gas well (or observation well, etc.). create table CHKDB_OGW1_WELL ( UWI VARCHAR2(80), NUMERIC_ID NUMBER(15,0), PARENT_UWI VARCHAR2(80), DATA_SOURCE VARCHAR2(80), WELL_NAME VARCHAR2(200), GOVT_WELL_ID VARCHAR2(80), WELL_CLASS VARCHAR2(80), -- ex. Lahee class CURRENT_STATUS VARCHAR2(80), CURRENT_STATUS_DATE DATE, SPUD_DATE DATE, FINISHED_DRILLING_DATE DATE, RIG_RELEASE_DATE DATE, COMPLETION_DATE DATE, ABANDONMENT_DATE DATE, OPERATOR VARCHAR2(80), COUNTRY VARCHAR2(80), PROVINCE_STATE VARCHAR2(80), COUNTY VARCHAR2(80), DISTRICT VARCHAR2(80), REGION VARCHAR2(80), AREA VARCHAR2(80), PROSPECT VARCHAR2(80), BOTTOM_HOLE_LATITUDE NUMBER(15,7), BOTTOM_HOLE_LONGITUDE NUMBER(15,7), SURFACE_LATITUDE NUMBER(15,7), SURFACE_LONGITUDE NUMBER(15,7), FIELD VARCHAR2(80), POOL VARCHAR2(80), KB_ELEVATION NUMBER(16,2), CASING_FLANGE_ELEVATION NUMBER(16,2), GROUND_ELEVATION NUMBER(16,2), TOTAL_DEPTH NUMBER(16,2), TRUE_VERTICAL_DEPTH NUMBER(16,2), DRILLER_TD NUMBER(16,2), LOGGER_TD NUMBER(16,2), WHIPSTOCK_DEPTH NUMBER(16,2), PLUGBACK_DEPTH NUMBER(16,2), LEASE_NAME VARCHAR2(200), LEASE_NUM VARCHAR2(80), constraint CHKDB_OGW1_WELL_PK primary key (UWI) ); -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- CHKDB_OGW1_WELL_SPUDDED -- one row is: a well with a spud-date create view CHKDB_OGW1_WELL_SPUDDED as select * from CHKDB_OGW1_WELL where SPUD_DATE is not null; -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- CHKDB_OGW1_WELL_COMPLETE -- one row is: a well that has been completed or abandoned create view CHKDB_OGW1_WELL_COMPLETE as select * from CHKDB_OGW1_WELL where COMPLETION_DATE is not null or ABANDONMENT_DATE is not null; -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- CHKDB_OGW1_DST -- one row is: a drill stem test for a well. create table CHKDB_OGW1_DST ( UWI VARCHAR2(80), RUN_NUM VARCHAR2(80) DEFAULT '1', TEST_NUM VARCHAR2(80), TEST_UNIQ VARCHAR2(80) DEFAULT '1', NUMERIC_ID NUMBER(15,0), DATA_SOURCE VARCHAR2(80), REPORT_TEST_NUM VARCHAR2(80), TEST_DATE DATE, TEST_STATUS VARCHAR2(80), GOOD_TEST_YN CHAR(1), TEST_COMPANY VARCHAR2(80), DST_TYPE VARCHAR2(80), TOP_DEPTH NUMBER(16,4), BOTTOM_DEPTH NUMBER(16,4), TOP_FORMATION VARCHAR2(200), BOTTOM_FORMATION VARCHAR2(200), TD_AT_TEST_TIME NUMBER(16,4), INIT_HYDROSTATIC_PRESS NUMBER(16,2), VO1_INIT_PRESS NUMBER(16,2), VO1_FIN_PRESS NUMBER(16,2), SI1_FIN_PRESS NUMBER(16,2), VO2_INIT_PRESS NUMBER(16,2), VO2_FIN_PRESS NUMBER(16,2), SI2_FIN_PRESS NUMBER(16,2), FIN_HYDROSTATIC_PRESS NUMBER(16,2), SULPHUR_STATUS VARCHAR2(80), TEMPERATURE NUMBER(12,2), constraint CHKDB_OGW1_DST_PK primary key (UWI, RUN_NUM, TEST_NUM, TEST_UNIQ) ); -- Note: Optional denormalization - period pressures: -- VO1 = First Valve Open (ie. flowing) period -- SI1 = First Shutin period -- VO2 = Last Valve Open (ie. flowing) period -- SI2 = Last Shutin period -- Rule sets might use these denormalized columns or -- they might use the CHKDB_OGW1_DST_PERIOD table (or both) -- depending on how the database is organized. -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- optional table/view CHKDB_OGW1_DST_LIST -- one row is: a drill stem test for a well. -- -- This table may optionally be used for values that -- cannot be determined in a 'create view' statement. -- See the section for CHKDB_OGW1_DST_GOOD. -- create table CHKDB_OGW1_DST_LIST ( -- UWI VARCHAR2(80), -- RUN_NUM VARCHAR2(80) DEFAULT '1', -- TEST_NUM VARCHAR2(80), -- TEST_UNIQ VARCHAR2(80) DEFAULT '1', -- GOOD_TEST_YN CHAR(1), -- constraint CHKDB_OGW1_DST_LIST_PK -- primary key (UWI, RUN_NUM, TEST_NUM, TEST_UNIQ) -- ); -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- CHKDB_OGW1_DST_GOOD -- one row is: a drill stem test that was not a misrun. create view CHKDB_OGW1_DST_GOOD as select * from CHKDB_OGW1_DST where GOOD_TEST_YN = 'Y'; -- or, alternatively, the where clause, above, could be: -- where TEST_STATUS = 'GOOD_TEST'; -- or, another alternative using an optional table... -- -- create view CHKDB_OGW1_DST_GOOD as -- select * from CHKDB_OGW1_DST a -- where exists -- (select 'x' from CHKDB_OGW1_DST_2 b -- where b.UWI = a.UWI -- and b.RUN_NUM = a.RUN_NUM -- and b.TEST_NUM = a.TEST_NUM -- and b.TEST_UNIQ = a.TEST_UNIQ -- and b.GOOD_TEST_YN = 'Y'); -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- CHKDB_OGW1_DST_PERIOD -- one row is: a period in a drill stem test for a well. create table CHKDB_OGW1_DST_PERIOD ( UWI VARCHAR2(80), RUN_NUM VARCHAR2(80) DEFAULT '1', TEST_NUM VARCHAR2(80), TEST_UNIQ VARCHAR2(80) DEFAULT '1', PERIOD_UNIQ VARCHAR2(80), PERIOD_SEQ_NUM NUMBER(4), PERIOD_TYPE VARCHAR2(80), DURATION_MINUTES NUMBER(4), INIT_PRESS NUMBER(16,2), FIN_PRESS NUMBER(16,2), constraint CHKDB_OGW1_DST_PERIOD_PK primary key (UWI, RUN_NUM, TEST_NUM, TEST_UNIQ, PERIOD_UNIQ) ); -- PERIOD_UNIQ is used in the key in order to handle cases -- the period sequence is not always determinable. -- If, in the database being checked, the initial and final -- hydrostatic pressures are recorded in rows in a period -- table, corresponding rows can be created in this table. -- A row for IHP could have a sequence number of 0 (zero) -- and the row for the FHP could have a sequence number -- of 9. -- If the period sequence number is always determinable, -- it should go into PERIOD_UNIQ as a string and into -- PERIOD_SEQ_NUM as a number. -- PERIOD_TYPE values might be: -- VO=Valve-Open SI=Shutin and maybe IHP and FHP -- ============================================================== -- Define the domain in CHKDB_DOMAIN delete CHKDB_DOMAIN where DATA_DOMAIN = 'OIL_GAS_WELL_1'; insert into CHKDB_DOMAIN (DATA_DOMAIN, DESCRIPTION) values ('OIL_GAS_WELL_1', 'Tables/Views for checking oil and gas well data'); -- ============================================================== -- Define the tables/views in the domain in CHKDB_TABLE delete CHKDB_TABLE where DATA_DOMAIN = 'OIL_GAS_WELL_1'; -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- Tables in the domain. -- = = = = = = = = = = = = = = = = -- table CHKDB_OGW1_WELL insert into CHKDB_TABLE (DATA_DOMAIN, TABLE_NAME, DESCRIPTION, CHECKABLE_YN, TABLE_VIEW_TV, DROP_ON_REMOVE_YN, PRIMARY_KEY_LIST) values ('OIL_GAS_WELL_1', 'CHKDB_OGW1_WELL', 'A well - an oil well, gas well, test well, etc.', 'Y', 'T', 'Y', 'UWI'); -- = = = = = = = = = = = = = = = = -- table CHKDB_OGW1_WELL_SPUDDED insert into CHKDB_TABLE (DATA_DOMAIN, TABLE_NAME, DESCRIPTION, CHECKABLE_YN, TABLE_VIEW_TV, DROP_ON_REMOVE_YN, PRIMARY_KEY_LIST) values ('OIL_GAS_WELL_1', 'CHKDB_OGW1_WELL_SPUDDED', 'A well that has been spudded', 'Y', 'V', 'Y', 'UWI'); -- = = = = = = = = = = = = = = = = -- table CHKDB_OGW1_WELL_COMPLETE insert into CHKDB_TABLE (DATA_DOMAIN, TABLE_NAME, DESCRIPTION, CHECKABLE_YN, TABLE_VIEW_TV, DROP_ON_REMOVE_YN, PRIMARY_KEY_LIST) values ('OIL_GAS_WELL_1', 'CHKDB_OGW1_WELL_COMPLETE', 'A well that has been completed or abandoned', 'Y', 'V', 'Y', 'UWI'); -- = = = = = = = = = = = = = = = = -- table CHKDB_OGW1_DST insert into CHKDB_TABLE (DATA_DOMAIN, TABLE_NAME, DESCRIPTION, CHECKABLE_YN, TABLE_VIEW_TV, DROP_ON_REMOVE_YN, PRIMARY_KEY_LIST) values ('OIL_GAS_WELL_1', 'CHKDB_OGW1_DST', 'A drill stem test', 'Y', 'T', 'Y', 'UWI, RUN_NUM, TEST_NUM, TEST_UNIQ'); -- = = = = = = = = = = = = = = = = -- table CHKDB_OGW1_DST_GOOD insert into CHKDB_TABLE (DATA_DOMAIN, TABLE_NAME, DESCRIPTION, CHECKABLE_YN, TABLE_VIEW_TV, DROP_ON_REMOVE_YN, PRIMARY_KEY_LIST) values ('OIL_GAS_WELL_1', 'CHKDB_OGW1_DST_GOOD', 'A drill stem test that is not a misrun', 'Y', 'V', 'Y', 'UWI, RUN_NUM, TEST_NUM, TEST_UNIQ'); -- = = = = = = = = = = = = = = = = -- table CHKDB_OGW1_DST_PERIOD insert into CHKDB_TABLE (DATA_DOMAIN, TABLE_NAME, DESCRIPTION, CHECKABLE_YN, TABLE_VIEW_TV, DROP_ON_REMOVE_YN, PRIMARY_KEY_LIST) values ('OIL_GAS_WELL_1', 'CHKDB_OGW1_DST_PERIOD', 'A flow or shut-in period in a drill stem test', 'Y', 'T', 'Y', 'UWI, RUN_NUM, TEST_NUM, TEST_UNIQ, PERIOD_SEQ_NUM'); -- = = = = = = = = = = = = = = = = -- table CHKDB_OGW1_DST_2 -- This next one, if it is used, does not need any keys -- because it is not a checkable table; it is a support -- table that could be used to create a view into the table -- of DSTs. -- insert into CHKDB_TABLE (DATA_DOMAIN, TABLE_NAME, -- DESCRIPTION, -- CHECKABLE_YN, TABLE_VIEW_TV, DROP_ON_REMOVE_YN) -- values ('OIL_GAS_WELL_1', 'CHKDB_OGW1_DST_2', -- 'A flow or shut-in period in a drill stem test', -- 'N', 'T', 'Y'); -- ============================================================== -- Copyright and Open Source License -- -- Copyright (c) Brian Marshall 2003 -- -- Permission is hereby granted, free of charge, to any -- person obtaining a copy of this software and associated -- documentation files (the "Software"), to deal in the -- Software without restriction, including without limitation -- the rights to use, copy, modify, merge, publish, distribute, -- sublicense, and/or sell copies of the Software, and to -- permit persons to whom the Software is furnished to do so, -- subject to the following conditions: -- -- The above copyright notice and this permission notice shall be -- included in all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -- OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -- HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -- WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -- OTHER DEALINGS IN THE SOFTWARE. -- -- ================================================================= README.txt0100664000076400007640000002127007760521540011547 0ustar brianbrian================================================================= README.txt - Using ChkDB Rule-Based Data Checking (After it has been installed) Contents: Re-Running Checks www.chkdb.org Domains and Rule-Sets Populating a Domain Running Checks Errors while Running Checks Reviewing Results Running the Sample Adding Tables to Domains = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = Re-Running Checks You are a DBA or SQL expert... you didn't setup ChkDB, but you have now been told to "Run the ChkDB checks again". This section describes how to do that. You need to know: - the database (the Oracle username and password) - the "data domain" name - the names of the tables to be checked Login to SQL*Plus as the appropriate user. These queries should each result in some rows: select * from tab where tname like 'CHKDB%'; select * from CHKDB_DOMAIN; select * from CHKDB_RULESET; Pick domains from the results of the select from the CHKDB_DOMAIN table. Note that the tables specified to be checked might not be the tables in your database; they might be views into those tables or temporary tables to which data is dumped. You might want to... select DATA_DOMAIN, count(*) from CHKDB_TABLE group by DATA_DOMAIN; and then query CHKDB_TABLE to identify the tables to be checked. In some cases, this could include multiple views into the same database table. Checks are run by executing a procedure in a package, passing the domain and the table name. The table name can include the wildcard character '%'. Ex. To check the CLIENT table in the BOOKS domain: SQL> call CHKDB_CHECK_DB.APPLY_RULES('BOOKS','CLIENT'); Ex. To check all tables beginning with 'ACCT' in the BOOKS domain: SQL> call CHKDB_CHECK_DB.APPLY_RULES('BOOKS','ACCT%'); Checking can take time - depending on table size, indexes, and other factors, maybe a long time. It is very wise to run checks on a single large table before attempting to run checks on multiple large tables. Results are written to the table CHKDB_RESULT. See the file: sample_queries.sql = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = www.chkdb.org The ChkDB website www.chkdb.org includes: - a page where you can download ChkDB (zip or gz) - data-domain definitions and rule-set summaries - the .txt files in the release (including this one) - the ChkDB table-create script and e-r diagram - pages showing the sample files and how they are used. - information about the ChkDB project = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = Domains and Rule-Sets A ChkDB distribution comes with files that define: - data domains: tables/views that can be checked - rule-sets: rules to apply to a data domain. Domain and rule-set files are SQL script files. To load a domain or rule-set into a database, you (or your DBA) runs the script file with SQL*Plus. Existing domains and rule-sets are described at: http://www.chkdb.org/rulesets.htm You can open domain or rule-set script files using a text editor (like Notepad). Remove a domain from a database by executing the script remove_domain.sql, specifying the domain name. Ex. If the domain is CHKDB_SAMP_HR: sql> @remove_domain.sql CHKDB_SAMP_HR This will drop tables listed in CHKDB_TABLE, for this domain, where DROP_ON_REMOVE_YN is set to 'Y'. This script will also delete all rule-sets in the domain. Remove a rule-set (along with its rules and results) by executing the script remove_ruleset.sql, specifying the domain name and rule-set name. Ex: sql> @remove_ruleset CHKDB_SAMP_HR SAMP_RULES = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = Populating a Domain A domain defines a set of tables or views to be checked. Data checking can be done two ways: - checking views into your database - checking tables that are populated from your database For each 'create table' statement in a domain script, you can: - define a view into your database based on the 'create table' statement, or, - create the table and populate it from your database with some software before checking is done. Sometimes, you would like to create a view that is just a subset of another view or table, but it would be difficult to specify the 'create view' statement to select the desired subset. One way to handle this is to create a table with the same primary key as the source table. You populate this table with the keys of the subset using some software. Then you can define the view simply, maybe something like this: CREATE VIEW EMP_SUPERVISOR as SELECT * from EMP e where exists (select 'x' from SUPERVISOR_LIST s where s.EMP_ID = e.EMP_ID); = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = Running Checks To run checks against one or more tables, you run a procedure in a stored PL/SQL package. You control which rules are applied with the ACTIVE_YN column in the ChkDB tables. You can turn checking on or off for a domain, table, rule-set or individual rule. You run checks by calling a procedure. You can specify a data domain and a table name. The table name can include the wild-card character '%'. Examples (using SQL*Plus): To check the CHKDB_SAMP_DEPT table in the CHKDB_SAMP_HR domain: SQL> CALL CHKDB_CHECK_DB.APPLY_RULES('CHKDB_SAMP_HR','CHKDB_SAMP_DEPT'); To check all the tables whose names begin with CHKDB_SAMP in the CHKDB_SAMP_HR domain: SQL> CALL CHKDB_CHECK_DB.APPLY_RULES('CHKDB_SAMP_HR','CHKDB_SAMP%'); To apply all active rules in the CHKDB_SAMP_HR domain: SQL> CALL CHKDB_CHECK_DB.APPLY_RULES('CHKDB_SAMP_HR','%'); Note that when a check is run for one or more tables, all existing results for those tables is first deleted. = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = Errors while Running Checks If an error occurs when you run a check, it may be a result of a rule that was not specified correctly in the CHKDB_RULE table. See the table CHKDB_RULE_ERR - if an error occurred because of how a rule is defined, it will be described in this table. The table CHKDB_RULE_SQL has the SQL that was generated for each rule that is executed. If you create or modify rules, remember: - Inside a string delimited by single quotes, you specify a single quote as a pair of them - ex. 'don''t wait'. - In the SQL generated for a rule, the table to which the rule applies has an alias of t. You may need this alias in where clauses that use 'exists' or if the table being tested and CHKDB tables have columns with the same name. = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = Reviewing Results When a check is run and a rule is found to apply to a row in the table being checked, a row is inserted into the CHKDB_RESULT table. You may have an application or a way of running reports to help you review these results, or you may run queries from SQL*Plus. A ChkDB distribution includes sample queries in a file called: sample_queries.sql = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = Running the Sample You can execute run_sample.sql to: - create and populate a sample database of two tables - define a sample domain and rule-set - run checks against the sample database - run sample queries (overwriting sample_results.txt) Alternatively, you may use the run_sample.sql script as a guide to executing the various sample scripts one at a time. You might want to make a copy of sample_results.txt before the file is overwritten by the sample queries. = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = Copyright and Open Source License Copyright (c) Brian Marshall 2003 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================================= RELEASE.txt0100664000076400007640000000561307760521540011675 0ustar brianbrian================================================================= RELEASE.txt - ChkDB Releases and Contribution Credits - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Developers and Contributers [BRM] Brian Marshall CleanDB bmarshall@cleandb.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Current Status See the Rule-Sets page of the web-site: http://www.chkdb.org/rulesets.htm - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Release History Release Date Status Contributer ------- ----------- -------------- -------------- 0.9.7 2003-11-24 Beta [BRM] This is a 'minor enhancements' release. - chkdb_software.sql: - partial-foreign-key check sql improved - insert into CHKDB_RULE_ERR if rule has no effect - OIL_GAS_WELL_1/DST_BASIC - CHKDB_OGW1_DST_PERIOD: - rule INIT_PRESS_BAD: NOT_NULL_YN is now null 0.9.6 2003-11-19 Beta [BRM] - OIL_GAS_WELL_1 domain: - many new rules for WELL_HDR_BASIC and DST_BASIC - ruleset_id WELL_HDR_BASIC was WELL_BASIC - README.txt was updated, usage examples were fixed 0.9.5 2003-11-14 Beta [BRM] - OIL_GAS_SEIS_INV domain: - multiple rulesets added - info-item: DATA_VERSION was ITEM_VERSION - phys-item: ITEM_SIZE, ITEM_DENSITY now varchar2 - added checks: COL_NOT_EQ_COL2_YN, COL_NOT_NE_COL2_YN - added check: IS_A_NUMBER_YN - remove_domain.sql: also remove, rulesets, rules, results - improved sample queries 0.9.4 2003-11-01 Beta [BRM] - database, software changed to specify keys in new way - sample database/domain/ruleset now tests all check types - added check types: MAX_LENGTH, NO_ILLEGAL_CHARS - OIL_GAS_WELL_1 domain changed to specify keys new way - ogw1 rulesets converted to use predefined checks - ogw1_wellbasic_ruleset.sql: longitude check bug fixed 0.9.3 2003-10-21 Beta [BRM] - New tables: CHKDB_KEY, CHKDB_KEY_COLUMN - Table CHKDB_TABLE: removed column PRIMARY_KEY_SPEC - Table CHKDB_RULE: new columns for predefined rules - Improved ChkDB removal, domain and rule-set removal - New rule-set for OIL_GAS_WELL_1: DST_BASIC - Domain 1st draft: OIL_GAS_SEIS_INV (seismic inventory) 0.9.2 2003-09-11 Beta [BRM] - Table CHKDB_RULESET renamed from CHKDB_RULE_SET - Column RULESET_ID renamed from RULE_SET - New tables: CHKDB_RULE_SQL, CHKDB_RULE_ERR - New domain: OIL_GAS_WELL_1 - New ruleset for OIL_GAS_WELL_1: WELL_BASIC 0.9.1 2003-09-02 Beta [BRM] - Revision: column DESCRIPTION add/renamed in tables CHKDB_TABLE, CHKDB_RULESET, CHKDB_RULE 0.9.0 2003-09-02 Beta [BRM] First release. - PL/SQL Software for Oracle - sample domain and rule-set (no real-world domains or rule-sets, yet) ================================================================= remove_chkdb.sql0100664000076400007640000000304607760521540013223 0ustar brianbrian-- ================================================================= -- Drop tables and packages for ChkDB rule-based data checking. -- remove domains to drop tables created just for ChkDB @@ remove_domain.sql % @@ drop_chkdb.sql drop package CHKDB_CHECK_DB; -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- Copyright and Open Source License -- -- Copyright (c) Brian Marshall 2003 -- -- Permission is hereby granted, free of charge, to any -- person obtaining a copy of this software and associated -- documentation files (the "Software"), to deal in the -- Software without restriction, including without limitation -- the rights to use, copy, modify, merge, publish, distribute, -- sublicense, and/or sell copies of the Software, and to -- permit persons to whom the Software is furnished to do so, -- subject to the following conditions: -- -- The above copyright notice and this permission notice shall be -- included in all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -- OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -- HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -- WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -- OTHER DEALINGS IN THE SOFTWARE. -- -- ================================================================= remove_domain.sql0100664000076400007640000000457607760521540013430 0ustar brianbrian-- ================================================================= -- Remove a ChkDB data domain (and its tables, rule-sets and rules -- and results) from the ChkDB tables in a database. Tables/views -- defined by the domain will be dropped if that is what is -- specified in the CHKDB_TABLE table. -- -- The domain name may contain the wildcard character '%'. -- -- Oracle usage (from SQL*Plus): -- @ remove_domain.sql -- Ex1: @ remove_domain.sql CHKDB_SAMP_HR -- Ex2: @ remove_domain.sql HR% -- Ex1: @ remove_domain.sql % define DataDomain = &&1 set verify off CALL CHKDB_CHECK_DB.DROP_DOMAIN_TABLES ('&DataDomain'); delete from CHKDB_RULESET where DATA_DOMAIN like '&DataDomain'; delete from CHKDB_RULE where DATA_DOMAIN like '&DataDomain'; delete from CHKDB_RULE_ERR where DATA_DOMAIN like '&DataDomain'; delete from CHKDB_RULE_SQL where DATA_DOMAIN like '&DataDomain'; delete from CHKDB_RESULT where DATA_DOMAIN like '&DataDomain'; delete from CHKDB_TABLE where DATA_DOMAIN like '&DataDomain'; delete from CHKDB_DOMAIN where DATA_DOMAIN like '&DataDomain'; -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- Copyright and Open Source License -- -- Copyright (c) Brian Marshall 2003 -- -- Permission is hereby granted, free of charge, to any -- person obtaining a copy of this software and associated -- documentation files (the "Software"), to deal in the -- Software without restriction, including without limitation -- the rights to use, copy, modify, merge, publish, distribute, -- sublicense, and/or sell copies of the Software, and to -- permit persons to whom the Software is furnished to do so, -- subject to the following conditions: -- -- The above copyright notice and this permission notice shall be -- included in all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -- OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -- HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -- WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -- OTHER DEALINGS IN THE SOFTWARE. -- -- ================================================================= remove_ruleset.sql0100664000076400007640000000511307760521540013630 0ustar brianbrian-- ================================================================= -- Remove a ChkDB ruleset from a database, -- including all rules and results for the ruleset. -- -- The specified domain and ruleset -- can include the wildcard character '%'. -- -- Oracle usage (using SQL*Plus): -- @ remove_ruleset.sql -- Ex 1: in the CHKDB_SAMP_HR domain, the SAMP_HR_RULES ruleset: -- @ remove_ruleset.sql CHKDB_SAMP_HR SAMP_HR_RULES -- Ex 2: in HR_BASIC domain, rulesets with names starting 'EMP': -- @ remove_ruleset.sql HR_BASIC EMP% -- Ex 3: all rulesets in the HR_BASIC domain: -- @ remove_ruleset.sql HR_BASIC % -- Ex 4: all rulesets in all ChkDB domains: -- @ remove_ruleset.sql % % define DataDomain = &&1 define RuleSet = &&2 set verify off delete from CHKDB_RULE where DATA_DOMAIN like '&DataDomain' and RULESET_ID like '&RuleSet'; delete from CHKDB_RULESET where DATA_DOMAIN like '&DataDomain' and RULESET_ID like '&RuleSet'; delete from CHKDB_RESULT where DATA_DOMAIN like '&DataDomain' and RULESET_ID like '&RuleSet'; delete from CHKDB_RULE_SQL where DATA_DOMAIN like '&DataDomain' and RULESET_ID like '&RuleSet'; delete from CHKDB_RULE_ERR where DATA_DOMAIN like '&DataDomain' and RULESET_ID like '&RuleSet'; -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- Copyright and Open Source License -- -- Copyright (c) Brian Marshall 2003 -- -- Permission is hereby granted, free of charge, to any -- person obtaining a copy of this software and associated -- documentation files (the "Software"), to deal in the -- Software without restriction, including without limitation -- the rights to use, copy, modify, merge, publish, distribute, -- sublicense, and/or sell copies of the Software, and to -- permit persons to whom the Software is furnished to do so, -- subject to the following conditions: -- -- The above copyright notice and this permission notice shall be -- included in all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -- OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -- HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -- WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -- OTHER DEALINGS IN THE SOFTWARE. -- -- ================================================================= remove_sample.sql0100755000076400007640000000263507760521540013435 0ustar brianbrian-- ============================================================== -- ChkDB - Remove the ChkDB sample rows. @@ remove_domain.sql CHKDB_SAMP_HR -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- Copyright and Open Source License -- -- Copyright (c) Brian Marshall 2003 -- -- Permission is hereby granted, free of charge, to any -- person obtaining a copy of this software and associated -- documentation files (the "Software"), to deal in the -- Software without restriction, including without limitation -- the rights to use, copy, modify, merge, publish, distribute, -- sublicense, and/or sell copies of the Software, and to -- permit persons to whom the Software is furnished to do so, -- subject to the following conditions: -- -- The above copyright notice and this permission notice shall be -- included in all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -- OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -- HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -- WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -- OTHER DEALINGS IN THE SOFTWARE. -- -- ============================================================== run_sample.sql0100755000076400007640000000575607760521540012753 0ustar brianbrian-- ============================================================== -- ChkDB - Run the ChkDB sample checks. -- -- Before this script is run, ChkDB must be setup -- by running: setup_chkdb.sql -- -- This script will: -- - create and populate the sample database (3 tables) -- - create a view into each of the two sample tables -- - insert into the CHKDB tables to describe this -- sample database and the rule-sets and rules. -- - run sample checks (ie. apply sample rules) -- - run queries, (over)writing: chkdb_samp_results.txt -- -- To remove the sample database and setup, execute: -- SQL> remove_domain.sql CHKDB_SAMP_HR -- -- To re-run this script, first execute: -- SQL> remove_domain.sql CHKDB_SAMP_HR -- -- To just re-run the queries, (over)writing the file -- chkdb_samp_results.txt, see the block of code below, -- just before the copyright and license stuff. -- -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = prompt Setup and run the ChkDB sample... prompt prompt This will create/overwrite: chkdb_samp_results.txt prompt Create and populate the sample database (3 tables) @@ sample_database.sql prompt Define a sample data domain prompt that describes the tables/views to be checked... @@ sample_domain.sql prompt Implement the sample domain for prompt the sample database to be checked... @@ sample_implement.sql prompt Define a sample rule-set prompt with the rules to be applied to a dataset... @@ sample_ruleset.sql prompt Run sample checks (ie. apply sample rules) @@ sample_checks.sql prompt Run queries, writing results to chkdb_samp_results.txt set pagesize 200 set linesize 70 set trimspool on spool chkdb_samp_results.txt @@ sample_queries.sql spool off -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- Copyright and Open Source License -- -- Copyright (c) Brian Marshall 2003 -- -- Permission is hereby granted, free of charge, to any -- person obtaining a copy of this software and associated -- documentation files (the "Software"), to deal in the -- Software without restriction, including without limitation -- the rights to use, copy, modify, merge, publish, distribute, -- sublicense, and/or sell copies of the Software, and to -- permit persons to whom the Software is furnished to do so, -- subject to the following conditions: -- -- The above copyright notice and this permission notice shall be -- included in all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -- OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -- HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -- WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -- OTHER DEALINGS IN THE SOFTWARE. -- -- ============================================================== sample_checks.sql0100755000076400007640000000604507760521540013377 0ustar brianbrian-- ============================================================== -- ChkDB - Sample Checks - Run sample checks. -- -- This script shows how to run sample checks (ie. apply -- rules) against the sample database using the sample -- rule-sets in the CHKDB_SAMP_HR domain. -- -- -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- Do a check (a couple of examples) -- Apply active rules in active rule-sets -- for specified active tables in an active domain. -- -- Note: Before rules are applied to a table, all rows -- in CHKDB_RESULT for that table are first deleted. -- which means that: -- If two people are independently doing checks against -- the same table, one of them should be using a view -- or a copy of the table with a different name so that -- their checks do not interfere with each other. -- Check the CHKDB_SAMP_HR_DEPT table... call CHKDB_CHECK_DB.APPLY_RULES ('CHKDB_SAMP_HR', 'CHKDB_SAMP_HR_DEPT'); -- Multiple tables may be checked in one call by using -- the wildcard character '%' in the table-name... call CHKDB_CHECK_DB.APPLY_RULES ('CHKDB_SAMP_HR', 'CHKDB_SAMP_%'); -- Note that this last call will override the results of -- the previous call. -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- If You Get Errors Running Checks... -- -- If you get errors when you run CHKDB_CHECK_DB.APPLY_RULES, -- it may be a problem with how rules are specified in the -- CHKDB_RULE table. -- -- See the table CHKDB_RULE_ERR - if an error occurs as a -- result of a bad rule, it will be described in this table. -- -- The table CHKDB_RULE_SQL contains the SQL generated for -- rules that are executed. -- -- See the README.txt file for more information. -- -- -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- Copyright and Open Source License -- -- Copyright (c) Brian Marshall 2003 -- -- Permission is hereby granted, free of charge, to any -- person obtaining a copy of this software and associated -- documentation files (the "Software"), to deal in the -- Software without restriction, including without limitation -- the rights to use, copy, modify, merge, publish, distribute, -- sublicense, and/or sell copies of the Software, and to -- permit persons to whom the Software is furnished to do so, -- subject to the following conditions: -- -- The above copyright notice and this permission notice shall be -- included in all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -- OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -- HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -- WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -- OTHER DEALINGS IN THE SOFTWARE. -- -- ============================================================== sample_database.sql0100755000076400007640000001675007760521540013707 0ustar brianbrian-- ============================================================== -- ChkDB - Populate a tiny sample database -- -- This tiny sample database is an example of a corporate -- database that is to be checked. -- -- Note: Bad data has been deliberately included. -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- Table Definitions -- Note that FLOOR is a VARCHAR2 but it should contain numbers create table CHKDB_SAMP_DEPT ( DEPT_NAME VARCHAR2(20), MANAGER VARCHAR2(20), FLOOR VARCHAR2(5), BUDGET_AMT NUMBER(10,2), BUDGET_APPRV NUMBER(10,2), BUDGET_EST NUMBER(10,2), constraint CHKDB_SAMP_DEPT_PK primary key (DEPT_NAME) ); create table CHKDB_SAMP_GROUP ( DEPT_NAME VARCHAR2(20), GROUP_NAME VARCHAR2(20), ACTIVE_YN CHAR(1) NOT NULL, LONG_NAME VARCHAR2(60), constraint CHKDB_SAMP_GROUP_PK primary key (DEPT_NAME,GROUP_NAME) ); create table CHKDB_SAMP_EMPL ( EMPL_ID VARCHAR2(20), EMPL_NAME VARCHAR2(60) NOT NULL, DEPT_NAME VARCHAR2(20), GROUP_NAME VARCHAR2(20), POSITION VARCHAR2(40), HIRE_DATE DATE, LAST_REVIEW DATE, PROBATION_ENDS DATE, VACN_DAYS NUMBER(6,2), VACN_USED NUMBER(6,2), constraint CHKDB_SAMP_EMPL_PK primary key (EMPL_ID) ); -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- Populate the sample tables -- = = = = = = = = = = = = = = -- Departments -- Note: BUDGET_EST much greater BUDGET_AMT insert into CHKDB_SAMP_DEPT (DEPT_NAME, MANAGER, FLOOR, BUDGET_AMT, BUDGET_APPRV, BUDGET_EST) values ('MANAGEMENT', 'E1', '1', 265000.00, 265000.00, 280000.00); -- Note that FLOOR is not a number insert into CHKDB_SAMP_DEPT (DEPT_NAME, MANAGER, FLOOR, BUDGET_AMT, BUDGET_APPRV, BUDGET_EST) values ('DEVELOPMENT', 'E2', '@', 190000.00, 190000.00, 185000.00); -- Note bad BUDGET_EST - probably missing zero -- Note BUDGET_AMT <> BUDGET_APPRV -- Note missing FLOOR insert into CHKDB_SAMP_DEPT (DEPT_NAME, MANAGER, FLOOR, BUDGET_AMT, BUDGET_APPRV, BUDGET_EST) values ('SALES', 'E3', null, 170000.00, 160000.00, 17400.00); -- note missing MANAGER and bad FLOOR -- note bad FLOOR insert into CHKDB_SAMP_DEPT (DEPT_NAME, MANAGER, FLOOR, BUDGET_AMT, BUDGET_APPRV, BUDGET_EST) values ('DEPT_999', null, '444', null, null, null); -- = = = = = = = = = = = = = = -- Groups -- note bad DEPT_NAME insert into CHKDB_SAMP_GROUP (DEPT_NAME, GROUP_NAME, ACTIVE_YN, LONG_NAME) values ('DEVELOPMENTTT', 'APP_TEAM', 'Y', 'Application Development Team'); -- note bad ACTIVE_YN: U - should be Y or N insert into CHKDB_SAMP_GROUP (DEPT_NAME, GROUP_NAME, ACTIVE_YN, LONG_NAME) values ('DEVELOPMENT', 'WEB_TEAM', 'U', 'Web Development Team'); -- = = = = = = = = = = = = = = -- Employees -- note that LAST_REVIEW is the same as HIRE_DATE insert into CHKDB_SAMP_EMPL (EMPL_ID, EMPL_NAME, DEPT_NAME, GROUP_NAME, POSITION, VACN_DAYS, VACN_USED, HIRE_DATE, LAST_REVIEW) values ('E1', 'Bob', 'MANAGEMENT', null, 'President', 25.0, 2.0, to_date('1998-04-12','YYYY-MM-DD'), to_date('1998-04-12','YYYY-MM-DD')); -- note that POSITION contains an illegal comma insert into CHKDB_SAMP_EMPL (EMPL_ID, EMPL_NAME, DEPT_NAME, GROUP_NAME, POSITION, VACN_DAYS, VACN_USED, HIRE_DATE, LAST_REVIEW) values ('E2', 'Tom', 'DEVELOPMENT', null, 'Manager, Development', 20, 5, to_date('1998-09-01','YYYY-MM-DD'), null); -- note incorrect DEPT_NAME: Development - should be: Sales insert into CHKDB_SAMP_EMPL (EMPL_ID, EMPL_NAME, DEPT_NAME, GROUP_NAME, POSITION, VACN_DAYS, VACN_USED, HIRE_DATE, LAST_REVIEW) values ('E3', 'Sue', 'DEVELOPMENT', null, 'Manager of Sales', 20, 1, to_date('1999-05-01','YYYY-MM-DD'), to_date('2003-02-06','YYYY-MM-DD')); -- note bad LAST_REVIEW - should not be after today insert into CHKDB_SAMP_EMPL (EMPL_ID, EMPL_NAME, DEPT_NAME, GROUP_NAME, POSITION, VACN_DAYS, VACN_USED, HIRE_DATE, LAST_REVIEW) values ('E4', 'Eve', 'DEVELOPMENT', 'APP_TEAM', 'Developer', 15, 0, to_date('1998-11-01','YYYY-MM-DD'), to_date('2303-01-27','YYYY-MM-DD')); -- note bad partial foreign key (DEPT_NAME, GROUP_NAME) -- where DEPT_NAME is null but GROUP_NAME is set -- note bad VACN_USED: 33 - should not be > VACN_DAYS -- note bad PROBATION_ENDS - should be after today insert into CHKDB_SAMP_EMPL (EMPL_ID, EMPL_NAME, DEPT_NAME, GROUP_NAME, POSITION, VACN_DAYS, VACN_USED, HIRE_DATE, LAST_REVIEW, PROBATION_ENDS) values ('E5', 'Jim', null, 'WEB_TEAM', 'Developer', 15, 33, to_date('2003-03-01','YYYY-MM-DD'), null, to_date('1903-06-01','YYYY-MM-DD')); -- note bad POSITION: too long -- note incorrect VACN_DAYS: 5 - should be >= 10 -- note bad LAST_REVIEW - should be after hire date insert into CHKDB_SAMP_EMPL (EMPL_ID, EMPL_NAME, DEPT_NAME, GROUP_NAME, POSITION, VACN_DAYS, VACN_USED, HIRE_DATE, LAST_REVIEW) values ('E6', 'Sam', 'SALES', null, 'Sales Representativeee', 5, 1, to_date('2001-02-01','YYYY-MM-DD'), to_date('1903-01-27','YYYY-MM-DD')); -- note bad DEPT_NAME -- note bad HIRE_DATE -- note bad POSITION insert into CHKDB_SAMP_EMPL (EMPL_ID, EMPL_NAME, DEPT_NAME, GROUP_NAME, POSITION, VACN_DAYS, VACN_USED, HIRE_DATE, LAST_REVIEW) values ('E7', 'Ann', 'SALESSS', null, null, 15, 0, to_date('1901-11-01','YYYY-MM-DD'), to_date('2003-01-24','YYYY-MM-DD')); -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- Copyright and Open Source License -- -- Copyright (c) Brian Marshall 2003 -- -- Permission is hereby granted, free of charge, to any -- person obtaining a copy of this software and associated -- documentation files (the "Software"), to deal in the -- Software without restriction, including without limitation -- the rights to use, copy, modify, merge, publish, distribute, -- sublicense, and/or sell copies of the Software, and to -- permit persons to whom the Software is furnished to do so, -- subject to the following conditions: -- -- The above copyright notice and this permission notice shall be -- included in all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -- OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -- HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -- WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -- OTHER DEALINGS IN THE SOFTWARE. -- -- ============================================================== sample_domain.sql0100755000076400007640000001444107760521540013405 0ustar brianbrian-- ============================================================== -- ChkDB - Sample Domain - CHKDB_SAMP_HR -- -- Define a sample data domain that is an abstract view into -- a sample Human Resources database. A sample set of rules -- has been written for this domain. -- -- Before this script is run, the ChkDB tables must exist. -- Create the ChkDB tables with: chkdb_tables.sql -- or run setup_chkdb.sql -- -- Populating the CHKDB tables with insert statements -- is fairly portable but lengthy and tedious. -- We need a nice GUI app that reads and writes this -- information from XML files. -- -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- Define the tables/views in the domain. -- -- Note that columns are extra wide in domains in the -- hope that they will hold even bad data. -- -- The create statements are commented out because, in this -- case, we implement the domain as views into the database -- to be checked. See sample_implement.sql -- -- Alternatively, we could have created the tables below, -- and populated them from the database prior to doing checks. -- -- In any case, whether tables or views, they should look -- like this: -- -- create table CHKDB_SAMP_HR_DEPT ( -- DEPT_ID VARCHAR2(40), -- DEPT_NAME VARCHAR2(80) NOT NULL, -- MANAGER VARCHAR2(40), -- FLOOR VARCHAR2(20), -- BUDGET_AMT NUMBER(15,2), -- BUDGET_APPRV NUMBER(15,2), -- BUDGET_EST NUMBER(15,2), -- constraint CHKDB_SAMP_HR_DEPT_PK -- primary key (DEPT_ID) -- ); -- -- create table CHKDB_SAMP_HR_GROUP ( -- DEPT_ID VARCHAR2(40), -- GROUP_ID VARCHAR2(40), -- GROUP_NAME VARCHAR2(80), -- ACTIVE_YN CHAR(1) NOT NULL, -- GROUP_DESC VARCHAR2(200), -- constraint CHKDB_SAMP_HR_GROUP_PK -- primary key (DEPT_ID,GROUP_ID) -- ); -- -- create table CHKDB_SAMP_HR_EMP ( -- EMP_ID VARCHAR2(40), -- EMP_NAME VARCHAR2(80) NOT NULL, -- DEPT_ID VARCHAR2(40), -- GROUP_ID VARCHAR2(40), -- POSITION VARCHAR2(80), -- HIRE_DT DATE, -- LAST_REVIEW_DT DATE, -- PROBATION_END_DT DATE, -- VACN_DAYS_TOT NUMBER(10,2), -- VACN_DAYS_USED NUMBER(10,2), -- constraint CHKDB_SAMP_HR_EMP_PK -- primary key (EMP_ID) -- ); -- ============================================================== -- Define the domain in CHKDB_DOMAIN delete CHKDB_DOMAIN where DATA_DOMAIN = 'CHKDB_SAMP_HR'; insert into CHKDB_DOMAIN (DATA_DOMAIN, DESCRIPTION) values ('CHKDB_SAMP_HR', 'Sample Data Domain for Human Resources'); -- ============================================================== -- Define the tables/views in the domain in CHKDB_TABLE delete CHKDB_TABLE where DATA_DOMAIN = 'CHKDB_SAMP_HR'; -- = = = = = = = = = = = = = = = = -- table CHKDB_SAMP_HR_DEPT insert into CHKDB_TABLE (DATA_DOMAIN, TABLE_NAME, DESCRIPTION, PRIMARY_KEY_LIST, CHECKABLE_YN, TABLE_VIEW_TV, DROP_ON_REMOVE_YN) values ('CHKDB_SAMP_HR', 'CHKDB_SAMP_HR_DEPT', 'Departments in the company', 'DEPT_ID', 'Y', 'V', 'Y'); -- = = = = = = = = = = = = = = = = -- table CHKDB_SAMP_HR_GROUP insert into CHKDB_TABLE (DATA_DOMAIN, TABLE_NAME, DESCRIPTION, PRIMARY_KEY_LIST, CHECKABLE_YN, TABLE_VIEW_TV, DROP_ON_REMOVE_YN) values ('CHKDB_SAMP_HR', 'CHKDB_SAMP_HR_GROUP', 'Groups in a department', 'DEPT_ID,GROUP_ID', 'Y', 'V', 'Y'); -- = = = = = = = = = = = = = = = = -- table CHKDB_SAMP_HR_EMP insert into CHKDB_TABLE (DATA_DOMAIN, TABLE_NAME, DESCRIPTION, PRIMARY_KEY_LIST, CHECKABLE_YN, TABLE_VIEW_TV, DROP_ON_REMOVE_YN) values ('CHKDB_SAMP_HR', 'CHKDB_SAMP_HR_EMP', 'Employees in the company', 'EMP_ID', 'Y', 'V', 'Y'); -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- Define the other non-checkable tables. -- -- Non-checkable tables, that are nevertheless involved -- with ChkDB checking, may be inserted into CHKDB_TABLE: -- - to record that they are involved with ChkDB checking -- - to (optionally) delete them when ChkDB is removed -- -- In this case, when ChkDB is removed, we want to delete -- the sample 'corporate database' tables. insert into CHKDB_TABLE ( DATA_DOMAIN, TABLE_NAME, CHECKABLE_YN, TABLE_VIEW_TV, DROP_ON_REMOVE_YN) values ('CHKDB_SAMP_HR', 'CHKDB_SAMP_DEPT', 'N', 'T', 'Y'); insert into CHKDB_TABLE ( DATA_DOMAIN, TABLE_NAME, CHECKABLE_YN, TABLE_VIEW_TV, DROP_ON_REMOVE_YN) values ('CHKDB_SAMP_HR', 'CHKDB_SAMP_GROUP', 'N', 'T', 'Y'); insert into CHKDB_TABLE ( DATA_DOMAIN, TABLE_NAME, CHECKABLE_YN, TABLE_VIEW_TV, DROP_ON_REMOVE_YN) values ('CHKDB_SAMP_HR', 'CHKDB_SAMP_EMPL', 'N', 'T', 'Y'); -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- Copyright and Open Source License -- -- Copyright (c) Brian Marshall 2003 -- -- Permission is hereby granted, free of charge, to any -- person obtaining a copy of this software and associated -- documentation files (the "Software"), to deal in the -- Software without restriction, including without limitation -- the rights to use, copy, modify, merge, publish, distribute, -- sublicense, and/or sell copies of the Software, and to -- permit persons to whom the Software is furnished to do so, -- subject to the following conditions: -- -- The above copyright notice and this permission notice shall be -- included in all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -- OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -- HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -- WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -- OTHER DEALINGS IN THE SOFTWARE. -- -- ============================================================== sample_implement.sql0100755000076400007640000000660007760521540014126 0ustar brianbrian-- ============================================================== -- ChkDB - Sample Implementation of domain: CHKDB_SAMP_HR -- -- Setup the tables/views in the CHKDB_SAMP_HR data domain. -- In this case, we are defining views into the sample -- database that match the table definitions in the domain. -- -- Alternatively, we could have created the tables defined -- in the domain and populate them from the database prior -- to running checks. -- -- This is an example of the work that must be done to use -- ChkDB domains and rule-sets for a particular database. -- -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- Implement the domain as views into the database. -- = = = = = = = = = = = = = = = = = = = = = -- Departments create view CHKDB_SAMP_HR_DEPT as select DEPT_NAME "DEPT_ID", DEPT_NAME "DEPT_NAME", MANAGER "MANAGER", FLOOR "FLOOR", BUDGET_AMT "BUDGET_AMT", BUDGET_APPRV "BUDGET_APPRV", BUDGET_EST "BUDGET_EST" from CHKDB_SAMP_DEPT; -- Note: the sample department table does not have -- separate id and name fields, so name is used for both. -- = = = = = = = = = = = = = = = = = = = = = -- Groups in a Department. create view CHKDB_SAMP_HR_GROUP as select DEPT_NAME "DEPT_ID", GROUP_NAME "GROUP_ID", GROUP_NAME "GROUP_NAME", ACTIVE_YN "ACTIVE_YN", LONG_NAME "GROUP_DESC" from CHKDB_SAMP_GROUP; -- Note: the sample department table does not have -- separate id and name fields, so name is used for both. -- = = = = = = = = = = = = = = = = = = = = = -- Employees create view CHKDB_SAMP_HR_EMP as select EMPL_ID "EMP_ID", EMPL_NAME "EMP_NAME", DEPT_NAME "DEPT_ID", GROUP_NAME "GROUP_ID", POSITION "POSITION", HIRE_DATE "HIRE_DT", LAST_REVIEW "LAST_REVIEW_DT", PROBATION_ENDS "PROBATION_END_DT", VACN_DAYS "VACN_DAYS_TOT", VACN_USED "VACN_DAYS_USED" from CHKDB_SAMP_EMPL; -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- Copyright and Open Source License -- -- Copyright (c) Brian Marshall 2003 -- -- Permission is hereby granted, free of charge, to any -- person obtaining a copy of this software and associated -- documentation files (the "Software"), to deal in the -- Software without restriction, including without limitation -- the rights to use, copy, modify, merge, publish, distribute, -- sublicense, and/or sell copies of the Software, and to -- permit persons to whom the Software is furnished to do so, -- subject to the following conditions: -- -- The above copyright notice and this permission notice shall be -- included in all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -- OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -- HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -- WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -- OTHER DEALINGS IN THE SOFTWARE. -- -- ============================================================== sample_queries.sql0100755000076400007640000001706207760521540013615 0ustar brianbrian-- ============================================================== prompt ==================================================== prompt ChkDB Sample Queries prompt -- Before we begin... set pagesize 999 set linesize 70 set trimspool on set trimout on prompt = = = = = = = = = = = = = = = = = = = = = = = = = = prompt Summary of Active Rules in a Ruleset select r.TABLE_NAME, r.RULE_ID, substr(r.RULE_CLASS,1,5) CLASS, r.DESCRIPTION from CHKDB_DOMAIN d, CHKDB_TABLE t, CHKDB_RULESET s, CHKDB_RULE r where s.DATA_DOMAIN = d.DATA_DOMAIN and s.DATA_DOMAIN = t.DATA_DOMAIN and r.DATA_DOMAIN = s.DATA_DOMAIN and r.RULESET_ID = s.RULESET_ID and r.TABLE_NAME = t.TABLE_NAME and d.ACTIVE_YN = 'Y' and t.ACTIVE_YN = 'Y' and s.ACTIVE_YN = 'Y' and r.ACTIVE_YN = 'Y' and r.DATA_DOMAIN = 'CHKDB_SAMP_HR' and r.RULESET_ID = 'SAMP_HR_RULES' order by 1, 2; prompt = = = = = = = = = = = = = = = = = = = = = = = = = = prompt Summary of In-Active Rules in a Ruleset select r.TABLE_NAME, r.RULE_ID, substr(r.RULE_CLASS,1,5) CLASS, r.DESCRIPTION from CHKDB_DOMAIN d, CHKDB_TABLE t, CHKDB_RULESET s, CHKDB_RULE r where s.DATA_DOMAIN = d.DATA_DOMAIN and s.DATA_DOMAIN = t.DATA_DOMAIN and r.DATA_DOMAIN = s.DATA_DOMAIN and r.RULESET_ID = s.RULESET_ID and r.TABLE_NAME = t.TABLE_NAME and (d.ACTIVE_YN = 'N' or t.ACTIVE_YN = 'N' or s.ACTIVE_YN = 'N' or r.ACTIVE_YN = 'N') and r.DATA_DOMAIN = 'CHKDB_SAMP_HR' and r.RULESET_ID = 'SAMP_HR_RULES' order by 1, 2; prompt = = = = = = = = = = = = = = = = = = = = = = = = = = prompt Result count by table and rule... prompt (raw data for Data Quality Profiling) select a.TABLE_NAME, a.RULE_ID, substr(b.RULE_CLASS,1,5) CLASS, substr(count(*),1,6) OCCURS from CHKDB_RESULT a, CHKDB_RULE b where a.DATA_DOMAIN = b.DATA_DOMAIN and a.TABLE_NAME = b.TABLE_NAME and a.RULESET_ID = b.RULESET_ID and a.RULE_ID = b.RULE_ID and a.DATA_DOMAIN = 'CHKDB_SAMP_HR' group by a.TABLE_NAME, a.RULE_ID, b.RULE_CLASS order by a.TABLE_NAME, a.RULE_ID; prompt = = = = = = = = = = = = = = = = = = = = = = = = = = prompt Results by table and rule, ordered by number prompt of occurrences, with description... prompt (crude data quality profiling report) select a.TABLE_NAME, substr(b.RULE_CLASS,1,5) CLASS, substr(count(*),1,6) OCCURS, b.DESCRIPTION from CHKDB_RESULT a, CHKDB_RULE b where a.DATA_DOMAIN = b.DATA_DOMAIN and a.TABLE_NAME = b.TABLE_NAME and a.RULESET_ID = b.RULESET_ID and a.RULE_ID = b.RULE_ID and a.DATA_DOMAIN = 'CHKDB_SAMP_HR' group by a.TABLE_NAME, b.RULE_CLASS, b.DESCRIPTION order by a.TABLE_NAME, count(*) desc; prompt = = = = = = = = = = = = = = = = = = = = = = = = = = prompt Check-Result Details (Max 100) select a.TABLE_NAME, a.DATA_DOMAIN, a.RULESET_ID, a.RULE_ID, rpad(a.CHECK_DATE,10) CHECK_DATE, substr(r.RULE_CLASS,1,5) CLASS, r.DESCRIPTION, a.SELECTED_ROWID, substr(a.ROW_PRIMARY_KEY,1,60) PRIMARY_KEY, a.ROW_OUT_DESC, a.ROW_OUT_DATA from CHKDB_RESULT a, CHKDB_RULE r where a.DATA_DOMAIN = r.DATA_DOMAIN and a.RULESET_ID = r.RULESET_ID and a.TABLE_NAME = r.TABLE_NAME and a.RULE_ID = r.RULE_ID and a.DATA_DOMAIN = 'CHKDB_SAMP_HR' and rownum < 101 order by 1, 2, 3, 6 desc; prompt = = = = = = = = = = = = = = = = = = = = = = = = = = prompt Various Other Sample Queries prompt prompt = = = = = = = = = = = = = = = = = = = = = = = = = = prompt All Active Rules in a Domain select r.TABLE_NAME, r.DATA_DOMAIN, r.RULESET_ID, r.RULE_ID, substr(r.RULE_CLASS,1,5) CLASS, r.DESCRIPTION from CHKDB_DOMAIN d, CHKDB_TABLE t, CHKDB_RULESET s, CHKDB_RULE r where s.DATA_DOMAIN = d.DATA_DOMAIN and s.DATA_DOMAIN = t.DATA_DOMAIN and r.DATA_DOMAIN = s.DATA_DOMAIN and r.RULESET_ID = s.RULESET_ID and r.TABLE_NAME = t.TABLE_NAME and d.ACTIVE_YN = 'Y' and t.ACTIVE_YN = 'Y' and s.ACTIVE_YN = 'Y' and r.ACTIVE_YN = 'Y' and s.DATA_DOMAIN = 'CHKDB_SAMP_HR' order by 1, 2, 3 desc, 6; prompt = = = = = = = = = = = = = = = = = = = = = = = = = = prompt Tables and Primary Keys in the CHKDB_SAMP_HR Domain prompt (only 1st 28 chars of table and column names) select TABLE_NAME TABLE_NAME, rpad(CHECKABLE_YN,9) CHECKABLE, rpad(decode(TABLE_VIEW_TV, 'T', 'Table', 'V', 'View', 'Unknown'),10) TABLE_VIEW, rpad(ACTIVE_YN,6) ACTIVE, PRIMARY_KEY_LIST PRIMARY_KEY_LIST from CHKDB_TABLE where DATA_DOMAIN = 'CHKDB_SAMP_HR' order by 2 desc, 1; prompt = = = = = = = = = = = = = = = = = = = = = = = = = = prompt To see if a table is active... select t.TABLE_NAME, t.ACTIVE_YN "?", d.DATA_DOMAIN, d.ACTIVE_YN "?" from CHKDB_DOMAIN d, CHKDB_TABLE t where t.DATA_DOMAIN = d.data_domain and t.TABLE_NAME = 'CHKDB_SAMP_HR_DEPT' order by 1, 3; prompt = = = = = = = = = = = = = = = = = = = = = = = = = = prompt To see which rules in a table are active... prompt prompt Rules for table CHKDB_SAMP_HR_DEPT prompt in domain CHKDB_SAMP_HR... select s.RULESET_ID, s.ACTIVE_YN "?", r.RULE_ID, r.ACTIVE_YN "?" from CHKDB_RULESET s, CHKDB_RULE r where r.DATA_DOMAIN = s.DATA_DOMAIN and r.RULESET_ID = s.RULESET_ID and r.DATA_DOMAIN = 'CHKDB_SAMP_HR' and r.TABLE_NAME = 'CHKDB_SAMP_HR_DEPT' order by 1, 3; prompt = = = = = = = = = = = = = = = = = = = = = = = = = = prompt Count of Results for table CHKDB_SAMP_HR_DEPT... select count(*) CHKDB_SAMP_DEPT_RESULTS from CHKDB_RESULT where TABLE_NAME = 'CHKDB_SAMP_HR_DEPT'; prompt = = = = = = = = = = = = = = = = = = = = = = = = = = prompt Counts from each ChkDB table... select count(*) CHKDB_DOMAIN_COUNT from CHKDB_DOMAIN; select count(*) CHKDB_TABLE_COUNT from CHKDB_TABLE; select count(*) CHKDB_RULESET_COUNT from CHKDB_RULESET; select count(*) CHKDB_RULE_COUNT from CHKDB_RULE; select count(*) CHKDB_RESULT_COUNT from CHKDB_RESULT; select count(*) CHKDB_RULE_SQL_COUNT from CHKDB_RULE_SQL; select count(*) CHKDB_RULE_ERR_COUNT from CHKDB_RULE_ERR; prompt ==================================================== -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- Copyright and Open Source License -- -- Copyright (c) Brian Marshall 2003 -- -- Permission is hereby granted, free of charge, to any -- person obtaining a copy of this software and associated -- documentation files (the "Software"), to deal in the -- Software without restriction, including without limitation -- the rights to use, copy, modify, merge, publish, distribute, -- sublicense, and/or sell copies of the Software, and to -- permit persons to whom the Software is furnished to do so, -- subject to the following conditions: -- -- The above copyright notice and this permission notice shall be -- included in all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -- OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -- HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -- WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -- OTHER DEALINGS IN THE SOFTWARE. -- -- ============================================================== sample_ruleset.sql0100664000076400007640000003076507760521540013627 0ustar brianbrian-- ============================================================== -- ChkDB - Sample Rule-Set SAMP_HR_RULES -- for data domain: CHKDB_SAMP_HR -- -- Define the SAMP_HR_RULES rule-set to check data in the -- CHKDB_SAMP_HR data domain (which is an abstract view into -- a sample Human Resources database). -- -- This set of rules is intended to illustrate (and test) -- each type of check; it is NOT an the set of all rules -- that might logically be applied to the sample database. -- -- This rule-set includes rules to find: -- - bad data -- - business situations that require action -- -- Before this script is run: -- - the ChkDB tables must exist - see chkdb_tables.sql -- - the CHKDB_SAMP_HR domain must have been setup -- see: sample_domain.sql -- -- Note: In rules in which a where-clause is specified, -- the table being checked has an alias of t -- and all references to columns in this table -- must use this alias. -- -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- Define the SAMP_HR_RULES rule-set. delete CHKDB_RULESET where DATA_DOMAIN = 'CHKDB_SAMP_HR' and RULESET_ID = 'SAMP_HR_RULES'; delete CHKDB_RULE where DATA_DOMAIN = 'CHKDB_SAMP_HR' and RULESET_ID = 'SAMP_HR_RULES'; insert into CHKDB_RULESET (DATA_DOMAIN, RULESET_ID, DESCRIPTION) values ('CHKDB_SAMP_HR', 'SAMP_HR_RULES', 'Sample rules for tables in the sample HR database'); -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- Define the Rules in the SAMP_HR_RULES rule-set. -- = = = = = = = = = = = = = = = = -- Rules about the CHKDB_SAMP_HR_DEPT table/view... -- foreign key check insert into CHKDB_RULE -- manager valid? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, FOREIGN_KEY_LIST, REF_DATA_DOMAIN, REF_TABLE_NAME, REF_KEY_LIST, FK_NOT_ORPHAN_YN, FK_NOT_NULL_YN) values ('CHKDB_SAMP_HR', 'SAMP_HR_RULES', 'CHKDB_SAMP_HR_DEPT', 'MANAGER_BAD', 3, 'Manager is invalid or not set', 'MANAGER', 'CHKDB_SAMP_HR', 'CHKDB_SAMP_HR_EMP', 'EMP_ID', 'Y', 'Y'); -- specified where-clause insert into CHKDB_RULE -- manager in this dept? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, CHK_WHERE_CLS, ROW_OUT_DESC, ROW_OUT_SPEC) values ('CHKDB_SAMP_HR', 'SAMP_HR_RULES', 'CHKDB_SAMP_HR_DEPT', 'MNGR_DEPT_BAD', 2, 'Manager is not in this department', 'exists (select 99 from CHKDB_SAMP_HR_EMP e ' || 'where e.EMP_ID = t.MANAGER' || ' and e.dept_id <> t.dept_id)', 'MANAGER','MANAGER'); -- In the line above, the second 'MANAGER' is what will be -- selected from the table to show the bad data, while the -- first 'MANAGER' is the title for this output column. -- predefined check insert into CHKDB_RULE -- floor valid? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, MIN_VALUE, MAX_VALUE, MAX_LENGTH) values ('CHKDB_SAMP_HR', 'SAMP_HR_RULES', 'CHKDB_SAMP_HR_DEPT', 'FLOOR_BAD', 3, 'Floor is invalid or not set', 'FLOOR', 'C', 'Y', '1', '8', 1); -- predefined check insert into CHKDB_RULE -- floor not a number? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, IS_A_NUMBER_YN) values ('CHKDB_SAMP_HR', 'SAMP_HR_RULES', 'CHKDB_SAMP_HR_DEPT', 'FLOOR_NOT_NUM', 3, 'Floor is not a number', 'FLOOR', 'C', 'Y'); -- foreign key check (checking parent for children) insert into CHKDB_RULE -- any employees? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, FOREIGN_KEY_LIST, REF_DATA_DOMAIN, REF_TABLE_NAME, REF_KEY_LIST, FK_NOT_ORPHAN_YN) values ('CHKDB_SAMP_HR', 'SAMP_HR_RULES', 'CHKDB_SAMP_HR_DEPT', 'DEPT_EMPTY', 1, 'Department has no employees', 'DEPT_ID', 'CHKDB_SAMP_HR', 'CHKDB_SAMP_HR_EMP', 'DEPT_ID', 'Y'); -- predefined check [Business situation, not data error] insert into CHKDB_RULE -- budget estimate off? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, COLUMN_2_NAME, COL_MINUS_COL2_MIN, COL_MINUS_COL2_MAX) values ('CHKDB_SAMP_HR', 'SAMP_HR_RULES', 'CHKDB_SAMP_HR_DEPT', 'BUDGET_EST_OFF', 1, 'Budget estimate too far from budgeted amount', 'BUDGET_EST', 'N', 'BUDGET_AMT', -20000.00, 10000.00); -- predefined check [Business situation, not data error] insert into CHKDB_RULE -- not all of budget approved? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, COLUMN_2_NAME, COL_NOT_NE_COL2_YN) values ('CHKDB_SAMP_HR', 'SAMP_HR_RULES', 'CHKDB_SAMP_HR_DEPT', 'BUDGET_AMT_APPRV_NEQ', 1, 'Budget amount different than approved budget', 'BUDGET_AMT', 'N', 'BUDGET_APPRV', 'Y'); -- Note that this rule is set to be NOT ACTIVE. -- predefined check [Business situation, not data error] insert into CHKDB_RULE -- not all of budget approved? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_VALUE, ACTIVE_YN) values ('CHKDB_SAMP_HR', 'SAMP_HR_RULES', 'CHKDB_SAMP_HR_DEPT', 'BUDGET_AMT_HIGH', 1, 'Budget amount greater than $125,000', 'BUDGET_AMT', 'N', '125000.00', 'N'); -- = = = = = = = = = = = = = = = = -- Rules about the CHKDB_SAMP_HR_GROUP table/view... -- foreign key check (of primary key component) insert into CHKDB_RULE -- department valid? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, FOREIGN_KEY_LIST, REF_DATA_DOMAIN, REF_TABLE_NAME, REF_KEY_LIST, FK_NOT_ORPHAN_YN, FK_NOT_NULL_YN) values ('CHKDB_SAMP_HR', 'SAMP_HR_RULES', 'CHKDB_SAMP_HR_GROUP', 'DEPT_BAD', 4, 'Department is invalid or not set', 'DEPT_ID', 'CHKDB_SAMP_HR', 'CHKDB_SAMP_HR_DEPT', 'DEPT_ID', 'Y', 'Y'); -- predefined check insert into CHKDB_RULE -- active_yn valid? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, IN_LIST) values ('CHKDB_SAMP_HR', 'SAMP_HR_RULES', 'CHKDB_SAMP_HR_GROUP', 'ACTIVE_YN_BAD', 4, 'Active_YN must be Y or N', 'ACTIVE_YN', 'C', 'Y', 'Y,N'); -- = = = = = = = = = = = = = = = = -- Rules about the CHKDB_SAMP_HR_EMP table/view... -- foreign key check insert into CHKDB_RULE -- DEPT_ID,GROUP_ID exists? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, FOREIGN_KEY_LIST, REF_DATA_DOMAIN, REF_TABLE_NAME, REF_KEY_LIST, FK_NOT_ORPHAN_YN, FK_NOT_PARTIAL_YN) values ('CHKDB_SAMP_HR', 'SAMP_HR_RULES', 'CHKDB_SAMP_HR_EMP', 'DEPT_GROUP_BAD', 4, 'Dept_id|Group_id is invalid or Dept_id is not set', 'DEPT_ID,GROUP_ID', 'CHKDB_SAMP_HR', 'CHKDB_SAMP_HR_GROUP', 'DEPT_ID,GROUP_ID', 'Y', 'Y'); -- predefined check insert into CHKDB_RULE -- position null? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN) values ('CHKDB_SAMP_HR', 'SAMP_HR_RULES', 'CHKDB_SAMP_HR_EMP', 'POSITION_NULL', 3, 'Position is not set', 'POSITION', 'C', 'Y'); -- predefined check insert into CHKDB_RULE -- position too long? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, MAX_LENGTH) values ('CHKDB_SAMP_HR', 'SAMP_HR_RULES', 'CHKDB_SAMP_HR_EMP', 'POSITION_LONG', 3, 'Position is too long', 'POSITION', 'C', 20); -- predefined check insert into CHKDB_RULE -- position illegal char? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NO_ILLEGAL_CHARS) values ('CHKDB_SAMP_HR', 'SAMP_HR_RULES', 'CHKDB_SAMP_HR_EMP', 'POSITION_BADCHAR', 3, 'Position contains illegal character (,)', 'POSITION', 'C', ','); -- predefined check insert into CHKDB_RULE -- hire-date valid? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, MIN_VALUE, NOT_AFTER_TODAY_YN) values ('CHKDB_SAMP_HR', 'SAMP_HR_RULES', 'CHKDB_SAMP_HR_EMP', 'HIRE_DT_BAD', 3, 'Hire-date is invalid or not set', 'HIRE_DT', 'D', 'Y', '1997-01-01', 'Y'); -- predefined check (note: not not-null, uses other column) insert into CHKDB_RULE -- last-review valid? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_AFTER_TODAY_YN, COLUMN_2_NAME, COL_NOT_LT_COL2_YN) values ('CHKDB_SAMP_HR', 'SAMP_HR_RULES', 'CHKDB_SAMP_HR_EMP', 'LAST_REVIEW_BAD', 2, 'Date of last review is invalid or before hire', 'LAST_REVIEW_DT', 'D', 'Y', 'HIRE_DT', 'Y'); -- predefined check (note: uses COL_NOT_EQ_COL2_YN) insert into CHKDB_RULE -- last-review = hire_date? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_AFTER_TODAY_YN, COLUMN_2_NAME, COL_NOT_EQ_COL2_YN) values ('CHKDB_SAMP_HR', 'SAMP_HR_RULES', 'CHKDB_SAMP_HR_EMP', 'REVIEW_ON_HIRE', 2, 'Date of last review is hire date', 'LAST_REVIEW_DT', 'D', 'Y', 'HIRE_DT', 'Y'); -- predefined check insert into CHKDB_RULE -- vacn_days_tot valid? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_NULL_YN, MIN_VALUE, MAX_VALUE) values ('CHKDB_SAMP_HR', 'SAMP_HR_RULES', 'CHKDB_SAMP_HR_EMP', 'VACN_DAYS_TOT_BAD', 3, 'Vacn_days_tot is invalid or not set', 'VACN_DAYS_TOT', 'N', 'Y', 10, 35); -- predefined check [Business situation; not data error] insert into CHKDB_RULE -- probation over? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, NOT_BEFORE_TODAY_YN) values ('CHKDB_SAMP_HR', 'SAMP_HR_RULES', 'CHKDB_SAMP_HR_EMP', 'PROBATION_OVER', 1, 'Probation period is over', 'PROBATION_END_DT', 'D', 'Y'); -- predefined check insert into CHKDB_RULE -- too many vacation days? (DATA_DOMAIN, RULESET_ID, TABLE_NAME, RULE_ID, RULE_CLASS, DESCRIPTION, COLUMN_NAME, COLUMN_TYPE_CND, COLUMN_2_NAME, COL_NOT_GT_COL2_YN) values ('CHKDB_SAMP_HR', 'SAMP_HR_RULES', 'CHKDB_SAMP_HR_EMP', 'VACN_DAYS_USED_HIGH', 1, 'Vacn_days_used is too high', 'VACN_DAYS_USED', 'N', 'VACN_DAYS_TOT', 'Y'); -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- Copyright and Open Source License -- -- Copyright (c) Brian Marshall 2003 -- -- Permission is hereby granted, free of charge, to any -- person obtaining a copy of this software and associated -- documentation files (the "Software"), to deal in the -- Software without restriction, including without limitation -- the rights to use, copy, modify, merge, publish, distribute, -- sublicense, and/or sell copies of the Software, and to -- permit persons to whom the Software is furnished to do so, -- subject to the following conditions: -- -- The above copyright notice and this permission notice shall be -- included in all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -- OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -- HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -- WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -- OTHER DEALINGS IN THE SOFTWARE. -- -- ============================================================== setup_chkdb.sql0100664000076400007640000000272107760521540013065 0ustar brianbrian-- ================================================================= -- Setup tables and packages for ChkDB rule-based data checking. @@ chkdb_tables.sql @@ chkdb_software.sql -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- Copyright and Open Source License -- -- Copyright (c) Brian Marshall 2003 -- -- Permission is hereby granted, free of charge, to any -- person obtaining a copy of this software and associated -- documentation files (the "Software"), to deal in the -- Software without restriction, including without limitation -- the rights to use, copy, modify, merge, publish, distribute, -- sublicense, and/or sell copies of the Software, and to -- permit persons to whom the Software is furnished to do so, -- subject to the following conditions: -- -- The above copyright notice and this permission notice shall be -- included in all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -- OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -- HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -- WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -- OTHER DEALINGS IN THE SOFTWARE. -- -- ================================================================= summarize_domain.sql0100664000076400007640000000464307760521540014142 0ustar brianbrian-- ============================================================== define Data_Domain = &&1 prompt prompt Summary of rules in domain &Data_Domain prompt (A ruleset/table/rule in parentheses is Inactive) set pagesize 999 set linesize 80 set trimspool on set trimout on set verify off set feedback off select decode(s.ACTIVE_YN, 'Y', r.RULESET_ID, '('||r.RULESET_ID||')') RULESET_ID, decode(t.ACTIVE_YN, 'Y', r.TABLE_NAME, '('||r.TABLE_NAME||')') TABLE_NAME, decode(r.ACTIVE_YN, 'Y', r.RULE_ID, '('||r.RULE_ID||')') RULE_ID, r.DESCRIPTION DESCRIPTION, substr(r.RULE_CLASS,1,5) CLASS from CHKDB_DOMAIN d, CHKDB_TABLE t, CHKDB_RULESET s, CHKDB_RULE r where d.DATA_DOMAIN = s.DATA_DOMAIN and d.DATA_DOMAIN = t.DATA_DOMAIN and s.DATA_DOMAIN = r.DATA_DOMAIN and s.RULESET_ID = r.RULESET_ID and t.TABLE_NAME = r.TABLE_NAME and r.DATA_DOMAIN = '&Data_Domain' order by r.RULESET_ID, r.TABLE_NAME, r.RULE_ID; set feedback on -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = exit -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- Copyright and Open Source License -- -- Copyright (c) Brian Marshall 2003 -- -- Permission is hereby granted, free of charge, to any -- person obtaining a copy of this software and associated -- documentation files (the "Software"), to deal in the -- Software without restriction, including without limitation -- the rights to use, copy, modify, merge, publish, distribute, -- sublicense, and/or sell copies of the Software, and to -- permit persons to whom the Software is furnished to do so, -- subject to the following conditions: -- -- The above copyright notice and this permission notice shall be -- included in all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -- OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -- HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -- WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -- OTHER DEALINGS IN THE SOFTWARE. -- -- ============================================================== summarize_ruleset.sql0100664000076400007640000000433007760521540014347 0ustar brianbrian-- ============================================================== define Data_Domain = &&1 define Ruleset_Id = &&2 prompt prompt Summary of ruleset &Ruleset_Id in domain &Data_Domain prompt (Inactive rules have RULE_ID in parentheses) set pagesize 999 set linesize 70 set trimspool on set trimout on set verify off set feedback off select decode(t.ACTIVE_YN, 'Y', r.TABLE_NAME, '('||r.TABLE_NAME||')') TABLE_NAME, decode(r.ACTIVE_YN, 'Y', r.RULE_ID, '('||r.RULE_ID||')') RULE_ID, substr(r.RULE_CLASS,1,5) CLASS, r.DESCRIPTION DESCRIPTION from CHKDB_TABLE t, CHKDB_RULE r where t.DATA_DOMAIN = r.DATA_DOMAIN and t.TABLE_NAME = r.TABLE_NAME and r.DATA_DOMAIN = '&Data_Domain' and r.RULESET_ID = '&Ruleset_Id' order by r.TABLE_NAME, r.RULE_ID; set feedback on -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = exit -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- Copyright and Open Source License -- -- Copyright (c) Brian Marshall 2003 -- -- Permission is hereby granted, free of charge, to any -- person obtaining a copy of this software and associated -- documentation files (the "Software"), to deal in the -- Software without restriction, including without limitation -- the rights to use, copy, modify, merge, publish, distribute, -- sublicense, and/or sell copies of the Software, and to -- permit persons to whom the Software is furnished to do so, -- subject to the following conditions: -- -- The above copyright notice and this permission notice shall be -- included in all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -- OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -- HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -- WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -- OTHER DEALINGS IN THE SOFTWARE. -- -- ============================================================== trunc_chkdb.sql0100664000076400007640000000316607760521540013064 0ustar brianbrian-- ================================================================= prompt Truncating the tables for ChkDB rule-based data checking... truncate table CHKDB_DOMAIN; truncate table CHKDB_TABLE; truncate table CHKDB_RULESET; truncate table CHKDB_RULE; truncate table CHKDB_RESULT; truncate table CHKDB_RULE_SQL; truncate table CHKDB_RULE_ERR; -- = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- Copyright and Open Source License -- -- Copyright (c) Brian Marshall 2003 -- -- Permission is hereby granted, free of charge, to any -- person obtaining a copy of this software and associated -- documentation files (the "Software"), to deal in the -- Software without restriction, including without limitation -- the rights to use, copy, modify, merge, publish, distribute, -- sublicense, and/or sell copies of the Software, and to -- permit persons to whom the Software is furnished to do so, -- subject to the following conditions: -- -- The above copyright notice and this permission notice shall be -- included in all copies or substantial portions of the Software. -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -- OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -- HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -- WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -- FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -- OTHER DEALINGS IN THE SOFTWARE. -- -- =================================================================