locked
Migrar Procedures do SQL Para Oracle. RRS feed

  • Pergunta

  • Senhores,

    Estou tendo uma grande dúvida como migrar procedures que estão prontas no SQL para Oracle?

    Abs.


    "conhecimento e fonte"
    sexta-feira, 8 de abril de 2011 16:29

Respostas

  • Edison_desing tenta assim:

    CREATE OR REPLACE
    PROCEDURE SPS_USUARIOSITE
    ( Login IN VARCHAR2
    , Senha IN VARCHAR2
    )
    
    IS 
    
    Existe Number(30);
    
    BEGIN
       BEGIN
         SELECT * FROM UsuarioSite WHERE login = Login AND senha = Senha;
         SELECT Existe = COUNT(idUsuarioSite) FROM UsuarioSite WHERE login = Login AND senha = Senha;
       END;
       IF Existe > 0 THEN
        BEGIN
         UPDATE UsuarioSite SET ultimoAcesso = (SELECT SYSDATE FROM DUAL) WHERE login = Login AND senha = Senha;
        END;
       END IF;
     
    END SPS_USUARIOSITE;
    
    
    • Sugerido como Resposta Eder Costa quinta-feira, 14 de abril de 2011 13:57
    • Marcado como Resposta Eder Costa segunda-feira, 18 de abril de 2011 12:01
    segunda-feira, 11 de abril de 2011 14:23

Todas as Respostas

  • Boa Tarde,

    Não há como migrá-las. O Oracle usa o PL/SQL que é um dialeto SQL completamente diferente do T-SQL utilizado pelo SQL Server. Devem haver ferramentas que prometem fazer isso, mas possivelmente não são 100% garantidas e eventualmente podem produzir código de má qualidade dependendo do que a procedure faz.

    A única forma segura é reescrevê-las. Infelizmente a SQL não padroniza todas as necessidades e sempre haverá divergências entre os fabricantes o que fará com que o código de um não necessariamente funcione no outro.

    O uso intenso de stored procedures é um dos grandes dificultadores na portabilidade de um banco para outro.

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.wordpress.com


    Classifique as respostas. O seu feedback é imprescindível
    sexta-feira, 8 de abril de 2011 16:52
  • Edison,

     

    Só completando a resposta do Gustavo, a linguagem SQL em si é padrão ISA qualquer coisa, porem os acrescimos da MS feitas na linguagem são do TSQL e da Oracle PL/SQL, exemplo: ISNULL esta para o MSSQL assim como o NVL1 esta para o Oracle.

    Como o gustavo disse, reescrea-as, pois mesmo utilizando ferramenta de terceiros, voce tera um retrabalho depois com certeza para melhorar esses codigos!


    ------------------------------------------------------------- Oracle OCA11g
    sexta-feira, 8 de abril de 2011 17:08
    Moderador
  • Galera preciso muito da ajuda de vocês, entendo pouco de Oracle... Tenho o seguinte procedure em sql:

    ALTER PROCEDURE [dbo].[SPS_UsuarioSite]
    @Login VARCHAR(50),
    @Senha VARCHAR(255)
    
    as
    
    DECLARE @Existe INT
    
    BEGIN
    	SET NOCOUNT ON;
    	SELECT * FROM UsuarioSite WHERE [login] = @login AND senha = @senha
    	SELECT @Existe = COUNT(idUsuarioSite) FROM UsuarioSite WHERE [login] = @login AND senha = @senha
    	IF(@Existe > 0)
    	BEGIN
    		UPDATE UsuarioSite SET ultimoAcesso = GETDATE() WHERE [login] = @login AND senha = @senha
      END
    END
    
    

     

    Na Procedure do Oracle estou fazendo assim:

    CREATE OR REPLACE
    PROCEDURE SPS_USUARIOSITE
    ( Login IN VARCHAR2
    , Senha IN VARCHAR2
    )
    
    AS
    
    BEGIN
    
      DECLARE Existe Number(30);
    
    	SELECT * FROM UsuarioSite WHERE login = Login AND senha = Senha;
    	SELECT Existe = COUNT(idUsuarioSite) FROM UsuarioSite WHERE login = Login AND senha = Senha;
    
      
    END SPS_USUARIOSITE;
    
    
    Mais esta dando errado, me ajude pelo menos a criar esta procedure por favor!!!


    "conhecimento e fonte"
    sexta-feira, 8 de abril de 2011 18:49
  • Edison_desing tenta assim:

    CREATE OR REPLACE
    PROCEDURE SPS_USUARIOSITE
    ( Login IN VARCHAR2
    , Senha IN VARCHAR2
    )
    
    IS 
    
    Existe Number(30);
    
    BEGIN
       BEGIN
         SELECT * FROM UsuarioSite WHERE login = Login AND senha = Senha;
         SELECT Existe = COUNT(idUsuarioSite) FROM UsuarioSite WHERE login = Login AND senha = Senha;
       END;
       IF Existe > 0 THEN
        BEGIN
         UPDATE UsuarioSite SET ultimoAcesso = (SELECT SYSDATE FROM DUAL) WHERE login = Login AND senha = Senha;
        END;
       END IF;
     
    END SPS_USUARIOSITE;
    
    
    • Sugerido como Resposta Eder Costa quinta-feira, 14 de abril de 2011 13:57
    • Marcado como Resposta Eder Costa segunda-feira, 18 de abril de 2011 12:01
    segunda-feira, 11 de abril de 2011 14:23
  • Valeu andré.

    Pessoal podem me ajudar a resolver somente esta?

    Como passar esta para Oracle?

    ALTER PROCEDURE [dbo].[SPS_Aplicativos]
    (
    	 @IDAPLICATIVO INT = NULL OUTPUT,
       @NOME VARCHAR(50) = NULL ,
       @LINK VARCHAR(500) = NULL ,
       @DATAINSERT DATETIME = NULL ,
       @STATUS BIT = NULL,
       @ACTION VARCHAR(500) = NULL,
       @QUERY VARCHAR(5000) = NULL   
    )
    	AS
    	
    	IF(@ACTION = 'SELECTALL')
    	BEGIN	
    		SELECT
    			idAplicativo,
    			nome,
    			link,
    			dataInsert,
    			status
    						
    			FROM
    			
    			Aplicativos
    	END
    		
    		IF(@ACTION = 'SEARCH')
    		BEGIN
    			DECLARE @SQL VARCHAR(5000)
    			SET @SQL = 
    			'SELECT
    					idAplicativo,
    					nome,
    					link,
    					dataInsert,
    					status
    					
    					FROM
    						Aplicativos'
    						
    						+ ISNULL(@QUERY, '')
    						
    						EXEC (@SQL)
    	END
    	
    	IF(@ACTION = 'SELECTBYID')
    	BEGIN
    		SELECT
    			idAplicativo,
    					nome,
    					link,
    					dataInsert,
    					status
    					
    					FROM
    						Aplicativos
    					WHERE
    						idAplicativo = @IDAPLICATIVO
    	END	
    			
    

    "conhecimento e fonte"
    segunda-feira, 18 de abril de 2011 20:51