Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
Home -> Community -> Usenet -> c.d.o.misc -> BroadVision 4.0 - How I use .src file to specify indexes?
Dear comp.infosystems.www.servers.unix:
I just got done with an experiment to determine how I may use sch_gen and .src files to specify CREATE INDEX commands in resulting .sql scripts.
Summary:
I found that I could force a single index to get created on a single column.
I found that I could not add another single index to another single column.
I found that sch_gen is quite content to create a unique concatenated index on multiple columns.
Also I found that sch_gen cannot specify a proper CREATE INDEX command; it always places a comma after the last column name in the CREATE INDEX command; this generates an error when sent to the sql interpreter.
Details:
Here is a simple .src file:
oooooooooo oooooooooo oooooooooo oooooooooo
REPLACEMENT: BV_MM_USER_RESPONSE_REPL
TABLE: BV_MM_USER_RESPONSE
ATTRIBUTE: QUESTION_ID
TYPE: STRING
COLUMN: number
FRIENDLY_NAME: Question ID
SEMANTICS: Question ID
oooooooooo oooooooooo oooooooooo oooooooooo
Here is the shell command to make the .sql script:
natalino-tcsh-92% make -f schema.mk mm_user_response_db_replace.sql /bin/touch mm_user_response_spec_replace.tmp mm_user_response_spec_replace.sql /bin/rm -f mm_user_response_spec_replace.tmp mm_user_response_spec_replace.sql/usr/ccs/lib/cpp -B mm_user_response_spec_replace.src mm_user_response_spec_replace.tmp /opt/bv1to1/bin/sch_gen -schema mm_user_response_spec_replace.tmp -script mm_user_response_db_replace.sql -cms -class_only BV_MM_USER_RESPONSE to be replaced. id 13001 natalino-tcsh-93%
Here is the .sql script (notice no index created on QUESTION_ID):
oooooooooo oooooooooo oooooooooo oooooooooo oooooooooo
natalino-tcsh-93% cat mm_user_response_db_replace.sql
drop table OLD_BV_MM_USER_RESPONSE
;
RENAME BV_MM_USER_RESPONSE TO OLD_BV_MM_USER_RESPONSE
;
delete from BV_ATTRIBUTES where SCHEMA_NAME = 'BV_UPROF' and TABLE_NAME = 'BV_MM_USER_RESPONSE' and SYSTEM_ID = 'PM'
;
delete from BV_ATTRIBUTES_EXT where SCHEMA_NAME = 'BV_UPROF' and TABLE_NAME = 'BV_MM_USER_RESPONSE' and SYSTEM_ID = 'PM'
;
delete from BV_ATTR_GROUP where SCHEMA_NAME = 'BV_UPROF' and TABLE_NAME = 'BV_MM_USER_RESPONSE'
;
delete from BV_ATTR_GROUP_INFO where SCHEMA_NAME = 'BV_UPROF' and GROUP_NAME = 'BV_MM_USER_RESPONSE'
;
delete from BV_EXT_MAP where SCHEMA_NAME = 'BV_UPROF' and EXT_TABLE = 'BV_MM_USER_RESPONSE'
;
insert into BV_ATTRIBUTES values('BV_UPROF', 13001, 'BV_MM_USER_RESPONSE', 'QUESTION_ID', 'STRING', 'UP', 'Question ID', 'Question ID', 0, -1, 0, 0, 0, 0)
;
drop table BV_MM_USER_RESPONSE
;
create table BV_MM_USER_RESPONSE (
USER_ID int not null, QUESTION_ID number null
Now I run an experiment with the ATTR_KIND key word to see if I may get an index placed on QUESTION_ID:
oooooooooo oooooooooo oooooooooo oooooooooo oooooooooo
REPLACEMENT: BV_MM_USER_RESPONSE_REPL
TABLE: BV_MM_USER_RESPONSE
ATTRIBUTE: QUESTION_ID
TYPE: STRING
COLUMN: number
FRIENDLY_NAME: Question ID
SEMANTICS: Question ID
ATTR_KIND: KEY
oooooooooo oooooooooo oooooooooo oooooooooo oooooooooo
Again I make the .sql script:
natalino-tcsh-97% make -f schema.mk mm_user_response_db_replace.sql /bin/touch mm_user_response_spec_replace.tmp mm_user_response_spec_replace.sql /bin/rm -f mm_user_response_spec_replace.tmp mm_user_response_spec_replace.sql/usr/ccs/lib/cpp -B mm_user_response_spec_replace.src mm_user_response_spec_replace.tmp /opt/bv1to1/bin/sch_gen -schema mm_user_response_spec_replace.tmp -script mm_user_response_db_replace.sql -cms -class_only BV_MM_USER_RESPONSE to be replaced. id 13001
Now I inspect the .sql script (notice the index created on QUESTION_ID):
natalino-tcsh-98% cat mm_user_response_db_replace.sql
drop table OLD_BV_MM_USER_RESPONSE
;
RENAME BV_MM_USER_RESPONSE TO OLD_BV_MM_USER_RESPONSE
;
delete from BV_ATTRIBUTES where SCHEMA_NAME = 'BV_UPROF' and TABLE_NAME = 'BV_MM_USER_RESPONSE' and SYSTEM_ID = 'PM'
;
delete from BV_ATTRIBUTES_EXT where SCHEMA_NAME = 'BV_UPROF' and TABLE_NAME = 'BV_MM_USER_RESPONSE' and SYSTEM_ID = 'PM'
;
delete from BV_ATTR_GROUP where SCHEMA_NAME = 'BV_UPROF' and TABLE_NAME = 'BV_MM_USER_RESPONSE'
;
delete from BV_ATTR_GROUP_INFO where SCHEMA_NAME = 'BV_UPROF' and GROUP_NAME = 'BV_MM_USER_RESPONSE'
;
delete from BV_EXT_MAP where SCHEMA_NAME = 'BV_UPROF' and EXT_TABLE = 'BV_MM_USER_RESPONSE'
;
insert into BV_ATTRIBUTES values('BV_UPROF', 13001, 'BV_MM_USER_RESPONSE', 'QUESTION_ID', 'STRING', 'UP', 'Question ID', 'Question ID', 128, -1, 0, 0, 0, 0)
;
drop table BV_MM_USER_RESPONSE
;
create table BV_MM_USER_RESPONSE (
USER_ID int not null, QUESTION_ID number not null
Notice in the script above the 2nd 'create unique index' command is faulty (at least it is easy for the DBA to fix via vi).
Next, I add another attribute and attempt to place a unique index on it
REPLACEMENT: BV_MM_USER_RESPONSE_REPL
TABLE: BV_MM_USER_RESPONSE
ATTRIBUTE: QUESTION_ID
TYPE: STRING
COLUMN: number
FRIENDLY_NAME: Question ID
SEMANTICS: Question ID
ATTR_KIND: KEY
ATTRIBUTE: ANSWER_ID
TYPE: STRING
COLUMN: number
FRIENDLY_NAME: Answer ID
SEMANTICS: Answer ID
ATTR_KIND: KEY
natalino-tcsh-116% !mak
make -f schema.mk mm_user_response_db_replace.sql
/bin/touch mm_user_response_spec_replace.tmp mm_user_response_spec_replace.sql /bin/rm -f mm_user_response_spec_replace.tmp mm_user_response_spec_replace.sql /usr/ccs/lib/cpp -B mm_user_response_spec_replace.src mm_user_response_spec_replace.tmp /opt/bv1to1/bin/sch_gen -schema mm_user_response_spec_replace.tmp -script mm_user_response_db_replace.sql -cms -class_onlyBV_MM_USER_RESPONSE to be replaced. id 13001
natalino-tcsh-117% natalino-tcsh-117% natalino-tcsh-117%
natalino-tcsh-117%
natalino-tcsh-117% cat mm_user_response_db_replace.sql
drop table OLD_BV_MM_USER_RESPONSE
;
RENAME BV_MM_USER_RESPONSE TO OLD_BV_MM_USER_RESPONSE
;
delete from BV_ATTRIBUTES where SCHEMA_NAME = 'BV_UPROF' and TABLE_NAME = 'BV_MM_USER_RESPONSE' and SYSTEM_ID = 'PM'
;
delete from BV_ATTRIBUTES_EXT where SCHEMA_NAME = 'BV_UPROF' and TABLE_NAME = 'BV_MM_USER_RESPONSE' and SYSTEM_ID = 'PM'
;
delete from BV_ATTR_GROUP where SCHEMA_NAME = 'BV_UPROF' and TABLE_NAME = 'BV_MM_USER_RESPONSE'
;
delete from BV_ATTR_GROUP_INFO where SCHEMA_NAME = 'BV_UPROF' and GROUP_NAME = 'BV_MM_USER_RESPONSE'
;
delete from BV_EXT_MAP where SCHEMA_NAME = 'BV_UPROF' and EXT_TABLE = 'BV_MM_USER_RESPONSE'
;
insert into BV_ATTRIBUTES values('BV_UPROF', 13001, 'BV_MM_USER_RESPONSE', 'QUESTION_ID', 'STRING', 'UP', 'Question ID', 'Question ID', 128, -1, 0, 0, 0, 0)
;
insert into BV_ATTRIBUTES values('BV_UPROF', 13002, 'BV_MM_USER_RESPONSE', 'ANSWER_ID', 'STRING', 'UP', 'Answer ID', 'Answer ID', 128, -1, 0, 0, 0, 0)
;
drop table BV_MM_USER_RESPONSE
;
create table BV_MM_USER_RESPONSE (
USER_ID int not null, QUESTION_ID number not null, ANSWER_ID number not null
Notice that sch_gen wants to create a concatenated index rather than two individual indexes.
Question 1: Can I put something in the .src file to force sch_gen to generate two individual 'CREATE UNIQUE INDEX' commands?
Question 2: Can I put something in the .src file to force sch_gen to remove the comma after the last column name in the 'CREATE UNIQUE INDEX' command?
-Dan