Pular para o conteúdo
  • Este tópico contém 3 respostas, 2 vozes e foi atualizado pela última vez 7 anos, 5 meses atrás por Avatar photoJosé Laurindo Chiappa.
Visualizando 4 posts - 1 até 4 (de 4 do total)
  • Autor
    Posts
  • #108823
    Avatar de GeovaneGeovane
    Participante

      Caros bom dia, criei um Script no SQL, e preciso traduzir para Oracle, porém não tenho a minima noção de como fazer. Alguém poderia me ajudar? Segue abaixo Scripts.

      /*01 – Declara variáveis externas da query*/
      DECLARE @COLIGADA INT

      SET @COLIGADA=1

      /*02 – Cria registro na GAUTOINC se não existir*/
      IF NOT EXISTS (SELECT VALAUTOINC FROM GAUTOINC WHERE CODCOLIGADA=@COLIGADA AND CODSISTEMA=’F’ AND CODAUTOINC LIKE ‘CODCFO’)

      INSERT INTO GAUTOINC(CODCOLIGADA, CODSISTEMA, CODAUTOINC, VALAUTOINC)
      SELECT @COLIGADA AS COLIGADA,
      ‘F’ AS CODSISTEMA,
      ‘CODCFO’ AS CODAUTOINC,
      0 AS VALAUTOINC
      ;

      /*03 – Declara variáveis internas da query*/
      DECLARE @MAX1 INT
      DECLARE @MAX2 INT
      DECLARE @TAMANHO INT

      SET @MAX1=ISNULL((SELECT VALAUTOINC FROM GAUTOINC WHERE CODCOLIGADA=@COLIGADA AND CODSISTEMA=’F’ AND CODAUTOINC LIKE ‘CODCFO’),0)
      SET @MAX2=ISNULL((SELECT VALAUTOINC FROM GAUTOINC WHERE CODCOLIGADA=0 AND CODSISTEMA=’F’ AND CODAUTOINC LIKE ‘IDCFO’),0)
      SET @TAMANHO=(SELECT LEN(TEXTO) FROM FPARAM WHERE CODCOLIGADA=@COLIGADA AND ID=1001)

      /*04 – Cria tabela base*/
      SELECT *
      INTO #CLIENTES
      FROM (
      SELECT @COLIGADA AS CODCOLIGADA, ‘FLÁVIO HIROYUKI NAKA’ AS NOME, ‘648.267.679-00’ AS CGCCFO UNION
      SELECT @COLIGADA AS CODCOLIGADA, ‘LUANA SILVEIRA PAULA DA COSTA’ AS NOME, ‘049.696.549-21’ AS CGCCFO
      ) AS X
      WHERE
      NOT EXISTS (
      SELECT Y.*
      FROM FCFO Y (NOLOCK)
      WHERE
      Y.CODCOLIGADA=X.CODCOLIGADA AND
      Y.CGCCFO=X.CGCCFO)

      /*05 – Realiza inclusão dos clientes*/
      INSERT INTO FCFO(CODCOLIGADA, CODCFO, IDCFO, NOMEFANTASIA, NOME, CGCCFO, PAGREC, PESSOAFISOUJUR, CODTCF, ATIVO, TIPOCONTRIBUINTEINSS, RECCREATEDBY, RECCREATEDON, RECMODIFIEDBY, RECMODIFIEDON)
      SELECT CODCOLIGADA,
      REPLICATE(‘0’,@TAMANHO-LEN(CODCFO))+CONVERT(VARCHAR,CODCFO) AS CODCFO,
      IDCFO,
      NOMEFANTASIA,
      NOME,
      CGCCFO,
      PAGREC,
      PESSOAFISOUJUR,
      CODTCF,
      ATIVO,
      TIPOCONTRIBUINTEINSS,
      RECCREATEDBY,
      RECCREATEDON,
      RECMODIFIEDBY,
      RECMODIFIEDON
      FROM (
      SELECT A.CODCOLIGADA,
      @MAX1+(ROW_NUMBER() OVER(ORDER BY A.CODCOLIGADA)) AS CODCFO,
      @MAX2+(ROW_NUMBER() OVER(ORDER BY A.CODCOLIGADA)) AS IDCFO,
      A.NOME AS NOMEFANTASIA,
      A.NOME AS NOME,
      A.CGCCFO,
      3 AS PAGREC,
      ‘F’ AS PESSOAFISOUJUR,
      ISNULL(
      (SELECT TOP 1 CODTCF FROM FTCF WHERE CODCOLIGADA=@COLIGADA),
      (SELECT TOP 1 CODTCF FROM FTCF WHERE CODCOLIGADA=0)
      ) AS CODTCF,
      1 AS ATIVO,
      0 AS TIPOCONTRIBUINTEINSS,
      ‘imp.aberto’ AS RECCREATEDBY,
      GETDATE() AS RECCREATEDON,
      ‘imp.aberto’ AS RECMODIFIEDBY,
      GETDATE() AS RECMODIFIEDON
      FROM #CLIENTES A (NOLOCK)
      WHERE
      NOT EXISTS (
      SELECT X.*
      FROM FCFO X (NOLOCK)
      WHERE
      X.CODCOLIGADA=A.CODCOLIGADA AND
      X.CGCCFO=A.CGCCFO)
      ) AS FINAL

      /*06 – Ajusta GAUTOINC*/
      SET @MAX1=ISNULL((SELECT MAX(CODCFO) FROM FCFO WHERE CODCOLIGADA=@COLIGADA),0)
      SET @MAX2=ISNULL((SELECT MAX(IDCFO) FROM FCFO),0)

      UPDATE GAUTOINC SET VALAUTOINC=@MAX1 WHERE CODCOLIGADA=@COLIGADA AND CODSISTEMA=’F’ AND CODAUTOINC LIKE ‘CODCFO’
      UPDATE GAUTOINC SET VALAUTOINC=@MAX2 WHERE CODCOLIGADA=0 AND CODSISTEMA=’F’ AND CODAUTOINC LIKE ‘IDCFO’

      /*06 – Dropa tabela base temporária*/
      DROP TABLE #CLIENTES

      #108824
      Avatar photoJosé Laurindo Chiappa
      Moderador

        Colega, vou tentar te dar uma ajuda geral MAS se vc vai passar a trabalhar com RDBMS Oracle, é ** COMPLETAMENTE OBRIGATÓRIO ** vc dar um estudada nos Conceitos do RDBMS Oracle (há DIVERSOS conceitos que vão mudar COMPLETAMENTE, como Controle de Transação, Paralelismo de SQL, métodos e middleware de conexão, etc, etc, etc), na implementação do RDBMS Oracle para a linguagem SQL (aqui vai ser muito mais pequenos detalhes, o geral do SQL é bem parecido em ambos os RDBMS, ie, SQLSERVER e Oracle) , na linguagem PL/SQL ** E **, principalmente, nas built-ins/funcionalidades específicas Oracle : esses dois últimos vão ser aprendizados ** BASTANTE DIFERENTES ** , há Muuuuitos Conceitos (como o fato do PL/SQL ser uma linguagem totalmente voltada ao back-end, não possuindo nem comando de PRINT de mensagens, ou o fato do PL/SQL possuir datatypes extras além dos do databasepor exemplo, entre outros) e Muuitas Sintaxes diferentes…. SE não o fez, comece pra Ontem esses estudos….

        Muito bem : não vou tirar o seu prazer de fazer por si mesmo (inclusive para servir de Oportunidade de Aprendizado) mas vou indicar as principais diferenças de Conceitos e de Sintaxes que ao que vejo podem te pegar :

        => as variáveis no PL/SQL até podem em muitos ambientes começar com @ mas ** diversos ** ambientes de programação (como o sqlplus, para citar um) usam o @ para funções próprias (chamar scripts, no caso do sqlplus) então Recomendo que vc troque todos os @variável por v_nomedavariável

        => o PL/SQL funciona com o conceito de BLOCOs, ie : vc tem uma seção ÚNICA de DECLARE aonde vc declara suas variáveis todas (não é um DECLARE por linha), e esse seção TEM que ficar em cima de um indicador BEGIN

        => para Atribuir um valor para uma variável programaticamente não se usa SET, a sintaxe é nomedavariavel := valorainserir;

        => o operador de Nulidade é IS NULL , e de não-nulidade é IS NOT NULL

        => todo SELECT ** ou ** tem que ter seus resultados guardados em variáveis (via SELECT colunasdesejadas INTO listadevariáveisseparadaspor vírgula), ** ou ** deve ser processado num LOOP, ** ou ** deve ter seu resultset inserido numa tabela

        => para fazer um IF em cima do resultado de um SELECT, esse resultado TEM que estar armazenado em variável ou em tabela

        => as tabelas-temporárias no RDBMS Oracle se chamam Global Temporary Table, e via de regra são criadas vazias FORA DO PROGRAMA que as usa (na implementação do Aplicativo, junto com o resto do modelo físico) e Não precisam ser dropadas/esvaziadas no final do uso

        ======>>>>> ALTERANDO esses pontos creio que teu script já vai estar praticamente pronto pra rodar no RDBMS Oracle…

        []s

        Chiappa

        #108826
        Avatar de GeovaneGeovane
        Participante

          Quando as Declarações e o uso do Begin e END peguei aqui, mas tem muita coisa que tem que mudar também. Tá osso hehe

          #108827
          Avatar photoJosé Laurindo Chiappa
          Moderador

            Discordo completamente : joga num Editor de texto, substitui @ por v_ , INT por INTEGER, ISNULL por IS NULL , remove os SETs e adiciona o operador := entre a variável e o valor, coloca as declarações de vars todas num só DECLARE ** e ** (usando os conceitos que te expliquei) onde tiver IF EXISTS monte um SELECT INTO e use GTT como tabela-temporária – pronto, não deve demorar mais de 10 minutos E só com isso vc já deve chegar fácil nums 90% da conversão…. Não Vejo como algo do outro mundo, alienígena e incompreensível….
            Repito, não vou fazer para que vc tenha a oportunidade de aprender, mas não é tããão complexo assim…

            []s

            Chiappa

          Visualizando 4 posts - 1 até 4 (de 4 do total)
          • Você deve fazer login para responder a este tópico.
          plugins premium WordPress