| Oracle FAQ | Your Portal to the Oracle Knowledge Grid | |
Home -> Community -> Usenet -> c.d.o.server -> Re: Generating SQL to recreate constraints.
Here's a script that genrate a script recreating all the
check constraints of the calling user.
Set echo OFF
Set feedback OFF
Set heading OFF
Set linesize 2000
Set long 32760
Set newpage 0
Set pagesize 0
Set recsep OFF
Set space 0
Set trimout ON
Set trimspool ON
BTitle OFF
TTitle OFF
Create table mcsql
(id number, subid number,
codesql varchar2(2000),
primary key (id, subid))
/
spool script.sql
Declare
Cursor cc is
select table_name, constraint_name, search_condition
from user_constraints
where owner = USER
and constraint_type = 'C'
order by table_name, constraint_name;
contrainte varchar2(32760);
Open cc;
Loop
Fetch cc into nomTable, nomCons, contrainte;
Exit when cc%NOTFOUND;
codeSql := '
Alter table '||nomTable||' add ';
If ( substr(nomCons, 1, 5) != 'SYS_C' ) then
codeSql := codeSql||'constraint '||nomCons;
End if;
codeSql := codeSql||'
check ('||contrainte||');';
subid := 0;
i := 1;
lg := 0;
espace := False;
While ( i <= length (codeSql) ) loop
If ( (i+2000) <= length (codeSql) ) then
lg := 2000;
While ( substr(codeSql, i+lg, 1) != '
' and lg > 0 ) loop
lg := lg - 1;
End loop;
If ( lg = 0 ) then
lg := 2000;
While ( substr(codeSql, i+lg, 1) != ' ' and lg > 0 ) loop
lg := lg - 1;
End loop;
If ( lg = 0 ) then
lg := 2000;
Else
lg := lg - 1;
espace := True;
End if;
Else
lg := lg - 1;
espace := True;
End if;
Else
lg := length (codeSql) - i + 1;
End if;
If ( lg > 0 ) then
valeur := substr(codeSql, i, lg);
Insert into mcsql values (id, subid, valeur);
subid := subid + 1;
i := i + lg;
End if;
If ( espace ) then
i := i + 1;
End if;
End loop;
id := id + 1;
spool off
Drop table mcsql
/
Set embedded OFF
Set feedback ON
Set heading ON
Set linesize 80
Set newpage 1
Set pagesize 500
Set recsep WRAPPED
Set space 1
Set termout ON
Then you have to execute the generated script: @script
--
Regards
Michel
NetComrade <andreyNSPAM_at_bookexchange.net> a écrit dans le message :
37f8f33a.524585683_at_news.earthlink.net...
> Hi,
>
> Anybody has a nice script to regenerate all constraints on a table?
> Dealing with CHECK constraint is a bitch, it is stored in LONG.
> (SEACH_CONDITION)
> Also dealing with catentated indexes/constraints is tough, b/c of
> position.
>
> Thanx.
> ---------------
> Andrey Dmitriev eFax: (978) 383-5892 Daytime: (917) 373-5417
> AOL: NetComrade ICQ: 11340726 remove NSPAM to email
>
Received on Tue Oct 05 1999 - 03:00:47 CDT
![]() |
![]() |