prompt Package Body : jr_rm_ins create or replace package body jr_rm_ins is -------------------------------------------------- -- Package : Private data/methods -------------------------------------------------- the_schema_irid number; the_schema_ivid number; ReferenceDomainId number; strProduct varchar2(240) := 'JR'; -- Constants used in types field in RM Tables -- Note, the type and property extension tables do not have a types column cnRM_TYPES_SQL_TABLES constant pls_integer := 9; cnRM_TYPES_SQL_COLUMNS constant pls_integer := 14; cnRM_TYPES_SQL_ROW_TYPES constant pls_integer := 13; cnRM_TYPES_ELEMENT_TYPES constant pls_integer := 8; cnRM_DATA_TYPES constant pls_integer := 41; cnRM_TYPES_PROPERTY_MAPS constant pls_integer := 15; cnRM_TYPES_PROPERTIES constant pls_integer := 3; -- and 16 ! cnRM_TYPES_LINK_TYPES constant pls_integer := 12; cnRM_TYPES_LINK_PROPERTIES constant pls_integer := 16; ------------------------------------------------ -- Procedure : put ------------------------------------------------ procedure put(msg varchar2) is begin jr_reg_io.put(msg); end put; ------------------------------------------------ -- Procedure : put_line ------------------------------------------------ procedure put_line(msg varchar2) is begin jr_reg_io.put_line(msg); end put_line; -------------------------------------------------- -- Procedure : create_schema_member -------------------------------------------------- procedure create_schema_member( object_type varchar2 , object_irid number , object_ivid number ) is begin if the_schema_irid is not null and the_schema_ivid is not null then -- put_line('Creating schema member for object type : ' || object_type); -- put_line('in schema, irid : ' || the_schema_irid || ' , ivid : ' || the_schema_ivid); insert into i$rm_sql_schema_members ( schema_irid , schema_ivid , object_type , object_irid , object_ivid ) values ( the_schema_irid , the_schema_ivid , create_schema_member.object_type , create_schema_member.object_irid , create_schema_member.object_ivid ); else null; -- TODO, raise error end if; end create_schema_member; --------------------------------------------- -- Procedure : rm_data_type_ins --------------------------------------------- procedure rm_data_type_ins ( i_datatype_id number , i_domain_name varchar2 , i_data_type varchar2 , i_data_length number , i_data_precision number , i_data_scale number , i_supertypes number default null ); ------------------------------------------------ -- Package : Public data/methods ------------------------------------------------ --------------------------------------------- -- Procedure : set_schema --------------------------------------------- procedure set_schema ( schema_irid number , schema_ivid number ) is begin put_line('Setting schema irid : ' || schema_irid || ' , ivid : ' || schema_ivid); the_schema_irid := schema_irid; the_schema_ivid := schema_ivid; end set_schema; --------------------------------------------- -- Procedure : set_product_code --------------------------------------------- procedure set_product_code (product varchar2 default 'JR') is begin put_line('Setting product : ' || upper(product)); strProduct := upper(product); end set_product_code; --------------------------------------------- -- Procedure : set_product --------------------------------------------- procedure set_product (product varchar2 default 'JR') is schema_irid number; schema_ivid number; schema_type varchar2(10) := 'USER'; begin set_product_code(product); rm_sql_schema_version_ins ( upper(product) -- 'schema' name , null -- comment , schema_irid -- irid , schema_ivid -- ivid , schema_type -- type ); jr_rm_ins.set_schema(schema_irid, schema_ivid); end set_product; --------------------------------------------- -- Fucntion : get_product --------------------------------------------- function get_product return varchar2 is begin return upper(strProduct); end get_product; --------------------------------------------- -- Procedure : rm_sql_schema_version_ins --------------------------------------------- procedure rm_sql_schema_version_ins ( p_name varchar2 -- , p_product varchar2 , p_comments varchar2 , p_irid out number , p_ivid out number , p_type varchar2 default 'USER' ) is begin -- Multiple schema versions not currently supported. -- If there is already a schema with this name, return that on select s.irid, s.ivid into p_irid, p_ivid from i$rm_sql_schema_versions s where s.name = upper(p_name) -- and s.product = upper(p_product) ; put_line('Reusing schema : ' || upper(p_name)); put_line('Schema irid : ' || p_irid); put_line('Schema ivid : ' || p_ivid); exception when no_data_found then -- No schema with requested name, create one p_irid := jr_util.get_new_irid; p_ivid := 1; insert into i$rm_sql_schema_versions ( irid , ivid , name -- , product , jr_type , comments ) values ( p_irid , p_ivid , upper(p_name) -- , upper(p_product) , upper(p_type) , nvl(p_comments, 'Single-version supported only.') ); put_line('Creating schema : ' || upper(p_name)); put_line('Schema irid : ' || p_irid); put_line('Schema ivid : ' || p_ivid); put_line('Schema type : ' || upper(p_type)); end rm_sql_schema_version_ins; --------------------------------------------- -- Procedure : rm_sql_table_ins --------------------------------------------- procedure rm_sql_table_ins ( p_table_name varchar2 , p_table_irid number , p_table_ivid number default 1 , p_populate_logical_model varchar2 default 'Y' , p_gen_api varchar2 default 'Y' , p_gen_api_callout varchar2 default 'N' , p_gen_api_callout_stub varchar2 default 'N' , p_maintain_dependent_objs boolean default false , p_is_system varchar2 default null , p_schema_type varchar2 default 'USER' , p_pct_free number default null , p_pct_used number default null , p_ini_trans number default null , p_max_trans number default null , p_initial_extent number default null , p_next_extent number default null , p_min_extents number default null , p_max_extents number default null , p_pct_increase number default null , p_comments varchar2 default null , p_extension varchar2 default null , p_owned_by varchar2 default null , p_nls varchar2 default null ) is maintain_dependent_objects varchar2(1); temp_table_name varchar2(30); begin if p_maintain_dependent_objs = true then maintain_dependent_objects := 'Y'; else maintain_dependent_objects := null; end if; -- If the tab_name has I$ prefix - delete first two chars of name temp_table_name := p_table_name; if (substr(p_table_name, 0, 2) = 'I$') or (substr(p_table_name, 0, 2) = 'i$') then temp_table_name := substr(p_table_name, 3); --p_table_name := temp_tab_name; end if; insert into i$rm_sql_tables ( irid , ivid , populate_logical_model , gen_api , gen_api_callout , gen_api_callout_stub , maintain_dependent_objects , is_system , jr_type , table_name , pct_free , pct_used , ini_trans , max_trans , initial_extent , next_extent , min_extents , max_extents , pct_increase , comments , extension , owned_by , nls -- Repos 1 columns , id , types , plural_name , short_name , product ) values ( p_table_irid , p_table_ivid , p_populate_logical_model , p_gen_api , p_gen_api_callout , p_gen_api_callout_stub , maintain_dependent_objects , p_is_system , upper(p_schema_type) , temp_table_name , p_pct_free , p_pct_used , p_ini_trans , p_max_trans , p_initial_extent , p_next_extent , p_min_extents , p_max_extents , p_pct_increase , p_comments , p_extension , p_owned_by , p_nls -- Repos 1 columns , p_table_irid -- set to same as table_irid , cnRM_TYPES_SQL_TABLES -- types , temp_table_name -- plural_name , substr(p_table_name, 1, 20) -- short_name , get_product ); create_schema_member(jr_meta.TABLE_DEF, p_table_irid, p_table_ivid); end rm_sql_table_ins; --------------------------------------------- -- Procedure : rm_sql_table_upd --------------------------------------------- procedure rm_sql_table_upd ( p_table_irid number , p_table_ivid number , p_owning_table varchar2 default null , p_name_column varchar2 default null , p_logical_type_column varchar2 default null , p_date_created_column varchar2 default null , p_date_changed_column varchar2 default null , p_created_by_column varchar2 default null , p_changed_by_column varchar2 default null , p_notm_column varchar2 default null ) is cur integer; ret integer; stmt varchar2(2000); b_upd boolean := false; begin if p_owning_table is not null or p_name_column is not null or p_logical_type_column is not null or p_date_created_column is not null or p_date_changed_column is not null or p_created_by_column is not null or p_changed_by_column is not null or p_notm_column is not null then -- At least one meta data column needs to be set update i$rm_sql_tables t set t.owned_by = nvl(p_owning_table, t.owned_by) , t.name_column = p_name_column , t.logical_type_column = p_logical_type_column , t.date_created_column = p_date_created_column , t.date_changed_column = p_date_changed_column , t.created_by_column = p_created_by_column , t.changed_by_column = p_changed_by_column , t.notm_column = p_notm_column where t.irid = p_table_irid and t.ivid = p_table_ivid ; end if; end rm_sql_table_upd; --------------------------------------------- -- Procedure : rm_sql_table_property_ins --------------------------------------------- procedure rm_sql_table_property_ins ( p_table_irid number , p_table_ivid number , p_property varchar2 , p_value varchar2 ) is begin insert into i$rm_sql_table_properties ( table_irid ,table_ivid ,property ,value ) values ( p_table_irid ,p_table_ivid ,p_property ,p_value ); end rm_sql_table_property_ins; --------------------------------------------- -- Procedure : rm_sql_column_ins --------------------------------------------- procedure rm_sql_column_ins ( p_table_irid number , p_id number , p_column_name varchar2 , p_column_seq number , p_data_type varchar2 , p_data_length number , p_data_precision number , p_data_scale number , p_nullable varchar2 , p_table_ivid number default 1 , p_default_length number default null , p_data_default long default null , p_num_distinct number default null , p_low_value raw default null , p_high_value raw default null , p_comments varchar2 default null , p_lob_index_name varchar2 default null , p_lob_chunk number default null , p_lob_pctversion number default null , p_lob_cache varchar2 default null , p_lob_logging varchar2 default null , p_lob_in_row varchar2 default null , p_nls varchar2 default null ) is begin -- CW 28-Oct-98, column_id populated from user_tab_columns -- is only unique within table. This is used to populate -- column_id and id in rm_sql_columns. -- However, the id needs to be globally unique to be able to -- be referenced by rm_sql_property_maps -- Populate id with a unique value insert into i$rm_sql_columns ( table_irid , table_ivid , column_id , column_name , data_type , data_length , data_precision , data_scale , nullable , default_length , data_default , num_distinct , low_value , high_value , comments , lob_index_name , lob_chunk , lob_pctversion , lob_cache , lob_logging , lob_in_row , nls -- Repos 1 columns , id , types , in_table , plural_name , short_name , temp ) values ( p_table_irid , p_table_ivid , p_column_seq , p_column_name , p_data_type , p_data_length , p_data_precision , p_data_scale , p_nullable , p_default_length , p_data_default , p_num_distinct , p_low_value , p_high_value , p_comments , p_lob_index_name , p_lob_chunk , p_lob_pctversion , p_lob_cache , p_lob_logging , p_lob_in_row , p_nls -- Repos 1 columns , p_id -- id , cnRM_TYPES_SQL_COLUMNS -- types , p_table_irid -- set to same as table_irid , p_column_name -- plural_name , substr(p_column_name, 1, 20) -- short_name , -1 -- used to discriminate registered and configured columns when merging meta data ); end rm_sql_column_ins; --------------------------------------------- -- Procedure : define_column -- Usage : Only use to define meta data -- for the special columns : -- IRID -- IVID -- PARENT_IVID --------------------------------------------- procedure define_column ( i_col_table_irid number , i_col_table_ivid number , i_col_id number , i_col_name varchar2 ) is data_type varchar2(30); data_length number; data_default varchar2(30); nullable varchar2(1); begin if i_col_name = 'DATE_CREATED'then data_type := 'DATE'; data_length := 7; data_default := 'sysdate'; nullable := 'N'; elsif i_col_name = 'DATE_CHANGED' then data_type := 'DATE'; data_length := 7; data_default := null; nullable := 'Y'; elsif i_col_name = 'CREATED_BY' then data_type := 'VARCHAR2'; data_length := 30; data_default := 'user'; nullable := 'N'; elsif i_col_name = 'CHANGED_BY' then data_type := 'VARCHAR2'; data_length := 30; data_default := null; nullable := 'Y'; elsif i_col_name = 'ELEMENT_TYPE_NAME' then data_type := 'VARCHAR2'; data_length := 10; data_default := '''USER'''; nullable := 'N'; elsif i_col_name = 'PAC_REF' or i_col_name = 'PARENT_IVID' then data_type := 'NUMBER'; data_length := 22; data_default := null; nullable := 'Y'; else -- IRID, IVID, TYPES, NOTM data_type := 'NUMBER'; data_length := 22; data_default := null; nullable := 'N'; if i_col_name = 'NOTM' then data_default := '0'; end if; end if; rm_sql_column_ins ( i_col_table_irid , jr_util.get_new_irid , i_col_name , i_col_id , data_type , data_length , null -- precision , null -- scale , nullable -- nullable , i_col_table_ivid , null -- default length , data_default -- default ); end define_column; --------------------------------------------- -- Procedure : rm_sql_column_propertys_ins --------------------------------------------- procedure rm_sql_column_property_ins ( p_col_table_irid number , p_col_table_ivid number , p_col_column_id number , p_property varchar2 , p_value varchar2 ) is begin insert into i$rm_sql_column_properties ( col_table_irid ,col_table_ivid ,col_column_id ,property ,value ) values ( p_col_table_irid ,p_col_table_ivid ,p_col_column_id ,p_property ,p_value ); end rm_sql_column_property_ins; --------------------------------------------- -- Procedure : rm_sql_constraint_ins --------------------------------------------- procedure rm_sql_constraint_ins ( p_constraint_irid number , p_constraint_ivid number , p_table_irid number , p_table_ivid number , p_constraint_name varchar2 , p_constraint_type varchar2 , p_search_condition long , p_r_constraint_name varchar2 , p_delete_rule varchar2 , p_deferrable varchar2 , p_is_owning_fk varchar2 , p_key_updateable varchar2 default 'Y' ) is is_oracle_constraint varchar2(1) := 'N'; begin -- CW 26-Apr-2000 -- Fix bug 1279275, deferred constraint checking (after copy) checks all constraints -- not implemented as an Oracle constraint. -- In fixing bug 948067, 'SYS%' check constraints are now stored in rm_sql_constraints -- and the value of oracle_constraint was defaulted to 'N' meaning deferred constraint -- checking would try to call a plsql function 'SYS...' when there isn't one. -- All check constraints are implemented as Oracle constraints if p_constraint_type = 'C' then is_oracle_constraint := 'Y'; end if; insert into i$rm_sql_constraints ( irid , ivid , table_irid , table_ivid , constraint_name , constraint_type , search_condition , r_constraint_name , delete_rule , deferrable , is_owning_fk , updateable , oracle_constraint ) values ( p_constraint_irid , p_constraint_ivid , p_table_irid , p_table_ivid , p_constraint_name , p_constraint_type , p_search_condition , p_r_constraint_name , p_delete_rule , p_deferrable , p_is_owning_fk , p_key_updateable , is_oracle_constraint ); create_schema_member(jr_meta.CONSTRAINT_DEF, p_constraint_irid, p_constraint_ivid); end rm_sql_constraint_ins; --------------------------------------------- -- Procedure : rm_sql_cons_column_ins --------------------------------------------- procedure rm_sql_cons_column_ins ( p_constraint_irid number , p_constraint_ivid number , p_position number , p_column_name varchar2 ) is begin insert into i$rm_sql_cons_columns ( constraint_irid ,constraint_ivid ,position ,column_name ) values ( p_constraint_irid ,p_constraint_ivid ,p_position ,p_column_name ); end rm_sql_cons_column_ins; --------------------------------------------- -- Procedure : rm_sql_trigger_ins --------------------------------------------- procedure rm_sql_trigger_ins ( p_trigger_irid number , p_trigger_ivid number , p_table_irid number , p_table_ivid number , p_trigger_name varchar2 , p_trigger_type varchar2 , p_triggering_event varchar2 , p_referencing_names varchar2 , p_when_clause varchar2 , p_description varchar2 , p_trigger_body long ) is begin insert into i$rm_sql_triggers ( irid ,ivid ,table_irid ,table_ivid ,trigger_name ,trigger_type ,triggering_event ,referencing_names ,when_clause ,description ,trigger_body ) values ( p_trigger_irid ,p_trigger_ivid ,p_table_irid ,p_table_ivid ,p_trigger_name ,p_trigger_type ,p_triggering_event ,p_referencing_names ,p_when_clause ,p_description ,p_trigger_body ); create_schema_member(jr_meta.TRIGGER_DEF, p_trigger_irid, p_trigger_ivid); end rm_sql_trigger_ins; --------------------------------------------- -- Procedure : rm_sql_index_ins --------------------------------------------- procedure rm_sql_index_ins ( p_index_irid number , p_index_ivid number , p_table_irid number , p_table_ivid number , p_index_name varchar2 , p_index_type varchar2 , p_uniqueness varchar2 , p_ini_trans number , p_max_trans number , p_initial_extent number , p_next_extent number , p_min_extents number , p_max_extents number , p_pct_increase number , p_pct_threshold number , p_include_column number , p_freelists number , p_freelist_groups number , p_pct_free number ) is begin insert into i$rm_sql_indexes ( irid ,ivid ,table_irid ,table_ivid ,index_name ,index_type ,uniqueness ,ini_trans ,max_trans ,initial_extent ,next_extent ,min_extents ,max_extents ,pct_increase ,pct_threshold ,include_column ,freelists ,freelist_groups ,pct_free ) values ( p_index_irid ,p_index_ivid ,p_table_irid ,p_table_ivid ,p_index_name ,p_index_type ,p_uniqueness ,p_ini_trans ,p_max_trans ,p_initial_extent ,p_next_extent ,p_min_extents ,p_max_extents ,p_pct_increase ,p_pct_threshold ,p_include_column ,p_freelists ,p_freelist_groups ,p_pct_free ); create_schema_member(jr_meta.INDEX_DEF, p_index_irid, p_index_ivid); end rm_sql_index_ins; --------------------------------------------- -- Procedure : rm_sql_ind_column_ins --------------------------------------------- procedure rm_sql_ind_column_ins ( p_index_irid number , p_index_ivid number , p_column_position number , p_column_name varchar2 , p_column_length number ) is begin insert into i$rm_sql_ind_columns ( index_irid ,index_ivid ,column_position ,column_name ,column_length ) values ( p_index_irid ,p_index_ivid ,p_column_position ,p_column_name ,p_column_length ); end rm_sql_ind_column_ins; --------------------------------------------- -- Procedure : rm_sql_view_ins --------------------------------------------- procedure rm_sql_view_ins ( p_view_irid number , p_view_ivid number , p_view_name varchar2 , p_text_length number , p_text long , p_type_text_length number , p_type_text varchar2 , p_oid_text_length number , p_oid_text varchar2 , p_view_type_owner varchar2 , p_view_type varchar2 ) is begin insert into i$rm_sql_views ( irid ,ivid ,view_name ,text_length ,text ,type_text_length ,type_text ,oid_text_length ,oid_text ,view_type_owner ,view_type ) values ( p_view_irid ,p_view_ivid ,p_view_name ,p_text_length ,p_text ,p_type_text_length ,p_type_text ,p_oid_text_length ,p_oid_text ,p_view_type_owner ,p_view_type ); create_schema_member(jr_meta.VIEW_DEF, p_view_irid, p_view_ivid); end rm_sql_view_ins; --------------------------------------------- -- Procedure : rm_sql_sequence_ins --------------------------------------------- procedure rm_sql_sequence_ins ( p_sequence_irid number , p_sequence_ivid number , p_sequence_name varchar2 , p_min_value number , p_max_value number , p_increment_by number , p_cycle_flag varchar2 , p_order_flag varchar2 , p_cache_size number , p_start_with number ) is begin insert into i$rm_sql_sequences ( irid ,ivid ,sequence_name ,min_value ,max_value ,increment_by ,cycle_flag ,order_flag ,cache_size ,start_with ) values ( p_sequence_irid ,p_sequence_ivid ,p_sequence_name ,p_min_value ,p_max_value ,p_increment_by ,p_cycle_flag ,p_order_flag ,p_cache_size ,p_start_with ); create_schema_member(jr_meta.SEQUENCE_DEF, p_sequence_irid, p_sequence_ivid); end rm_sql_sequence_ins; --------------------------------------------- -- Procedure : rm_sql_stored_object_ins --------------------------------------------- procedure rm_sql_stored_object_ins ( p_stored_object_irid number , p_stored_object_ivid number , p_object_name varchar2 , p_object_type varchar2 ) is begin insert into i$rm_sql_stored_objects ( irid ,ivid ,name ,type ) values ( p_stored_object_irid ,p_stored_object_ivid ,p_object_name ,p_object_type ); if p_object_type = 'PROCEDURE' then create_schema_member(jr_meta.PROCEDURE_DEF, p_stored_object_irid, p_stored_object_ivid); elsif p_object_type = 'FUNCTION' then create_schema_member(jr_meta.FUNCTION_DEF, p_stored_object_irid, p_stored_object_ivid); elsif p_object_type = 'PACKAGE' then create_schema_member(jr_meta.PACKAGE_DEF, p_stored_object_irid, p_stored_object_ivid); elsif p_object_type = 'PACKAGE BODY' then create_schema_member(jr_meta.PACKAGE_BODY_DEF, p_stored_object_irid, p_stored_object_ivid); end if; end rm_sql_stored_object_ins; --------------------------------------------- -- Procedure : rm_sql_source_ins --------------------------------------------- procedure rm_sql_source_ins ( p_stored_object_irid number , p_stored_object_ivid number , p_line number , p_text varchar2 ) is begin insert into i$rm_sql_source ( stored_object_irid ,stored_object_ivid ,line ,text ) values ( p_stored_object_irid ,p_stored_object_ivid ,p_line ,p_text ); end rm_sql_source_ins; --------------------------------------------- -- Procedure : rm_sql_synonym_ins --------------------------------------------- procedure rm_sql_synonym_ins ( p_synonym_irid number , p_synonym_ivid number , p_synonym_name varchar2 , p_object_name varchar2 ) is begin insert into i$rm_sql_synonyms ( irid ,ivid ,synonym_name ,object_name ) values ( p_synonym_irid ,p_synonym_ivid ,p_synonym_name ,p_object_name ); create_schema_member(jr_meta.SYNONYM_DEF, p_synonym_irid, p_synonym_ivid); end rm_sql_synonym_ins; --------------------------------------------- -- Function : rm_sql_row_type_ins (private) --------------------------------------------- function rm_sql_row_type_ins (i_table_irid number) return number is new_srt_id number; begin new_srt_id := jr_util.get_new_irid; insert into rm_sql_row_types ( id , types , table_mapped , source_ref ) values ( new_srt_id , cnRM_TYPES_SQL_ROW_TYPES , i_table_irid , -1 -- used to discriminate registered and configured sql row types when merging meta data ); return new_srt_id; end rm_sql_row_type_ins; ------------------------------------------------------------------------- -- Procedure : rm_interface_impl_ins ------------------------------------------------------------------------- procedure rm_interface_impl_ins ( i_interface number , i_class_implementation number , i_inheritance_level varchar2 ) is begin insert into rm_interface_implementations ( interface , class_implementation , inheritance_level ) values ( i_interface , i_class_implementation , i_inheritance_level ); end rm_interface_impl_ins; ------------------------------------------------------------------------- -- Procedure : rm_link_descriptor_prop_ins ------------------------------------------------------------------------- procedure rm_link_descriptor_prop_ins ( i_property number , i_link_type number , i_sequence number ) is begin insert into rm_link_descriptor_properties ( property , link_type , sequence ) values ( i_property , i_link_type , i_sequence ); end rm_link_descriptor_prop_ins; --------------------------------------------------------------------- -- Procedure : rm_element_type_ins -- -- CW 23-Mar-99 -- Fix bug 855799, register types as subtype of PAC or SAC -- -- CW 16-Feb-2000 -- Fix bug 1196233, populate versionable column -- The Designer and system model exceptions are corrected after -- registration, by post_reg.sql -- TODO : Allow this rule to be overridden (pragma or rm_reg_types) -- and add parameter to method so that value can be specified -- Rules for populating is_primary and versionable are : -- i_owned_by is_primary versionable -- TRUE N N -- null Y Y -- OPTIONAL OPTIONAL O -- NO OFK NO OFK N --------------------------------------------------------------------- procedure rm_element_type_ins ( i_element_type_irid number , i_table_irid number , i_type_name varchar2 , i_type_short_name varchar2 , i_type_plural_name varchar2 , i_nls_name varchar2 , i_nls_plural_name varchar2 , i_owned_by varchar2 , o_srt_id number , i_product varchar2 default 'JR' , i_is_primary varchar2 default 'Y' , i_abstract varchar2 default 'N' , i_interface varchar2 default 'N' , i_java_full_name varchar2 default null , i_supertype_id number default null , i_help_tag varchar2 default null , i_user_extension varchar2 default 'NNY' -- CvE 18-Apr-2000 Fix bug 1236289 , i_element_type_ivid number default 1 , i_schema_type varchar2 default 'USER' ) is supertype_id number; begin -- CW 20-May-1999, set default for logical type column in rm_sql_columns now we know its type update rm_sql_columns c set c.data_default = i_element_type_irid where c.table_irid = i_table_irid and c.column_name = (select t.logical_type_column from rm_sql_tables t where t.irid = i_table_irid ) ; -- CW 9-Dec-98, fix bug 776340, register all non-designer objects as subtypes of cielement -- so that dependencies can be modelled between any 2 types (configured or registered) -- Treat objects which can be primary or secondary as primary -- Note, user registered types should not fall into this category -- and this data will be populated by configuration for these sort of -- objects in the Designer schema -- -- CW 24-Mar-99, allow the following queries to fail to find a row so that we can -- register our own model before we get the meta data from configuration -- -- CW 30-Apr-1999 -- Fix bug 873879, primary objects should be subtypes of shareable element -- -- CW 27-Aug-1999 -- Fix bug 870325, configuration should be a subtype of PAC, instead subtype from access controlled element -- if i_supertype_id is not null then -- Use supertype provided by caller, if defined supertype_id := i_supertype_id; else begin if i_type_name = 'CONFIGURATION' then select id into supertype_id from rm_element_types where product = 'CI' and name = 'ACCESS_CONTROLLED_ELEMENT' ; elsif i_owned_by is null or i_owned_by = 'OPTIONAL' then select id into supertype_id from rm_element_types where product = 'CI' and name = 'SHAREABLE_ELEMENT' ; elsif i_owned_by = 'TRUE' or i_owned_by = 'NO OFK' then select id into supertype_id from rm_element_types where product = 'CI' and name = 'SECONDARY_ACCESS_ELEMENT' ; end if; exception when no_data_found then null; end; end if; -- CW 10-Dec-98, there is a unique key on (short_name, product) -- I used to take substr(name, 1, 20) because short_name was 20 chars in length -- However, for sdd_global_namespace and sdd_global_namespace_domains, they are -- not unique within 20 chars and the constraint was being violated. -- -- Increased column length to 30 chars, removed the substr insert into rm_element_types ( irid , types , name , short_name , plural_name , product , primary_row_type , supertypes , user_extension , jr_type , is_primary , versionable , abstract , java_full_name , interface_flag , icon ) values ( i_element_type_irid , cnRM_TYPES_ELEMENT_TYPES , i_type_name , i_type_short_name , i_type_plural_name , i_product , o_srt_id , supertype_id , i_user_extension , upper(i_schema_type) , decode( i_is_primary , 'TRUE', 'N' , null , 'Y' , i_is_primary ) -- is_primary , decode( i_owned_by , null , 'Y' , 'OPTIONAL', 'O' , 'N' ) -- versionable , i_abstract , i_java_full_name , i_interface , 'user_regd_type' -- 1286734 ); insert into rm$nls_element_types ( irid , etid , nls_language , nls_name , nls_plural_name ) values ( i_element_type_irid , i_element_type_irid , 'US' , i_nls_name , i_nls_plural_name ); insert into rm$element_type_extensions ( irid , etid , help_tag ) values ( i_element_type_irid , i_element_type_irid , i_help_tag ); end rm_element_type_ins; ------------------------------------------------------------- -- Procedure : rm_property_map_ins -- -- Note, if property already exists in the type it is ignored -- TODO, raise an excception ------------------------------------------------------------- procedure rm_property_map_ins ( i_element_type_irid number , i_property_irid number , i_srt_id number , i_column_id number ) is prop_exists varchar2(1); new_pm_id number; begin prop_exists := 'N'; -- assume property does not exist yet begin -- CW 29-Jun-2000 -- Make sure the same property is not included in the same element -- more than once SELECT 'Y' INTO prop_exists FROM rm_property_maps WHERE context = i_element_type_irid AND property = i_property_irid ; -- If we haven't jumped to the exception handler then the property must -- already exist in the type exception when no_data_found then -- Property not already in type, continue prop_exists := 'N'; end; if prop_exists = 'N' then new_pm_id := jr_util.get_new_irid; insert into rm_property_maps ( irid , types , context , property , row_type , in_column ) values ( new_pm_id , cnRM_TYPES_PROPERTY_MAPS , i_element_type_irid , i_property_irid , i_srt_id , i_column_id ); end if; end rm_property_map_ins; ----------------------------------------------------------- -- Procedure : rm_property_map_upd ----------------------------------------------------------- procedure rm_property_map_upd ( pm_irid number , column_irid number ) is begin update rm_property_maps pm set pm.in_column = column_irid where pm.irid = pm_irid ; end rm_property_map_upd; --------------------------------------------- -- Procedure : rm_data_type_ins --------------------------------------------- procedure rm_data_type_ins ( i_datatype_id number , i_domain_name varchar2 , i_data_type varchar2 , i_data_length number , i_data_precision number , i_data_scale number , i_supertypes number default null ) is begin insert into rm_data_types ( id , types , name , plural_name , short_name , data_type , data_length , data_precision , data_scale , product , supertypes ) values ( i_datatype_id , cnRM_DATA_TYPES , i_domain_name , i_domain_name , substrb(i_domain_name, 1, 20) , i_data_type , i_data_length , i_data_precision , i_data_scale , get_product , i_supertypes ); end rm_data_type_ins; --------------------------------------------- -- Procedure : rm_data_type_value_ins --------------------------------------------- procedure rm_data_type_value_ins ( data_type_id number , value_identifier varchar2 , value varchar2 , value_seq number ) is lang varchar2(3); begin select nls_language into lang from rm$repositories; insert into rm$nls_data_type_values ( irid , did , seq , dev_value , nls_value , nls_language ) values ( jr_util.get_new_irid , data_type_id , value_seq , value_identifier , value , lang ); end rm_data_type_value_ins; --------------------------------------------- -- Procedure : rm_property_range_ins --------------------------------------------- procedure rm_property_range_ins ( property_id number , lovalue number , hivalue number ) is begin insert into rm$property_ranges ( irid , ivid , pid , lo_value , hi_value ) values ( jr_util.get_new_irid , 1 , property_id , loValue , hiValue ); end rm_property_range_ins; -------------------------------------------------------------------- -- Function : create_data_type -------------------------------------------------------------------- function create_data_type ( i_data_type varchar2 , i_data_length number , i_data_precision number , i_data_scale number , i_domain_name varchar2 default null , i_super_dt_id number default null , i_java_datatype varchar2 default null ) return number is datatype_id number; datatype_name varchar2(40); begin begin if i_domain_name is not null then select id into datatype_id from rm_data_types where name = i_domain_name ; else -- Name is unique in rm_data_types so we cannot simply create a new row for each datatype -- of each property -- Check first if the property can reuse an existing datatype, else create one. -- Only reuse SYS_ data types. -- For columns in check constraints, the data type name is set to the constraint name -- , don't want other properties to use this datatype -- Step 1 : Prefix datatype names by 'SYS' and product so that if one product removes an -- allowable value (say) of a datatype, this will not affect other products -- The SYS prefix is used by the RON (at least) to identify simple datatypes, -- otherwise the RON will assume its a domain with possible LOV and hence show -- a combo box in the UI datatype_name := 'SYS_' || get_product || '_'; -- Step 2 : Append the datatype if i_java_datatype = 'boolean' then datatype_name := datatype_name || 'BOOLEAN'; else datatype_name := datatype_name || i_data_type; end if; -- Step 3 : Append precision (if supplied), else append length (if supplied) -- if DATE (which has length 7) just return DATE if i_java_datatype is null or i_java_datatype != 'boolean' then if i_data_precision is not null then datatype_name := datatype_name || '_' || i_data_precision; -- Step 3.1 : Append scale (if supplied) if i_data_scale is not null then datatype_name := datatype_name || '_' || i_data_scale; end if; elsif i_data_length is not null and i_data_length != 0 then datatype_name := datatype_name || '_' || i_data_length; end if; end if; if i_java_datatype = 'boolean' then -- Special case, check also for existence of two datatype values, 'Y' and 'N' select dt.id into datatype_id from rm_data_types dt where dt.product = get_product and dt.name = datatype_name and dt.data_type = i_data_type and nvl(dt.data_length, -1) = nvl(i_data_length, -1) and nvl(dt.data_precision, -1) = nvl(i_data_precision, -1) and nvl(dt.data_scale, -1) = nvl(i_data_scale, -1) and exists (select null from rm$nls_data_type_values v where v.did = dt.id and v.nls_value = 'Y') and exists (select null from rm$nls_data_type_values v where v.did = dt.id and v.nls_value = 'N') ; else select dt.id into datatype_id from rm_data_types dt where dt.product = get_product and dt.name = datatype_name and dt.data_type = i_data_type and nvl(dt.data_length, -1) = nvl(i_data_length, -1) and nvl(dt.data_precision, -1) = nvl(i_data_precision, -1) and nvl(dt.data_scale, -1) = nvl(i_data_scale, -1) ; end if; end if; exception when no_data_found then datatype_id := jr_util.get_new_irid; rm_data_type_ins ( datatype_id , nvl(i_domain_name, datatype_name) , i_data_type , i_data_length , i_data_precision , i_data_scale ); if i_java_datatype = 'boolean' then -- Create two datatype values, 'Y' and 'N' rm_data_type_value_ins (datatype_id, 'true' , 'Y', 1); rm_data_type_value_ins (datatype_id, 'false', 'N', 2); end if; end; return datatype_id; end create_data_type; ----------------------------------------------------------------------------- -- Function : is_id_or_audit_property -- -- If an audit property is being registered, return id of the audit property -- defined against ELEMENT -- Note, if column name is NOTM, use property NUMBER_OF_TIMES_MODIFIED ----------------------------------------------------------------------------- function is_id_or_audit_property ( pname in varchar2 , pid out number ) return boolean is begin if pname in ( 'IRID' , 'IVID' ) then select p.id into pid from rm_properties p , rm_element_types et where et.name = 'CIELEMENT' and p.defined_against = et.id and p.name = pname ; return true; elsif pname in ( 'PAC_REF' , 'PAC_REFERENCE' , 'PARENT_IVID' ) then select p.id into pid from rm_properties p , rm_element_types et where et.name = 'SECONDARY_ACCESS_ELEMENT' and p.defined_against = et.id and p.name = decode ( pname , 'PAC_REF', 'PAC_REFERENCE' , pname ) ; return true; elsif pname in ( 'DATE_CREATED' , 'CREATED_BY' , 'DATE_CHANGED' , 'CHANGED_BY' , 'NOTM' , 'NUMBER_OF_TIMES_MODIFIED' , 'TYPES' ) then select p.id into pid from rm_properties p , rm_element_types et where et.name = 'ELEMENT' and p.defined_against = et.id and p.name = decode ( pname , 'NOTM', 'NUMBER_OF_TIMES_MODIFIED' , pname ) ; return true; elsif pname in ('ELEMENT_TYPE_NAME') then select p.id into pid from rm_properties p , rm_element_types et where et.name = 'ACCESS_CONTROLLED_ELEMENT' and p.defined_against = et.id and p.name = pname ; return true; else return false; end if; exception when no_data_found then return false; end is_id_or_audit_property; --------------------------------------------- -- Procedure : rm$nls_property_ins --------------------------------------------- procedure rm$nls_property_ins ( i_property_irid varchar2 , i_property_name varchar2 , i_data_default varchar2 , i_nls_name varchar2 , i_nls_default varchar2 , i_nls_hint varchar2 ) is nls_lang rm$repositories.nls_language%type; -- bug 3158563 rjclark begin select nls_language into nls_lang -- bug 3158563 rjclark from rm$repositories; -- bug 3158563 rjclark insert into rm$nls_properties ( irid , nls_language , pid , nls_name , nls_default , nls_hint ) values ( i_property_irid , 'US' , i_property_irid , nvl(i_nls_name, initcap(translate(i_property_name, '_', ' '))) , nvl(i_nls_default, i_data_default) , nvl(i_nls_hint, initcap(translate(i_property_name, '_', ' '))) ); -- bug 3158563 rjclark, use current nls language -- updated after patch testing - afackere 08-Oct-2003 -- initial fix fails due to RM$NLS_PROPERTIES_PK -- IRID set to i_property_irid which conflicts with 'US' insert above -- i_property_irid is the property id and should not be used for IRID anyway -- rather than fix this throughout this package, just use proper generated IRID here if nls_lang != 'US' then insert into rm$nls_properties ( irid , nls_language , pid , nls_name , nls_default , nls_hint ) values ( jr_util.get_new_irid , nls_lang , i_property_irid , nvl(i_nls_name, initcap(translate(i_property_name, '_', ' '))) , nvl(i_nls_default, i_data_default) , nvl(i_nls_hint, initcap(translate(i_property_name, '_', ' '))) ); end if; end rm$nls_property_ins; --------------------------------------------- -- Procedure : rm$property_extension_ins --------------------------------------------- procedure rm$property_extension_ins ( i_property_irid varchar2 , i_display_seq number , i_data_default varchar2 , i_data_type varchar2 , i_data_length number , i_data_precision number , i_data_scale number , i_help_tag varchar2 ) is begin insert into rm$property_extensions ( irid , pid , display_sequence , dev_default , help_tag , property_group , data_type , length , precision , scale ) values ( i_property_irid , i_property_irid , i_display_seq , i_data_default , i_help_tag , null , i_data_type , i_data_length , i_data_precision , i_data_scale ); end rm$property_extension_ins; --------------------------------------------- -- Procedure : rm_property_ins --------------------------------------------- procedure rm_property_ins ( i_element_type_irid number , i_property_irid number , i_srt_id number , i_column_id number , i_prop_name varchar2 , i_data_type varchar2 , i_data_length number , i_data_precision number , i_data_scale number , i_nullable varchar2 , i_default_length number , i_data_default varchar2 , i_prop_nls_name varchar2 , i_prop_nls_default varchar2 , i_prop_nls_hint varchar2 , i_prop_case_mode varchar2 default 'M' , i_prop_displayed varchar2 default 'Y' , i_prop_display_seq number default 1 , i_prop_maintained varchar2 default 'U' , i_prop_update_mode varchar2 default 'U' , i_prop_help_tag varchar2 default null , i_descriptor_seq number default null , i_is_stored varchar2 default 'Y' , i_user_extension varchar2 default 'NNY' , i_domain_id number default null , i_domain_name varchar2 default null , i_java_datatype varchar2 default null , i_property_ivid number default 1 ) is new_datatype_id number; new_property_id number; begin -- Fix bug 841563, problems with audit properties for registered types -- Only create a property map if a sql row type and column are provided -- if i_srt_id is not null and i_column_id is not null then if is_id_or_audit_property(i_prop_name, new_property_id) then -- 'reuse' audit properties defined against rm.element rm_property_map_ins ( i_element_type_irid , new_property_id , i_srt_id , i_column_id ); return; end if; -- end if; -- Create or reuse an existing datatype if i_domain_id is not null then -- Use domain id if supplied new_datatype_id := i_domain_id; else new_datatype_id := create_data_type( i_data_type , i_data_length , i_data_precision , i_data_scale , i_domain_name ); end if; --put_line('Property : ' || i_prop_name); if 1 = 0 and i_prop_name = 'POSTCODE' then put_line('irid : ' || i_property_irid); put_line('types : ' || cnRM_TYPES_PROPERTIES); put_line('defined_against : ' || i_element_type_irid); put_line('of_domain : ' || new_datatype_id); put_line('name : ' || i_prop_name); put_line('short_name : ' || SUBSTRB(i_prop_name, 1, 20)); put_line('plural_name : ' || i_prop_name); put_line('is_stored : ' || i_is_stored); put_line('mandatory : ' || i_nullable); put_line('updateable : ' || 'Y'); put_line('user_extension : ' || i_user_extension); put_line('descriptor_sequence : ' || i_descriptor_seq); put_line('hack_default : ' || i_data_default); put_line('case_mode : ' || nvl(i_prop_case_mode, 'M')); put_line('displayed : ' || nvl(i_prop_displayed, 'Y')); put_line('display_sequence : ' || nvl(i_prop_display_seq, 1)); put_line('maintained : ' || nvl(i_prop_maintained, 'U')); put_line('product : ' || get_product); put_line('update_mode : ' || nvl(i_prop_update_mode, 'U')); put_line('java_datatype : ' || i_java_datatype); end if; insert into rm_properties ( irid , types , defined_against , of_domain , name , short_name , plural_name , is_stored , mandatory , user_extension , descriptor_sequence , hack_default , case_mode , displayed , maintained , product , update_mode , java_datatype ) values ( i_property_irid , cnRM_TYPES_PROPERTIES , i_element_type_irid , new_datatype_id , i_prop_name , SUBSTRB(i_prop_name, 1, 20) , i_prop_name , i_is_stored , DECODE( i_nullable , 'N', 'Y' , 'Y', 'N' ) , i_user_extension , i_descriptor_seq , i_data_default , nvl(i_prop_case_mode, 'M') -- mixed case mode , nvl(i_prop_displayed, 'Y') -- displayed , nvl(i_prop_maintained, 'U') -- maintained (user) , get_product , nvl(i_prop_update_mode, 'U') -- update_mode (updateable) , i_java_datatype ); rm$nls_property_ins ( i_property_irid , i_prop_name , i_data_default , i_prop_nls_name , i_prop_nls_default , i_prop_nls_hint ); rm$property_extension_ins ( i_property_irid , i_prop_display_seq , i_data_default , i_data_type , i_data_length , i_data_precision , i_data_scale , i_prop_help_tag ); -- Not inserting into rm_display_details as this is not used by rs -- if i_srt_id is not null and i_column_id is not null then rm_property_map_ins ( i_element_type_irid , i_property_irid , i_srt_id , i_column_id ); -- end if; end rm_property_ins; ------------------------------------------------------------------------- -- Procedure : rm_link_type_ins ------------------------------------------------------------------------- procedure rm_link_type_ins ( i_link_type_irid number , i_name varchar2 default null ) is begin insert into rm_link_types ( irid , name , types , product ) values ( i_link_type_irid , i_name , cnRM_TYPES_LINK_TYPES , get_product ); end rm_link_type_ins; ------------------------------------------------------------------------- -- Procedure : rm_link_property_ins ------------------------------------------------------------------------- procedure rm_link_property_ins ( i_element_type_irid number , i_link_prop_irid number , i_link_prop_name varchar2 , i_link_type_irid number , i_min_cardinality number , i_max_cardinality number , i_mandatory varchar2 , i_navigable varchar2 , i_transferable varchar2 , i_ordered_set varchar2 , i_aggregation varchar2 , i_friendly_name varchar2 , i_descriptor_seq number default null , i_sequence_in_link number default 1 , i_case_mode varchar2 default 'M' -- Mixed , i_displayed varchar2 default 'Y' , i_is_stored varchar2 default 'Y' , i_maintained varchar2 default 'U' -- User , i_update_mode varchar2 default 'U' , i_user_extension varchar2 default 'NNY' , i_arc_no number default null , i_is_owning_assoc varchar2 default 'N' , i_link_prop_ivid number default 1 ) is begin if 1 = 0 then put_line('rm_link_property_ins'); put_line('irid : ' || i_link_prop_irid); put_line('defined_against : ' || i_element_type_irid); put_line('types : ' || cnRM_TYPES_LINK_PROPERTIES); put_line('name : ' || i_link_prop_name); put_line('link_type : ' || i_link_type_irid); put_line('min_cardinality : ' || i_min_cardinality); put_line('max_cardinality : ' || i_max_cardinality); put_line('friendly_name : ' || i_friendly_name); put_line('descriptor_sequence : ' || i_descriptor_seq); put_line('of_domain : ' || ReferenceDomainId); put_line('sequence_in_link : ' || i_sequence_in_link); put_line('case_mode : ' || i_case_mode); put_line('displayed : ' || i_displayed); put_line('is_stored : ' || i_is_stored); put_line('maintained : ' || i_maintained); put_line('mandatory : ' || i_mandatory); put_line('product : ' || get_product); put_line('update_mode : ' || i_update_mode); put_line('user_extension : ' || i_user_extension); put_line('is_owning_association : ' || i_is_owning_assoc); put_line('navigable : ' || i_navigable); put_line('transferable : ' || i_transferable); put_line('ordered_set : ' || i_ordered_set); put_line('aggregation : ' || i_aggregation); end if; insert into rm_link_properties ( irid , defined_against , types , name , link_type , min_cardinality , max_cardinality , friendly_name , descriptor_sequence , of_domain , sequence_in_link , case_mode , displayed , is_stored , maintained , mandatory , product , update_mode , user_extension , is_owning_association , navigable , transferable , ordered_set , aggregation ) values ( i_link_prop_irid , i_element_type_irid , cnRM_TYPES_LINK_PROPERTIES , i_link_prop_name , i_link_type_irid , i_min_cardinality , i_max_cardinality , i_friendly_name , i_descriptor_seq , ReferenceDomainId , i_sequence_in_link , i_case_mode , i_displayed , i_is_stored , i_maintained , i_mandatory , get_product , i_update_mode , i_user_extension , i_is_owning_assoc , i_navigable , i_transferable , i_ordered_set , i_aggregation ); end rm_link_property_ins; ---------------------------------------------------------------------------- -- Procedure : rm_link_property_ins_pk_end -- -- 11-Apr-00 CW Fix bug 1258386, set is_stored to 'N' for '1' end of assocs ---------------------------------------------------------------------------- procedure rm_link_property_ins_pk_end ( i_element_type_irid number , i_pk_name varchar2 , i_is_owning_assoc varchar2 , i_link_type_id number , i_fk_link_property_id number , i_pk_property_name varchar2 , i_sequence_in_link number ) is new_link_property_irid number; begin new_link_property_irid := jr_util.get_new_irid; put_line('link property (1 end) : new id : ' || new_link_property_irid); put_line('link property (1 end) : new name : ' || i_pk_property_name); INSERT INTO rm_link_properties ( id , types , link_type , max_cardinality , min_cardinality , friendly_name , defined_against , descriptor_sequence , of_domain , sequence_in_link , date_created , case_mode , created_by , displayed , is_stored , maintained , mandatory , name , product , update_mode , user_extension , is_owning_association ) SELECT new_link_property_irid , cnRM_TYPES_LINK_PROPERTIES , i_link_type_id , -1 -- max_cardinality , 0 -- min_cardinality , i_pk_name -- friendly_name , i_element_type_irid -- defined_against , descriptor_sequence , of_domain , i_sequence_in_link , sysdate , case_mode , user , displayed , 'N' -- is_stored, '1' end or 'pk' end is not stored , maintained , mandatory , i_pk_property_name -- same name as property, eg. ID , product , update_mode , user_extension , i_is_owning_assoc FROM rm_link_properties lp WHERE lp.id = i_fk_link_property_id ; -- CW 24-Dec-99 -- Fix bug 1068490, no 'REFSET' properties generated for registered types -- *if* primary key column is 'irid' -- This is because, if the pk column is 'irid' no property is created, instead -- a property map is created to inherit 'irid' from cielement if i_pk_property_name = 'IRID' then rm_property_ins ( i_element_type_irid , new_link_property_irid , null -- srt_id , null -- column_id , i_pk_property_name -- name , 'NUMBER' -- datatype , 22 -- length , null -- precision , null -- scale , 'Y' -- nullable , null -- default_length , null -- data_default , i_pk_property_name -- nls name , null -- nls default , i_pk_property_name -- nls hint , i_is_stored => 'N' , i_domain_name => 'REFERENCE' ); else -- Only do this if not creating a 'REFSET' property as the creation of -- the property will also create nls and extension properties rm$nls_property_ins ( new_link_property_irid , null -- name , null -- data_default , null -- nls_name , null -- nls_default , null -- nls_hint ); rm$property_extension_ins ( new_link_property_irid , 1 -- display_sequence , null -- data_default , null -- data_type , null -- data_length , null -- data_precision , null -- data_scale , null -- help_tag ); end if; exception when no_data_found then put_line('Failed to query link property for fk property : ' || i_fk_link_property_id); raise; end rm_link_property_ins_pk_end; ------------------------------------------------------------------------- -- Procedure : rm_link_property_ins_fk_end ------------------------------------------------------------------------- procedure rm_link_property_ins_fk_end ( i_property_irid number , i_fk_name varchar2 , i_pk_name varchar2 , i_is_owning_assoc varchar2 , i_pk_element_type_id number , i_pk_property_name varchar2 , i_link_type_id in out number , i_sequence_in_link number ) is new_link_type_id number; begin -- put_line('link property (M end) : PK element type id is : ' || i_pk_element_type_id); -- Put the existing property in the reference domain update rm_properties p set p.of_domain = ReferenceDomainId where p.id = i_property_irid ; if i_link_type_id is null then -- Create a link type to 'bind' the two ends of the link property new_link_type_id := jr_util.get_new_irid; rm_link_type_ins (new_link_type_id); -- Return the link type id to the caller in case there are more link properties to add to the same link i_link_type_id := new_link_type_id; else -- Use link type id if supplied to ensure multi property links have the same link type new_link_type_id := i_link_type_id; end if; -- put_line('link type id : ' || new_link_type_id); -- Create a link property for the 'many' end -- Note, a property and property map will already have been created -- for this end put_line('link property (M end) : new id : ' || i_property_irid); INSERT INTO rm_link_properties ( id , types , link_type , max_cardinality , min_cardinality , friendly_name , defined_against , descriptor_sequence , of_domain , sequence_in_link , date_created , case_mode , created_by , displayed , is_stored , maintained , mandatory , name , product , update_mode , user_extension , is_owning_association ) SELECT i_property_irid , cnRM_TYPES_LINK_PROPERTIES , new_link_type_id , 1 -- max_cardinality , 1 -- min_cardinality , initcap(translate(i_fk_name, '_', ' ')) -- friendly_name , defined_against , descriptor_sequence , of_domain , i_sequence_in_link , sysdate , case_mode , user , displayed , is_stored , maintained , mandatory , name , product , update_mode , user_extension , i_is_owning_assoc FROM rm_properties p WHERE p.id = i_property_irid ; -- Create the '1' or 'PK' or 'REFSET' end jr_rm_ins.rm_link_property_ins_pk_end ( i_pk_element_type_id , i_pk_name , i_is_owning_assoc , new_link_type_id , i_property_irid , i_pk_property_name , i_sequence_in_link ); exception when no_data_found then put_line('Failed to query Fk property for FK : ' || i_fk_name); raise; end rm_link_property_ins_fk_end; -------------------------------------------------------------------------- -- Procedure : Insert into rm_assertions -- -- This needs to be changed to use registration functionality. -------------------------------------------------------------------------- procedure rm_assertion_ins(id NUMBER, name VARCHAR2, element_id NUMBER, message_usage_id NUMBER, expression_id NUMBER, classification VARCHAR2, deferred VARCHAR2, enabled VARCHAR2, facility VARCHAR2, generated VARCHAR2, product VARCHAR2, cnRM_ASSERTIONS NUMBER) is begin INSERT INTO rm_assertions ( id , types , name , defined_against , message_usage , expression , classification , deferred , enabled , facility , generated , product , date_created , date_changed , created_by , changed_by ) VALUES ( id , cnRM_ASSERTIONS , name , element_id , message_usage_id , expression_id , classification , deferred , enabled , facility , generated , product , SYSDATE , SYSDATE , USER , USER ); exception when others then put_line('EXCEPTION RAISED: ' || SQLERRM(SQLCODE)); raise; end rm_assertion_ins; -------------------------------------------------------------------------- -- Procedure : Insert into rm_expressions -- -- This needs to be changed to use registration functionality. -------------------------------------------------------------------------- procedure rm_expression_ins(id NUMBER, text VARCHAR2, syntax VARCHAR2, cnRM_EXPRESSIONS NUMBER) is begin INSERT INTO i$rm_expressions ( id , types , syntax , text , date_created , date_changed , created_by , changed_by ) VALUES ( id , cnRM_EXPRESSIONS , syntax , text , SYSDATE , SYSDATE , USER , USER ); exception when others then put_line('EXCEPTION RAISED: ' || SQLERRM(SQLCODE)); raise; end rm_expression_ins; -------------------------------------------------------------------------- -- Procedure : Insert into rm_expression_property_usages -- -- This needs to be changed to use registration functionality. -------------------------------------------------------------------------- procedure rm_expression_prop_usage_ins(id NUMBER, element_id NUMBER, expression_id NUMBER, property_id NUMBER, sequence NUMBER, cnRM_EXPRESSION_PROP_USAGES NUMBER) is begin INSERT INTO rm_expression_property_usages ( id , types , context , expression , property , exp_seq , date_created , date_changed , created_by , changed_by ) VALUES ( id , cnRM_EXPRESSION_PROP_USAGES , element_id , expression_id , property_id , sequence , SYSDATE , SYSDATE , USER , USER ); exception when others then put_line('EXCEPTION RAISED: ' || SQLERRM(SQLCODE)); raise; end rm_expression_prop_usage_ins; begin -- Cache the id of the reference domain SELECT d.irid INTO ReferenceDomainId FROM rm_data_types d WHERE d.name = 'REFERENCE' ; end jr_rm_ins; /