Pages

Showing posts with label pl/sql. Show all posts
Showing posts with label pl/sql. Show all posts

Monday, March 9, 2015

PL/SQL: Dropping a connected user

Here's a quick script I wrote to disconnect and then drop a connected user.

Just replace with the user you want to remove.

BEGIN
  FOR sql_command IN (select 'alter system kill session ''' || sid || ',' || serial# || '''' AS command FROM v$session WHERE username = '') LOOP
    EXECUTE IMMEDIATE
      sql_command.command;
  END LOOP;
  
  EXECUTE IMMEDIATE
    'DROP USER  CASCADE';
  COMMIT;
END;

You could make a parameter fairly easily, but this patch of code met my immediate needs (there was an web front end that was continually trying to connect but I didn't want to shut it down, just drop and re-create the user).

Wednesday, February 11, 2015

Oracle PL/SQL: Give me record counts for all tables in a schema

This piece of SQL will output the row counts for every table in the current schema in a CSV format;

declare 
  i integer;
begin
  dbms_output.put_line('Table Name,Row Count,' || TO_CHAR(SYSDATE, 'DD-MON-YYYY HH24:MI:SS'));
  for v_table in (select ut.table_name from user_tables ut) loop
    execute immediate
      'select count(*) from ' || v_Table.Table_Name
      into i;
    dbms_output.put_line(v_Table.Table_Name || ',' || TO_CHAR(i));
  end loop;

end;

Very useful for doing before/ after migration comparisons.

Tuesday, August 13, 2013

PL/SQL: Dynamically Building Your Data Archive

The purpose of this blog post is just to outline a design I put together as part of an internal project for dynamically building a data archive using rules based on the source data being fed into the system. It's far from complete but I think it highlights an interesting way of building an archive for your data when you don't know when you're doing the designing exactly what data you will be putting into it.

THE PROBLEM
At the moment in order to put data from various sources into the data archive a multitude of different loading programs are used (SSIS, command-line applications, scripts, etc) each of which uses it's own rules to determine where the source data ends up (largely dependent on what rules the developer used when putting it together) and inter-dependencies are largely invisible.

New feeds are added at a rate of one every other month and the system should cope with this wile keeping track of the dependencies in the database.

DESIGNING THE SOLUTION
In essence the problem this solution is trying to solve is to provide a single point of entry into the data archive where you can put your source data and which will then be put into the archive using a pre-specified set of rules to determine where the data ends up and what format it's in.

A simple diagram for the system is;
System Diagram
The specific bit that is "in scope" for this work is the "LOAD Process". How data gets into the DATASOURCE tables is really dependent on where the data is coming from, what format it's in, etc and it's practically impossible to write something so universally generic to cover every possible option from a CSV text file to a database link.

The aim of the solution will be to process the data as it arrives but it's possible that it could be adapted to work with data in batches.

THE PROPOSAL
I've created a fairly simple structure using the tables;
  • SOURCEDATATYPE - This holds a unique reference and description for each different data source
  • STAGINGOUTPUT - This table holds the raw data as loaded into the database from the external feed (I went with this name in case it's necessary to use staging tables for the IMPORT process to manipulate the data prior to it being loaded via the LOAD process)
  • ENTITY - This is the name for a table that is being created as part of the LOAD process in the Data Archive.
  • ENTITYDETAIL - This table contains information on how the data from the source table should be manipulated before being moved into the ENTITY table.
Here's a simple data structure;
Database Structure
As you can see it's pretty self explanatory.

Once you've configured the data source type, and entity details then you're ready to start loading data.

In order to load the database I've created a package called DW_LOADDATA. This has two routines;
  • ProcessAll, and
  • ProcessRow (p_rowID ROWID)
Basically "ProcessAll" loops through the unprocessed rows and passes them one at a time to the "processRow" routine.

The process row routine performs the following steps;
  • Get the new record from STAGINGOUTPUT
  • Identify the ENTITY/ENTITYDETAIL for the feed specified in the STAGINGOUTPUT record
  • Check to see if the ENTITY exists - if not create it.
  • Work out the column name, and if that doesn't exist as part of the ENTITY create it
  • Does a value already exist? If so update it (using MERGE), otherwise INSERT the new value
  • Mark the STAGINGOUTPUT record as processed
Sounds simple? Well it's less than 150 lines of code include comments and formatting ...

The key is the information in the ENTITY/ENTITYDETAIL tables. For example let's suppose I'm loading sales data and I want to create an ENTITY called SUPPLIER_SALES_BY_MONTH with separate columns for each month of data.

In the ENTITY table I'd create a simple record with the name of the new ENTITY (bearing in mind the actual name of the table will be prefixed with the Short_Code from the SOURCEDATATYPE table) and then in the ENTITYDETAIL table create the following rows;

INSERT INTO ENTITYDETAIL
SELECT 1, 1, 2,
  '''PERIOD_'' || TO_CHAR(SO.DATE01, ''YYYYMM'')', -- column_name_expression
  'SO.NUMBER01', -- row_unique_expression
  'OLD.VALUE = NVL(OLD.VALUE, 0) + SO.NUMBER04', -- value_expression
  'NUMBER', -- on_create_type
  '0' -- on_create_default
FROM DUAL
UNION SELECT 1, 1, 1,
  '''SUPPLIER_NAME''', -- column_name_expression
  'SO.NUMBER01', -- row_unique_expression
  'OLD.VALUE = SO.TEXT01', -- value_expression
  'VARCHAR2(80)', -- on_create_type
  '0' -- on_create_default
FROM DUAL


I know "INSERT INTO ..." probably isn't the best way to do this but this is only an example!

As you can see the column_name_expression is looking at the SO (STAGINGOUTPUT) table and formatting the first date to YYYYMM - so a value of 13-JAN-2013 will create/ update the column PERIOD_201301.

The value (for the supplier) is being updated to add on the sales for that month.

The second column that's created is the SUPPLIER_NAME - this is simply the name of the supplier. If I run this using some random test data I end up with a table that looks like;
Generated Table
I've created a script which creates the objects and loads some simple test data. It's available here (via Google Drive - DO NOT RUN IT IN AN EXISTING DATABASE SCHEMA UNLESS YOU WANT OBJECTS STARTING WITH SAL_ TO BE DROPPED!). You'll need to have setup a user with default tablespace permissions in order to get the script to work.

Let me know in the comments if you find this useful

Tuesday, April 16, 2013

PL/SQL: Safely Publishing Data For Analysis/ Obfuscating Data

The purpose of this blog post is to publish a way of obfuscating data so that you can publish data which can be analysed to spot trends but which does not include confidential information while at the same time allowing you to track back from the published information to the original data if external analysis raises issues which require investigation.

We have used this source code to allow us to provide information to our Internal Audit function which includes user and vendor information while keeping that information anonymous.

The first step is to configure the database to store the information. This is fairly simple, you just need to create a single sequence to provide the unique identifiers and a table to store the mappings between the original information and the identifies. By allowing the identifiers to be grouped (using Data Types) this reduces the possibility of someone using a piece of "known data" to work out other pieces of data.

Here's the SQL to create the sequence;

create sequence HIDEDATA_SEQ
start with 1;

And here's the SQL to create the table, and indexes for speed, to store the mappings;

-- Create table
create table HIDDENDATASTORE
(
  data_type varchar2(20) not null,
  id        number not null,
  value     varchar2(255) not null
)
;
-- Create/Recreate indexes
create unique index HIDDENDATASTORE_PK on HIDDENDATASTORE (data_type, id);
create unique index HIDDENDATASTORE_IDX1 on HIDDENDATASTORE (data_type, value);

Once these have been created your can create the package with the two functions (to Hide and Unhide - with apologies to the English language for that second one!).

The source code for the package is available here (via Google Drive).

Once you've created the package here's a quick test script;

 SELECT hidedata.Hide('TEST',
                     'the quick brown fox jumped over the slow lazy dog') Hide,
       hidedata.UnHide(hidedata.Hide('TEST',
                                     'the quick brown fox jumped over the slow lazy dog')) UnHide
  FROM DUAL


The result in my database, in which I've been doing some testing (exactly 23 times to be precise!) is;

Test Results Hiding/Unhiding Data







Monday, February 18, 2013

Oracle PL/SQL: How Big Are My Tables?

As part of a change request I just happened to need to get a "ball-park" figure on the sizes of some of the key tables in a schema. For that reason I put together the following PL/SQL;

SELECT NVL(di.table_name, DS.segment_name) "Table Name",
       ROUND((sum(ds.bytes) / 1048576 /* 1 MB in bytes */), 3) "MB"
  FROM dba_segments DS
  LEFT JOIN dba_indexes DI
    ON DI.owner = DS.owner
   AND DI.index_name = DS.segment_name
 WHERE 1 = 1
   AND DS.segment_type IN ('INDEX', 'TABLE')
   AND DS.owner = USER -- Currently logged in user
 GROUP BY NVL(di.table_name, DS.segment_name)
 ORDER BY sum(ds.bytes) DESC


It works by looking at the sizes of both the table itself and any assocaited indexes. It's worth noting that there are other components (notably LOB's) which can have a drastic effect on table size which I'm not checking for here (primarily because I'm not interested in them - we typically put those into another table space that is monitored separately).

In some cases you might want the break down based on the segment_type (so you can tell the difference between lots of table data and lots of indexes) but I think by studying the above you get the gist of what would need to be tweaked to do that.

Hopefully this will prove useful to those of you wanting quick estimates to provide to support.

Thursday, August 23, 2012

PL/SQL: Using R12 Item Open Interface Tables

I'm sure we won't be the only company to need to do a batch update of all the existing Items (in INV.MTL_SYSTEM_ITEMS_B) so I thought I'd share this. Basically using the interface tables and Concurrent Request allows you to make updates to the existing reports in a controlled (and Oracle Approved) way.

I'm going to talk about doing an UPDATE but CREATE will work in pretty much the same way (for various reasons I'm not going to look at DELETE and I imagine - even if oracle supported it - most people would be in the same boat).

The first step is to identify the open interface table;
  • INV.MTL_System_items_Interface
First of all it's worth doing a quick SELECT * ... from the interface table and check to make sure it's empty before you start (ironically when writing this post I discovered two existing rows which had errored during our R12 upgrade 10 months ago so it's definitely worth a look!).

The columns from the MTL_System_Items_Interface table are listed at the every end of this post (just for your reference). The critical columns that have to have values in order for the update to work are;

Organization_Id
Process_Flag (must be 1)
Item_Number (of you can use SEGMENT1)
Transaction_Type (must be either UPDATE or CREATE)

Now if you want to insert records into the interface table it's probably best to use a SELECT as part of the SQL (i.e. have the rows you want to change listed in another table).

The SQL updates details on the item master from a table called PD_Item_Mst stored in a remove database across a database link (REMOTE_DATABASE). This updating flexfields in the item master (attributes 23,25,22, and 11). Here's the sample SQL;

INSERT INTO INV.MTL_SYSTEM_ITEMS_INTERFACE
  (ORGANIZATION_ID,
   PROCESS_FLAG,
   ITEM_NUMBER,
   TRANSACTION_TYPE,
   ATTRIBUTE23,
   ATTRIBUTE25,
   ATTRIBUTE22,
   ATTRIBUTE15)
  SELECT 1, -- organization_id
         1, -- process_flag
         item_no, -- item_number
         'UPDATE', -- transaction_type
         cd_flag, -- attribute23
         in_house, -- attribute25
         inv_class, -- attribute22
         DECODE(no_colours, 'INT', 98, 'CO', 97, 'FG', 99) -- attribute15
    FROM pd_item_mst@REMOTE_DATABASE


Once you've got the items loaded into the interface table you then need to log into Oracle e-Business Suite and perform the import.

Once you have logged in you'll need the "Inventory" reponsiiblity in order to make the changes. Once you have switched to the "Inventory" responsibility select Items then Import and finally "Import Items";

Importing Items


If, like us, you have multiple Organizations you will see the dialog above and have to pick which Organisation you wish to work with. When you've picked an Organization you will then be presented with the Concurrent Request screen;

Importing Items Concurrent Request
Make sure you have changed the Create or Update Option so that it is 1 for Inserting Items, and 2 for Updating Items. When you're ready click "Submit".

When completed check the INV.MTL_SYSTEM_ITEMS_INTERFACE table to see if any lines are remaining and are unprocessed. If any are unprocessed (erroring), then check in the INV.MTL_INTERFACE_ERRORS table for the reason.

Key to this working is that the ORG_ID in the lines is the same as the Concurrent Req (sounds obvious, but there is aflag which seems to indicate it will run for all orgs, but doesn’t). Also that the Transaction type in the lines matches the option in the concurrent request i.e. both Update, or both Create.

Hope you found this useful ...



List of Columns on the INV.MTL_System_Items_Interface table;
SQL> DESC INV.MTL_System_items_Interface
Name                           Type           Nullable Default Comments
------------------------------ -------------- -------- ------- --------
INVENTORY_ITEM_ID              NUMBER         Y                        
ORGANIZATION_ID                NUMBER         Y                        
LAST_UPDATE_DATE               DATE           Y                        
LAST_UPDATED_BY                NUMBER         Y                        
CREATION_DATE                  DATE           Y                        
CREATED_BY                     NUMBER         Y                        
LAST_UPDATE_LOGIN              NUMBER         Y                        
SUMMARY_FLAG                   VARCHAR2(1)    Y                        
ENABLED_FLAG                   VARCHAR2(1)    Y                        
START_DATE_ACTIVE              DATE           Y                        
END_DATE_ACTIVE                DATE           Y                        
DESCRIPTION                    VARCHAR2(240)  Y                        
BUYER_ID                       NUMBER         Y                        
ACCOUNTING_RULE_ID             NUMBER         Y                        
INVOICING_RULE_ID              NUMBER         Y                        
SEGMENT1                       VARCHAR2(40)   Y                        
SEGMENT2                       VARCHAR2(40)   Y                        
SEGMENT3                       VARCHAR2(40)   Y                        
SEGMENT4                       VARCHAR2(40)   Y                        
SEGMENT5                       VARCHAR2(40)   Y                        
SEGMENT6                       VARCHAR2(40)   Y                        
SEGMENT7                       VARCHAR2(40)   Y                        
SEGMENT8                       VARCHAR2(40)   Y                        
SEGMENT9                       VARCHAR2(40)   Y                        
SEGMENT10                      VARCHAR2(40)   Y                        
SEGMENT11                      VARCHAR2(40)   Y                        
SEGMENT12                      VARCHAR2(40)   Y                        
SEGMENT13                      VARCHAR2(40)   Y                        
SEGMENT14                      VARCHAR2(40)   Y                        
SEGMENT15                      VARCHAR2(40)   Y                        
SEGMENT16                      VARCHAR2(40)   Y                        
SEGMENT17                      VARCHAR2(40)   Y                        
SEGMENT18                      VARCHAR2(40)   Y                        
SEGMENT19                      VARCHAR2(40)   Y                        
SEGMENT20                      VARCHAR2(40)   Y                        
ATTRIBUTE_CATEGORY             VARCHAR2(30)   Y                        
ATTRIBUTE1                     VARCHAR2(240)  Y                        
ATTRIBUTE2                     VARCHAR2(240)  Y                        
ATTRIBUTE3                     VARCHAR2(240)  Y                        
ATTRIBUTE4                     VARCHAR2(240)  Y                        
ATTRIBUTE5                     VARCHAR2(240)  Y                        
ATTRIBUTE6                     VARCHAR2(240)  Y                        
ATTRIBUTE7                     VARCHAR2(240)  Y                        
ATTRIBUTE8                     VARCHAR2(240)  Y                        
ATTRIBUTE9                     VARCHAR2(240)  Y                        
ATTRIBUTE10                    VARCHAR2(240)  Y                        
ATTRIBUTE11                    VARCHAR2(240)  Y                        
ATTRIBUTE12                    VARCHAR2(240)  Y                        
ATTRIBUTE13                    VARCHAR2(240)  Y                        
ATTRIBUTE14                    VARCHAR2(240)  Y                        
ATTRIBUTE15                    VARCHAR2(240)  Y                        
PURCHASING_ITEM_FLAG           VARCHAR2(1)    Y                        
SHIPPABLE_ITEM_FLAG            VARCHAR2(1)    Y                        
CUSTOMER_ORDER_FLAG            VARCHAR2(1)    Y                        
INTERNAL_ORDER_FLAG            VARCHAR2(1)    Y                        
SERVICE_ITEM_FLAG              VARCHAR2(1)    Y                        
INVENTORY_ITEM_FLAG            VARCHAR2(1)    Y                        
ENG_ITEM_FLAG                  VARCHAR2(1)    Y                        
INVENTORY_ASSET_FLAG           VARCHAR2(1)    Y                        
PURCHASING_ENABLED_FLAG        VARCHAR2(1)    Y                        
CUSTOMER_ORDER_ENABLED_FLAG    VARCHAR2(1)    Y                        
INTERNAL_ORDER_ENABLED_FLAG    VARCHAR2(1)    Y                        
SO_TRANSACTIONS_FLAG           VARCHAR2(1)    Y                        
MTL_TRANSACTIONS_ENABLED_FLAG  VARCHAR2(1)    Y                        
STOCK_ENABLED_FLAG             VARCHAR2(1)    Y                        
BOM_ENABLED_FLAG               VARCHAR2(1)    Y                        
BUILD_IN_WIP_FLAG              VARCHAR2(1)    Y                        
REVISION_QTY_CONTROL_CODE      NUMBER         Y                        
ITEM_CATALOG_GROUP_ID          NUMBER         Y                        
CATALOG_STATUS_FLAG            VARCHAR2(1)    Y                        
RETURNABLE_FLAG                VARCHAR2(1)    Y                        
DEFAULT_SHIPPING_ORG           NUMBER         Y                        
COLLATERAL_FLAG                VARCHAR2(1)    Y                        
TAXABLE_FLAG                   VARCHAR2(1)    Y                        
QTY_RCV_EXCEPTION_CODE         VARCHAR2(25)   Y                        
ALLOW_ITEM_DESC_UPDATE_FLAG    VARCHAR2(1)    Y                        
INSPECTION_REQUIRED_FLAG       VARCHAR2(1)    Y                        
RECEIPT_REQUIRED_FLAG          VARCHAR2(1)    Y                        
MARKET_PRICE                   NUMBER         Y                        
HAZARD_CLASS_ID                NUMBER         Y                        
RFQ_REQUIRED_FLAG              VARCHAR2(1)    Y                        
QTY_RCV_TOLERANCE              NUMBER         Y                        
LIST_PRICE_PER_UNIT            NUMBER         Y                        
UN_NUMBER_ID                   NUMBER         Y                        
PRICE_TOLERANCE_PERCENT        NUMBER         Y                        
ASSET_CATEGORY_ID              NUMBER         Y                        
ROUNDING_FACTOR                NUMBER         Y                        
UNIT_OF_ISSUE                  VARCHAR2(25)   Y                        
ENFORCE_SHIP_TO_LOCATION_CODE  VARCHAR2(25)   Y                        
ALLOW_SUBSTITUTE_RECEIPTS_FLAG VARCHAR2(1)    Y                        
ALLOW_UNORDERED_RECEIPTS_FLAG  VARCHAR2(1)    Y                        
ALLOW_EXPRESS_DELIVERY_FLAG    VARCHAR2(1)    Y                        
DAYS_EARLY_RECEIPT_ALLOWED     NUMBER         Y                        
DAYS_LATE_RECEIPT_ALLOWED      NUMBER         Y                        
RECEIPT_DAYS_EXCEPTION_CODE    VARCHAR2(25)   Y                        
RECEIVING_ROUTING_ID           NUMBER         Y                        
INVOICE_CLOSE_TOLERANCE        NUMBER         Y                        
RECEIVE_CLOSE_TOLERANCE        NUMBER         Y                        
AUTO_LOT_ALPHA_PREFIX          VARCHAR2(30)   Y                        
START_AUTO_LOT_NUMBER          VARCHAR2(30)   Y                        
LOT_CONTROL_CODE               NUMBER         Y                        
SHELF_LIFE_CODE                NUMBER         Y                        
SHELF_LIFE_DAYS                NUMBER         Y                        
SERIAL_NUMBER_CONTROL_CODE     NUMBER         Y                        
START_AUTO_SERIAL_NUMBER       VARCHAR2(30)   Y                        
AUTO_SERIAL_ALPHA_PREFIX       VARCHAR2(30)   Y                        
SOURCE_TYPE                    NUMBER         Y                        
SOURCE_ORGANIZATION_ID         NUMBER         Y                        
SOURCE_SUBINVENTORY            VARCHAR2(10)   Y                        
EXPENSE_ACCOUNT                NUMBER         Y                        
ENCUMBRANCE_ACCOUNT            NUMBER         Y                        
RESTRICT_SUBINVENTORIES_CODE   NUMBER         Y                        
UNIT_WEIGHT                    NUMBER         Y                        
WEIGHT_UOM_CODE                VARCHAR2(3)    Y                        
VOLUME_UOM_CODE                VARCHAR2(3)    Y                        
UNIT_VOLUME                    NUMBER         Y                        
RESTRICT_LOCATORS_CODE         NUMBER         Y                        
LOCATION_CONTROL_CODE          NUMBER         Y                        
SHRINKAGE_RATE                 NUMBER         Y                        
ACCEPTABLE_EARLY_DAYS          NUMBER         Y                        
PLANNING_TIME_FENCE_CODE       NUMBER         Y                        
DEMAND_TIME_FENCE_CODE         NUMBER         Y                        
LEAD_TIME_LOT_SIZE             NUMBER         Y                        
STD_LOT_SIZE                   NUMBER         Y                        
CUM_MANUFACTURING_LEAD_TIME    NUMBER         Y                        
OVERRUN_PERCENTAGE             NUMBER         Y                        
MRP_CALCULATE_ATP_FLAG         VARCHAR2(1)    Y                        
ACCEPTABLE_RATE_INCREASE       NUMBER         Y                        
ACCEPTABLE_RATE_DECREASE       NUMBER         Y                        
CUMULATIVE_TOTAL_LEAD_TIME     NUMBER         Y                        
PLANNING_TIME_FENCE_DAYS       NUMBER         Y                        
DEMAND_TIME_FENCE_DAYS         NUMBER         Y                        
END_ASSEMBLY_PEGGING_FLAG      VARCHAR2(1)    Y                        
REPETITIVE_PLANNING_FLAG       VARCHAR2(1)    Y                        
PLANNING_EXCEPTION_SET         VARCHAR2(10)   Y                        
BOM_ITEM_TYPE                  NUMBER         Y                        
PICK_COMPONENTS_FLAG           VARCHAR2(1)    Y                        
REPLENISH_TO_ORDER_FLAG        VARCHAR2(1)    Y                        
BASE_ITEM_ID                   NUMBER         Y                        
ATP_COMPONENTS_FLAG            VARCHAR2(1)    Y                        
ATP_FLAG                       VARCHAR2(1)    Y                        
FIXED_LEAD_TIME                NUMBER         Y                        
VARIABLE_LEAD_TIME             NUMBER         Y                        
WIP_SUPPLY_LOCATOR_ID          NUMBER         Y                        
WIP_SUPPLY_TYPE                NUMBER         Y                        
WIP_SUPPLY_SUBINVENTORY        VARCHAR2(10)   Y                        
PRIMARY_UOM_CODE               VARCHAR2(3)    Y                        
PRIMARY_UNIT_OF_MEASURE        VARCHAR2(25)   Y                        
ALLOWED_UNITS_LOOKUP_CODE      NUMBER         Y                        
COST_OF_SALES_ACCOUNT          NUMBER         Y                        
SALES_ACCOUNT                  NUMBER         Y                        
DEFAULT_INCLUDE_IN_ROLLUP_FLAG VARCHAR2(1)    Y                        
INVENTORY_ITEM_STATUS_CODE     VARCHAR2(10)   Y                        
INVENTORY_PLANNING_CODE        NUMBER         Y                        
PLANNER_CODE                   VARCHAR2(10)   Y                        
PLANNING_MAKE_BUY_CODE         NUMBER         Y                        
FIXED_LOT_MULTIPLIER           NUMBER         Y                        
ROUNDING_CONTROL_TYPE          NUMBER         Y                        
CARRYING_COST                  NUMBER         Y                        
POSTPROCESSING_LEAD_TIME       NUMBER         Y                        
PREPROCESSING_LEAD_TIME        NUMBER         Y                        
FULL_LEAD_TIME                 NUMBER         Y                        
ORDER_COST                     NUMBER         Y                        
MRP_SAFETY_STOCK_PERCENT       NUMBER         Y                        
MRP_SAFETY_STOCK_CODE          NUMBER         Y                        
MIN_MINMAX_QUANTITY            NUMBER         Y                        
MAX_MINMAX_QUANTITY            NUMBER         Y                        
MINIMUM_ORDER_QUANTITY         NUMBER         Y                        
FIXED_ORDER_QUANTITY           NUMBER         Y                        
FIXED_DAYS_SUPPLY              NUMBER         Y                        
MAXIMUM_ORDER_QUANTITY         NUMBER         Y                        
ATP_RULE_ID                    NUMBER         Y                        
PICKING_RULE_ID                NUMBER         Y                        
RESERVABLE_TYPE                NUMBER         Y                        
POSITIVE_MEASUREMENT_ERROR     NUMBER         Y                        
NEGATIVE_MEASUREMENT_ERROR     NUMBER         Y                        
ENGINEERING_ECN_CODE           VARCHAR2(50)   Y                        
ENGINEERING_ITEM_ID            NUMBER         Y                        
ENGINEERING_DATE               DATE           Y                        
SERVICE_STARTING_DELAY         NUMBER         Y                        
VENDOR_WARRANTY_FLAG           VARCHAR2(1)    Y                        
SERVICEABLE_COMPONENT_FLAG     VARCHAR2(1)    Y                        
SERVICEABLE_PRODUCT_FLAG       VARCHAR2(1)    Y                        
BASE_WARRANTY_SERVICE_ID       NUMBER         Y                        
PAYMENT_TERMS_ID               NUMBER         Y                        
PREVENTIVE_MAINTENANCE_FLAG    VARCHAR2(1)    Y                        
PRIMARY_SPECIALIST_ID          NUMBER         Y                        
SECONDARY_SPECIALIST_ID        NUMBER         Y                        
SERVICEABLE_ITEM_CLASS_ID      NUMBER         Y                        
TIME_BILLABLE_FLAG             VARCHAR2(1)    Y                        
MATERIAL_BILLABLE_FLAG         VARCHAR2(30)   Y                        
EXPENSE_BILLABLE_FLAG          VARCHAR2(1)    Y                        
PRORATE_SERVICE_FLAG           VARCHAR2(1)    Y                        
COVERAGE_SCHEDULE_ID           NUMBER         Y                        
SERVICE_DURATION_PERIOD_CODE   VARCHAR2(10)   Y                        
SERVICE_DURATION               NUMBER         Y                        
WARRANTY_VENDOR_ID             NUMBER         Y                        
MAX_WARRANTY_AMOUNT            NUMBER         Y                        
RESPONSE_TIME_PERIOD_CODE      VARCHAR2(30)   Y                        
RESPONSE_TIME_VALUE            NUMBER         Y                        
NEW_REVISION_CODE              VARCHAR2(30)   Y                        
INVOICEABLE_ITEM_FLAG          VARCHAR2(1)    Y                        
TAX_CODE                       VARCHAR2(50)   Y                        
INVOICE_ENABLED_FLAG           VARCHAR2(1)    Y                        
MUST_USE_APPROVED_VENDOR_FLAG  VARCHAR2(1)    Y                        
REQUEST_ID                     NUMBER         Y                        
PROGRAM_APPLICATION_ID         NUMBER         Y                        
PROGRAM_ID                     NUMBER         Y                        
PROGRAM_UPDATE_DATE            DATE           Y                        
OUTSIDE_OPERATION_FLAG         VARCHAR2(1)    Y                        
OUTSIDE_OPERATION_UOM_TYPE     VARCHAR2(25)   Y                        
SAFETY_STOCK_BUCKET_DAYS       NUMBER         Y                        
AUTO_REDUCE_MPS                NUMBER(22)     Y                        
COSTING_ENABLED_FLAG           VARCHAR2(1)    Y                        
CYCLE_COUNT_ENABLED_FLAG       VARCHAR2(1)    Y                        
DEMAND_SOURCE_LINE             VARCHAR2(30)   Y                        
COPY_ITEM_ID                   NUMBER         Y                        
SET_ID                         VARCHAR2(10)   Y                        
REVISION                       VARCHAR2(3)    Y                        
AUTO_CREATED_CONFIG_FLAG       VARCHAR2(1)    Y                        
ITEM_TYPE                      VARCHAR2(30)   Y                        
MODEL_CONFIG_CLAUSE_NAME       VARCHAR2(10)   Y                        
SHIP_MODEL_COMPLETE_FLAG       VARCHAR2(1)    Y                        
MRP_PLANNING_CODE              NUMBER         Y                        
RETURN_INSPECTION_REQUIREMENT  NUMBER         Y                        
DEMAND_SOURCE_TYPE             NUMBER         Y                        
DEMAND_SOURCE_HEADER_ID        NUMBER         Y                        
TRANSACTION_ID                 NUMBER         Y                        
PROCESS_FLAG                   NUMBER         Y                        
ORGANIZATION_CODE              VARCHAR2(3)    Y                        
ITEM_NUMBER                    VARCHAR2(700)  Y                        
COPY_ITEM_NUMBER               VARCHAR2(81)   Y                        
TEMPLATE_ID                    NUMBER         Y                        
TEMPLATE_NAME                  VARCHAR2(30)   Y                        
COPY_ORGANIZATION_ID           NUMBER         Y                        
COPY_ORGANIZATION_CODE         VARCHAR2(3)    Y                        
ATO_FORECAST_CONTROL           NUMBER         Y                        
TRANSACTION_TYPE               VARCHAR2(10)   Y                        
MATERIAL_COST                  NUMBER         Y                        
MATERIAL_SUB_ELEM              VARCHAR2(10)   Y                        
MATERIAL_OH_RATE               NUMBER         Y                        
MATERIAL_OH_SUB_ELEM           VARCHAR2(10)   Y                        
MATERIAL_SUB_ELEM_ID           NUMBER         Y                        
MATERIAL_OH_SUB_ELEM_ID        NUMBER         Y                        
AUTO_REL_TIME_FENCE_CODE       NUMBER         Y                        
AUTO_REL_TIME_FENCE_DAYS       NUMBER         Y                        
CONTAINER_ITEM_FLAG            VARCHAR2(1)    Y                        
VEHICLE_ITEM_FLAG              VARCHAR2(1)    Y                        
MAXIMUM_LOAD_WEIGHT            NUMBER         Y                        
MINIMUM_FILL_PERCENT           NUMBER         Y                        
CONTAINER_TYPE_CODE            VARCHAR2(30)   Y                        
INTERNAL_VOLUME                NUMBER         Y                        
SET_PROCESS_ID                 NUMBER                  0               
CHECK_SHORTAGES_FLAG           VARCHAR2(1)    Y                        
RELEASE_TIME_FENCE_CODE        NUMBER         Y                        
RELEASE_TIME_FENCE_DAYS        NUMBER         Y                        
WH_UPDATE_DATE                 DATE           Y                        
PRODUCT_FAMILY_ITEM_ID         NUMBER         Y                        
PURCHASING_TAX_CODE            VARCHAR2(50)   Y                        
OVERCOMPLETION_TOLERANCE_TYPE  NUMBER         Y                        
OVERCOMPLETION_TOLERANCE_VALUE NUMBER         Y                        
EFFECTIVITY_CONTROL            NUMBER         Y                        
GLOBAL_ATTRIBUTE_CATEGORY      VARCHAR2(150)  Y                        
GLOBAL_ATTRIBUTE1              VARCHAR2(150)  Y                        
GLOBAL_ATTRIBUTE2              VARCHAR2(150)  Y                        
GLOBAL_ATTRIBUTE3              VARCHAR2(150)  Y                        
GLOBAL_ATTRIBUTE4              VARCHAR2(150)  Y                        
GLOBAL_ATTRIBUTE5              VARCHAR2(150)  Y                        
GLOBAL_ATTRIBUTE6              VARCHAR2(150)  Y                        
GLOBAL_ATTRIBUTE7              VARCHAR2(150)  Y                        
GLOBAL_ATTRIBUTE8              VARCHAR2(150)  Y                        
GLOBAL_ATTRIBUTE9              VARCHAR2(150)  Y                        
GLOBAL_ATTRIBUTE10             VARCHAR2(150)  Y                        
OVER_SHIPMENT_TOLERANCE        NUMBER         Y                        
UNDER_SHIPMENT_TOLERANCE       NUMBER         Y                        
OVER_RETURN_TOLERANCE          NUMBER         Y                        
UNDER_RETURN_TOLERANCE         NUMBER         Y                        
EQUIPMENT_TYPE                 NUMBER         Y                        
RECOVERED_PART_DISP_CODE       VARCHAR2(30)   Y                        
DEFECT_TRACKING_ON_FLAG        VARCHAR2(1)    Y                        
USAGE_ITEM_FLAG                VARCHAR2(1)    Y                        
EVENT_FLAG                     VARCHAR2(1)    Y                        
ELECTRONIC_FLAG                VARCHAR2(1)    Y                        
DOWNLOADABLE_FLAG              VARCHAR2(1)    Y                        
VOL_DISCOUNT_EXEMPT_FLAG       VARCHAR2(1)    Y                        
COUPON_EXEMPT_FLAG             VARCHAR2(1)    Y                        
COMMS_NL_TRACKABLE_FLAG        VARCHAR2(1)    Y                        
ASSET_CREATION_CODE            VARCHAR2(30)   Y                        
COMMS_ACTIVATION_REQD_FLAG     VARCHAR2(1)    Y                        
ORDERABLE_ON_WEB_FLAG          VARCHAR2(1)    Y                        
BACK_ORDERABLE_FLAG            VARCHAR2(1)    Y                        
WEB_STATUS                     VARCHAR2(30)   Y                        
INDIVISIBLE_FLAG               VARCHAR2(1)    Y                        
LONG_DESCRIPTION               VARCHAR2(4000) Y                        
DIMENSION_UOM_CODE             VARCHAR2(3)    Y                        
UNIT_LENGTH                    NUMBER         Y                        
UNIT_WIDTH                     NUMBER         Y                        
UNIT_HEIGHT                    NUMBER         Y                        
BULK_PICKED_FLAG               VARCHAR2(1)    Y                        
LOT_STATUS_ENABLED             VARCHAR2(1)    Y                        
DEFAULT_LOT_STATUS_ID          NUMBER         Y                        
SERIAL_STATUS_ENABLED          VARCHAR2(1)    Y                        
DEFAULT_SERIAL_STATUS_ID       NUMBER         Y                        
LOT_SPLIT_ENABLED              VARCHAR2(1)    Y                        
LOT_MERGE_ENABLED              VARCHAR2(1)    Y                        
INVENTORY_CARRY_PENALTY        NUMBER         Y                        
OPERATION_SLACK_PENALTY        NUMBER         Y                        
FINANCING_ALLOWED_FLAG         VARCHAR2(1)    Y                        
EAM_ITEM_TYPE                  NUMBER         Y                        
EAM_ACTIVITY_TYPE_CODE         VARCHAR2(30)   Y                        
EAM_ACTIVITY_CAUSE_CODE        VARCHAR2(30)   Y                        
EAM_ACT_NOTIFICATION_FLAG      VARCHAR2(1)    Y                        
EAM_ACT_SHUTDOWN_STATUS        VARCHAR2(30)   Y                        
DUAL_UOM_CONTROL               NUMBER         Y                        
SECONDARY_UOM_CODE             VARCHAR2(3)    Y                        
DUAL_UOM_DEVIATION_HIGH        NUMBER         Y                        
DUAL_UOM_DEVIATION_LOW         NUMBER         Y                        
CONTRACT_ITEM_TYPE_CODE        VARCHAR2(30)   Y                        
SUBSCRIPTION_DEPEND_FLAG       VARCHAR2(1)    Y                        
SERV_REQ_ENABLED_CODE          VARCHAR2(30)   Y                        
SERV_BILLING_ENABLED_FLAG      VARCHAR2(1)    Y                        
SERV_IMPORTANCE_LEVEL          NUMBER         Y                        
PLANNED_INV_POINT_FLAG         VARCHAR2(1)    Y                        
LOT_TRANSLATE_ENABLED          VARCHAR2(1)    Y                        
DEFAULT_SO_SOURCE_TYPE         VARCHAR2(30)   Y                        
CREATE_SUPPLY_FLAG             VARCHAR2(1)    Y                        
SUBSTITUTION_WINDOW_CODE       NUMBER         Y                        
SUBSTITUTION_WINDOW_DAYS       NUMBER         Y                        
IB_ITEM_INSTANCE_CLASS         VARCHAR2(30)   Y                        
CONFIG_MODEL_TYPE              VARCHAR2(30)   Y                        
LOT_SUBSTITUTION_ENABLED       VARCHAR2(1)    Y                        
MINIMUM_LICENSE_QUANTITY       NUMBER         Y                        
EAM_ACTIVITY_SOURCE_CODE       VARCHAR2(30)   Y                        
LIFECYCLE_ID                   NUMBER         Y                        
CURRENT_PHASE_ID               NUMBER         Y                        
TRACKING_QUANTITY_IND          VARCHAR2(30)   Y                        
ONT_PRICING_QTY_SOURCE         VARCHAR2(30)   Y                        
SECONDARY_DEFAULT_IND          VARCHAR2(30)   Y                        
VMI_MINIMUM_UNITS              NUMBER         Y                        
VMI_MINIMUM_DAYS               NUMBER         Y                        
VMI_MAXIMUM_UNITS              NUMBER         Y                        
VMI_MAXIMUM_DAYS               NUMBER         Y                        
VMI_FIXED_ORDER_QUANTITY       NUMBER         Y                        
SO_AUTHORIZATION_FLAG          NUMBER         Y                        
CONSIGNED_FLAG                 NUMBER         Y                        
ASN_AUTOEXPIRE_FLAG            NUMBER         Y                        
VMI_FORECAST_TYPE              NUMBER         Y                        
FORECAST_HORIZON               NUMBER         Y                        
EXCLUDE_FROM_BUDGET_FLAG       NUMBER         Y                        
DAYS_TGT_INV_SUPPLY            NUMBER         Y                        
DAYS_TGT_INV_WINDOW            NUMBER         Y                        
DAYS_MAX_INV_SUPPLY            NUMBER         Y                        
DAYS_MAX_INV_WINDOW            NUMBER         Y                        
DRP_PLANNED_FLAG               NUMBER         Y                        
CRITICAL_COMPONENT_FLAG        NUMBER         Y                        
CONTINOUS_TRANSFER             NUMBER         Y                        
CONVERGENCE                    NUMBER         Y                        
DIVERGENCE                     NUMBER         Y                        
CONFIG_ORGS                    VARCHAR2(30)   Y                        
CONFIG_MATCH                   VARCHAR2(30)   Y                        
ATTRIBUTE16                    VARCHAR2(240)  Y                        
ATTRIBUTE17                    VARCHAR2(240)  Y                        
ATTRIBUTE18                    VARCHAR2(240)  Y                        
ATTRIBUTE19                    VARCHAR2(240)  Y                        
ATTRIBUTE20                    VARCHAR2(240)  Y                        
ATTRIBUTE21                    VARCHAR2(240)  Y                        
ATTRIBUTE22                    VARCHAR2(240)  Y                        
ATTRIBUTE23                    VARCHAR2(240)  Y                        
ATTRIBUTE24                    VARCHAR2(240)  Y                        
ATTRIBUTE25                    VARCHAR2(240)  Y                        
ATTRIBUTE26                    VARCHAR2(240)  Y                        
ATTRIBUTE27                    VARCHAR2(240)  Y                        
ATTRIBUTE28                    VARCHAR2(240)  Y                        
ATTRIBUTE29                    VARCHAR2(240)  Y                        
ATTRIBUTE30                    VARCHAR2(240)  Y                        
CAS_NUMBER                     VARCHAR2(30)   Y                        
CHILD_LOT_FLAG                 VARCHAR2(1)    Y                        
CHILD_LOT_PREFIX               VARCHAR2(30)   Y                        
CHILD_LOT_STARTING_NUMBER      NUMBER         Y                        
CHILD_LOT_VALIDATION_FLAG      VARCHAR2(1)    Y                        
COPY_LOT_ATTRIBUTE_FLAG        VARCHAR2(1)    Y                        
DEFAULT_GRADE                  VARCHAR2(150)  Y                        
EXPIRATION_ACTION_CODE         VARCHAR2(32)   Y                        
EXPIRATION_ACTION_INTERVAL     NUMBER         Y                        
GRADE_CONTROL_FLAG             VARCHAR2(1)    Y                        
HAZARDOUS_MATERIAL_FLAG        VARCHAR2(1)    Y                        
HOLD_DAYS                      NUMBER         Y                        
LOT_DIVISIBLE_FLAG             VARCHAR2(1)    Y                        
MATURITY_DAYS                  NUMBER         Y                        
PARENT_CHILD_GENERATION_FLAG   VARCHAR2(1)    Y                        
PROCESS_COSTING_ENABLED_FLAG   VARCHAR2(1)    Y                        
PROCESS_EXECUTION_ENABLED_FLAG VARCHAR2(1)    Y                        
PROCESS_QUALITY_ENABLED_FLAG   VARCHAR2(1)    Y                        
PROCESS_SUPPLY_LOCATOR_ID      NUMBER         Y                        
PROCESS_SUPPLY_SUBINVENTORY    VARCHAR2(10)   Y                        
PROCESS_YIELD_LOCATOR_ID       NUMBER         Y                        
PROCESS_YIELD_SUBINVENTORY     VARCHAR2(10)   Y                        
RECIPE_ENABLED_FLAG            VARCHAR2(1)    Y                        
RETEST_INTERVAL                NUMBER         Y                        
CHARGE_PERIODICITY_CODE        VARCHAR2(3)    Y                        
REPAIR_LEADTIME                NUMBER         Y                        
REPAIR_YIELD                   NUMBER         Y                        
PREPOSITION_POINT              VARCHAR2(1)    Y                        
REPAIR_PROGRAM                 NUMBER         Y                        
SUBCONTRACTING_COMPONENT       NUMBER         Y                        
OUTSOURCED_ASSEMBLY            NUMBER         Y                        
SOURCE_SYSTEM_ID               NUMBER         Y                        
SOURCE_SYSTEM_REFERENCE        VARCHAR2(255)  Y                        
SOURCE_SYSTEM_REFERENCE_DESC   VARCHAR2(240)  Y                        
GLOBAL_TRADE_ITEM_NUMBER       VARCHAR2(14)   Y                        
CONFIRM_STATUS                 VARCHAR2(3)    Y                        
CHANGE_ID                      NUMBER         Y                        
CHANGE_LINE_ID                 NUMBER         Y                        
ITEM_CATALOG_GROUP_NAME        VARCHAR2(820)  Y                        
REVISION_IMPORT_POLICY         VARCHAR2(30)   Y                        
GTIN_DESCRIPTION               VARCHAR2(240)  Y                        
INTERFACE_TABLE_UNIQUE_ID      NUMBER         Y                        
GDSN_OUTBOUND_ENABLED_FLAG     VARCHAR2(1)    Y                        
TRADE_ITEM_DESCRIPTOR          VARCHAR2(35)   Y                        
STYLE_ITEM_ID                  NUMBER         Y                        
STYLE_ITEM_FLAG                VARCHAR2(1)    Y                        
STYLE_ITEM_NUMBER              VARCHAR2(700)  Y                        
COPY_REVISION_ID               NUMBER         Y                        
BUNDLE_ID                      NUMBER         Y                        
MESSAGE_TIMESTAMP              DATE           Y                        
MESSAGE_ID                     NUMBER         Y                        
OPERATION                      VARCHAR2(80)   Y                        
TOP_ITEM_FLAG                  VARCHAR2(1)    Y                        
GPC_CODE                       VARCHAR2(8)    Y                        
GLOBAL_ATTRIBUTE11             VARCHAR2(150)  Y                        
GLOBAL_ATTRIBUTE12             VARCHAR2(150)  Y                        
GLOBAL_ATTRIBUTE13             VARCHAR2(150)  Y                        
GLOBAL_ATTRIBUTE14             VARCHAR2(150)  Y                        
GLOBAL_ATTRIBUTE15             VARCHAR2(150)  Y                        
GLOBAL_ATTRIBUTE16             VARCHAR2(150)  Y                        
GLOBAL_ATTRIBUTE17             VARCHAR2(150)  Y                        
GLOBAL_ATTRIBUTE18             VARCHAR2(150)  Y                        
GLOBAL_ATTRIBUTE19             VARCHAR2(150)  Y                        
GLOBAL_ATTRIBUTE20             VARCHAR2(150)  Y