Précédent   Forum du club des développeurs et IT Pro > Bases de données > Oracle
Oracle Forum Oracle : le serveur, les outils, ... Voir F.A.Q Oracle Tutoriels Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 26/12/2012, 14h41   #1
toulouseadr
Invité de passage
 
Inscription : mars 2007
Messages : 22
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 22
Points : 0
Points : 0
Par défaut Migration script SQLServer vers Oracle

Bonjour à tous, j'ai le script sql suivant pour SQLServer, quelqu'un pourrait-il m'aider pour avoir l'équivalent sous Oracle (11g/10g) ?
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
DECLARE @state char(100);
SET @state = (SELECT DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'Interaction' AND COLUMN_NAME = 'IntPlace');
IF 'char' = @state
	BEGIN
		PRINT 'IntPlace is a char DATA_TYPE'
		IF 350 > (SELECT CHARACTER_MAXIMUM_LENGTH FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'Interaction' AND COLUMN_NAME = 'IntPlace')
			BEGIN
				PRINT 'IntPlace is smaller than 350';
				ALTER TABLE Interaction ALTER COLUMN IntPlace char(350);
			END
	END
 
IF 'varchar' = @state
	BEGIN
		PRINT 'IntPlace is a varchar DATA_TYPE'
		IF 350 > (SELECT CHARACTER_MAXIMUM_LENGTH FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'Interaction' AND COLUMN_NAME = 'IntPlace')
			BEGIN
				PRINT 'IntPlace is smaller than 350';
				ALTER TABLE Interaction ALTER COLUMN IntPlace varchar(350);
			END
	END
 
IF 'nvarchar' = @state
	BEGIN
		PRINT 'IntPlace is a nvarchar DATA_TYPE'
		IF 350 > (SELECT CHARACTER_MAXIMUM_LENGTH FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'Interaction' AND COLUMN_NAME = 'IntPlace')
			BEGIN
				PRINT 'IntPlace is smaller than 350';
				ALTER TABLE Interaction ALTER COLUMN IntPlace nvarchar(350);
			END
	END
 
IF 'nchar' = @state
	BEGIN
		PRINT 'IntPlace is a nchar DATA_TYPE'
		IF 350 > (SELECT CHARACTER_MAXIMUM_LENGTH FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'Interaction' AND COLUMN_NAME = 'IntPlace')
			BEGIN
				PRINT 'IntPlace is smaller than 350';
				ALTER TABLE Interaction ALTER COLUMN IntPlace nchar(350);
			END
	END
Merci.
toulouseadr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2013, 15h47   #2
funoracle
Membre habitué
 
Homme
Administrateur de base de données
Inscription : décembre 2011
Messages : 46
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : décembre 2011
Messages : 46
Points : 110
Points : 110
Bonjour,

cela devrait ressembler à quelque chose comme ça, attention je ne l'ai pas testé donc il faudra l'adapter, de plus je n'ai pas mis tous les IF car ils se ressemblent tous :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
 
SET serveroutput ON
SET echo off
SET verify off
SET feedback off
 
spool check_datatype.txt
 
DECLARE
 
state                VARCHAR2(150);
r_data_type          VARCHAR2(106);
r_character_length   NUMBER;  
 
BEGIN
 
state := 'SELECT DATA_TYPE FROM ALL_TAB_COLUMNS WHERE TABLE_NAME = ''INTERACTION'' AND COLUMN_NAME = ''INTPLACE'' ' ;
EXECUTE IMMEDIATE state INTO r_data_type ;
 
IF r_data_type = 'CHAR' THEN
	dbms_output.put_line('IntPlace is a '|| r_data_type ||' DATA_TYPE') ;
	state := 'SELECT DATA_LENGTH FROM ALL_TAB_COLUMNS WHERE TABLE_NAME = ''INTERACTION'' AND COLUMN_NAME = ''INTPLACE'' ' ;
	EXECUTE IMMEDIATE state INTO r_character_length ;
 
  IF r_character_length <= 350 THEN
    	dbms_output.put_line('IntPlace is smaller than 350');
			state := 'ALTER TABLE INTERACTION MODIFY (INTPLACE CHAR(350))' ;
			EXECUTE IMMEDIATE state ;
	END IF ;
END IF ; 
 
END ;
/
 
spool off
Franck
funoracle est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 08h52.


 
 
 
 
Partenaires

Hébergement Web