| 
		
			| table creation [message #6516] | Wed, 23 April 2003 01:25  |  
			| 
				
				
					| vp Messages: 25
 Registered: January 2002
 | Junior Member |  |  |  
	| Hello Friends, 
 I am creating table scripts using forward engineering of Rational Rose - Data Modeller. I found that it is possible to specify one storage for the table. But unfortunately indexes(created by primary key) is created on the same tablespace and I would like to have them on a seperate tablespace. I am thinking of writing a utility in the end of table creation, to identify all such indexes and drop and recreate on the seperate tablespace. Is there an elegant solution to this...something like modify constaint.
 
 thanks
 vp
 |  
	|  |  | 
	| 
		
			| Re: table creation [message #6524 is a reply to message #6516] | Wed, 23 April 2003 04:30   |  
			| 
				
				
					| Keith Messages: 88
 Registered: March 2000
 | Member |  |  |  
	| Use the: 
 alter index <Index_name> rebuild tablespace
 ;
 
 You should be able to write a procedure along the lines of:
 
 DECLARE
 CURSOR get_indexes IS
 SELECT	index_name
 FROM	user_indexes
 WHERE 	tablespace_name = '<OLD TABLESPACE>';
 l_sqlerrm VARCHAR2(255);
 l_sqlcode VARCHAR2(50);
 BEGIN
 
 FOR rec IN get_indexes LOOP
 
 EXECUTE IMMEDIATE ('ALTER INDEX '||rec.index_name||' REBUILD TABLESPACE <NEW TABLESPACE>');
 
 END LOOP;
 
 EXCEPTION WHEN OTHERS THEN
 -- Whatever error processing you want
 l_sqlerrm := SUBSTR(SQLERRM,1,255);
 l_sqlcode := SUBSTR(SQLCODE,1,50);
 dbms_output.put_line('Error occurred: '||l_sqlcode||' Message: '||l_sqlerrm);
 END;
 /
 
 For example:
 
 1* SELECT INDEX_NAME, TABLESPACE_NAME FROM USER_INDEXES
 krjf@ora92> /
 
 INDEX_NAME                     TABLESPACE_NAME
 ------------------------------ ------------------------------
 DEPT_PK                        USERS
 EMP_ENAME_IDX                  USERS
 EMP_MGR_DEPTNO_IDX             USERS
 
 krjf@ora92>
 krjf@ora92> DECLARE
 2   CURSOR get_indexes IS
 3    SELECT index_name
 4    FROM user_indexes
 5    WHERE  tablespace_name = 'USERS';
 6   l_sqlerrm VARCHAR2(255);
 7   l_sqlcode VARCHAR2(50);
 8  BEGIN
 9
 10   FOR rec IN get_indexes LOOP
 11
 12    EXECUTE IMMEDIATE ('ALTER INDEX '||rec.index_name||' REBUILD TABLESPACE XDB');
 13
 14   END LOOP;
 15
 16  EXCEPTION WHEN OTHERS THEN
 17   -- Whatever error processing you want
 18   l_sqlerrm := SUBSTR(SQLERRM,1,255);
 19   l_sqlcode := SUBSTR(SQLCODE,1,50);
 20   dbms_output.put_line('Error occurred: '||l_sqlcode||' Message: '||l_sqlerrm);
 21  END;
 22  /
 
 PL/SQL procedure successfully completed.
 
 krjf@ora92>
 krjf@ora92> SELECT INDEX_NAME, TABLESPACE_NAME FROM USER_INDEXES
 2  ;
 
 INDEX_NAME                     TABLESPACE_NAME
 ------------------------------ ------------------------------
 DEPT_PK                        XDB
 EMP_ENAME_IDX                  XDB
 EMP_MGR_DEPTNO_IDX             XDB
 
 krjf@ora92>
 
 HTH
 
 keith
 |  
	|  |  | 
	| 
		
			| Re: table creation [message #6526 is a reply to message #6524] | Wed, 23 April 2003 06:47   |  
			| 
				
				
					| Keith Messages: 88
 Registered: March 2000
 | Member |  |  |  
	| Some of the brackets have been removed when I posted this (since it thinks they're HTML), but you should be able to work it out. 
 Let me know if not, and I'll repost.
 
 keith
 |  
	|  |  | 
	|  | 
	|  |