Convert Varchar in Int or Int in Varchar (SQL Procedure)

Asked

Viewed 424 times

0

in Procedure there are two fields (Cod_manufacturer(VARCHAR) and Codigo_manufacturer(INT)), a Varchar and an Int, when I do a LEFT JOIN to cross the tables, it gives me a conversion error, I tried to use CAST and CONVERT in left Join but still gave conversion error, someone knows if there would be another way or maybe I have used cast and Convert in the wrong location?? :(

BEGIN

DELETE FROM TMP_SALDO_ESTOQUE;

INSERT INTO TMP_SALDO_ESTOQUE
(CODIGO_PRODUTO, TIPO, ENTRADAS, SAIDAS)
SELECT M.CODIGO_PRODUTO, 'E', SUM(M.QTDE) AS ENTRADAS, 0 AS SAIDAS
FROM
     MOVIMENTO_ESTOQUE M
     INNER JOIN LANCAMENTO_ESTOQUE L
       ON M.CODIGO_LANCAMENTO = L.CODIGO
WHERE (M.AFETA_SALDO_ESTOQUE = 'S') AND (L.TIPO = 'E') AND (L.DATA_MOVIMENTO <= :DATA) AND ((:CODIGO_ALMOX = 0) OR (M.CODIGO_ALMOX = :CODIGO_ALMOX))
GROUP BY M.CODIGO_PRODUTO
UNION ALL
SELECT M.CODIGO_PRODUTO, 'S', 0 AS ENTRADAS, SUM(M.QTDE) AS SAIDAS
FROM
     MOVIMENTO_ESTOQUE M
     INNER JOIN LANCAMENTO_ESTOQUE L
       ON M.CODIGO_LANCAMENTO = L.CODIGO
WHERE (M.AFETA_SALDO_ESTOQUE = 'S') AND (L.TIPO = 'S') AND (L.DATA_MOVIMENTO <= :DATA) AND ((:CODIGO_ALMOX = 0) OR (M.CODIGO_ALMOX = :CODIGO_ALMOX))
GROUP BY M.CODIGO_PRODUTO;

FOR
SELECT
  P.CODIGO,
  P.COD_FABRICANTE,
  F.NOME,
  P.DESCRICAO,
  P.CUSTO_MEDIO,
  P.CODIGO_UNIDADE,
  P.CODIGO_GRUPO,
  P.CODIGO_EMBALAGEM,
  P.CODIGO_FORNECEDOR,
  P.TIPO_ITEM,
  P.CURVA_ABC,
  P.LOCALIZACAO,
  P.TIPO_AQUISICAO,
  P.INATIVO,
  P.SERVICO,
  P.DIFER_ICMS,
  G.DESCRICAO AS GRUPO,
  U.SIGLA AS UNIDADE,
  SUM(S.ENTRADAS) AS ENTRADAS,
  SUM(S.SAIDAS) AS SAIDAS,
  P.NCM
FROM
  PRODUTO P LEFT JOIN UNIDADE U
    ON P.CODIGO_UNIDADE = U.CODIGO
  LEFT JOIN FABRICANTE F
    ON P.COD_FABRICANTE = F.CODIGO_FABRICANTE
  LEFT JOIN GRUPO_PRODUTO G
    ON G.CODIGO = P.CODIGO_GRUPO
  LEFT JOIN TMP_SALDO_ESTOQUE S
    ON P.CODIGO = S.CODIGO_PRODUTO
GROUP BY
  P.CODIGO,
  P.COD_FABRICANTE,
  F.NOME,
  P.DESCRICAO,
  P.CUSTO_MEDIO,
  P.CODIGO_UNIDADE,
  P.CODIGO_GRUPO,
  P.CODIGO_EMBALAGEM,
  P.CODIGO_FORNECEDOR,
  P.TIPO_ITEM,
  P.CURVA_ABC,
  P.LOCALIZACAO,
  P.TIPO_AQUISICAO,
  P.INATIVO,
  P.SERVICO,
  P.DIFER_ICMS,
  G.DESCRICAO,
  U.SIGLA,
  P.NCM

  INTO :CODIGO, :COD_FABRICANTE, :DESCRICAO, :CUSTO_MEDIO, :CODIGO_UNIDADE, :CODIGO_GRUPO, :CODIGO_EMBALAGEM, :CODIGO_FORNECEDOR, :TIPO_ITEM, :CURVA_ABC, :LOCALIZACAO, :TIPO_AQUISICAO, :INATIVO, :SERVICO, :DIFER_ICMS, :GRUPO, :UNIDADE, :ENTRADAS, :SAIDAS , :NCM
  DO
  BEGIN
    SUSPEND;
  END
END
  • what error? where is the conversion in your code? it is not an error pq can not convert (text to number)?

  • in "from" when I try to convert this way gives "Parsing error": LEFT JOIN MANUFACTURER F ON CAST (P.COD_FABRICANTE AS interger(7)) = F.CODIGO_FABRICANTE

  • Hi viva make a comparison of VARCHAR and INT has everything to go wrong, if in varchar comes a value with '10D'...will never convert, what I advise you is to standardize the type of data, try to find a way to be of the same TYPE.

1 answer

0

Forehead with the following:

SELECT ISNUMERIC(Cod_Fabricante) FROM PRODUTO 

Will return one or zero, so validates if they are all Numeric Rows.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.