+ Répondre à la discussion
Affichage des résultats 1 à 2 sur 2
  1. #1
    Invité de passage
    Inscrit en
    mars 2007
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : mars 2007
    Messages : 26
    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.

  2. #2
    Membre habitué
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    décembre 2011
    Messages
    52
    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 : 52
    Points : 116
    Points
    116

    Par défaut

    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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •