none
Ajuda :: bcp e xp_cmdshell RRS feed

  • Pergunta

  • Galera,

    to tentando executar o seguinte comando e está medando o erro abaixo:

    'substr' is not a recognized built-in function name.

    Ressalto que quando executo o linkserver por fora do shell funciona normalmente.


    exec xp_cmdshell 'bcp "SELECT * FROM OPENQUERY(ORCLPRD, 'select distinct AV.nat_sin_rd from FMSCMAPP.sgf_t_rastreamento_sinistros RS, FMSCMAPP.sgf_t_wf_hist_avisosinistro AV where RS.sinistro = AV.num_sin and substr(RS.dt_entrada_designado,4,2) || substr(RS.dt_entrada_designado,1,2) || substr(RS.dt_entrada_designado,7,4) = TO_CHAR(SYSDATE-1,''MMDDYYYY'')')" queryout "\\tsclient\Z\Gerência de Combate a Fraude\01 - PROJETOS\01 - PROJETO SGF - ADM v1\Protótipos\PRODUTIVIDADE_DIA_20120508.txt"'


    Daniel

    terça-feira, 8 de maio de 2012 21:22

Respostas

Todas as Respostas

  • Alguem poderia me ajudar?

    Abs Daniel


    Daniel

    quarta-feira, 9 de maio de 2012 12:47
  • drAlves,

    Que função é esta substr?

    Não seria Substring?


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    quarta-feira, 9 de maio de 2012 14:02
  • Boa tarde Daniel,

    Neste caso o problema esta nas aspas simples, a 1º aspas que é aberta antes do comando BCP fecha antes do comando select, sendo assim o Select que era para ser executado no Oracle esta sendo executado no Sql Server ( dai o erro do comando SUBSTR que não existe no Sql Server mas sim no Oracle).

    Nunca vi este cenário de BCP com Linked Server( nem sei se funciona ), mas tentei modificar sua query para ver se funciona ( colocando uma aspas a mais ), só não deu para eu testar aqui.

    Apenas uma dica, no seu lugar eu tentaria fazer uma das 2 alternativas abaixo:

    1º - Se possivel, fazer a extração das informações do Oracle para o arquivo diretamente pelo Oracle.

    Ou se a solução tiver que ser no Sql Server: criar uma tabela no Sql Server como intermediaria, buscar as informações do Oracle pelo linked server e jogar nesta tabela e depois utilizar o BCP buscando os dados da tabela.

    exec xp_cmdshell 
    'bcp "SELECT * FROM OPENQUERY(ORCLPRD, ''select distinct AV.nat_sin_rd from FMSCMAPP.sgf_t_rastreamento_sinistros RS
    , FMSCMAPP.sgf_t_wf_hist_avisosinistro AV where RS.sinistro = AV.num_sin and substr(RS.dt_entrada_designado,4,2) || substr(RS.dt_entrada_designado,1,2) || substr(RS.dt_entrada_designado,7,4) = TO_CHAR(SYSDATE-1,''''MMDDYYYY'')'')" 
    queryout "\\tsclient\Z\Gerência de Combate  a Fraude\01 - PROJETOS\01 - PROJETO SGF - ADM v1\Protótipos\PRODUTIVIDADE_DIA_20120508.txt"'


    Adriano Nascimento

    quarta-feira, 9 de maio de 2012 17:11
  • Adriano,

    vou tentar a segunda sugestão que vc deu amanhã.

    Desde já agradeço a ajuda.


    Daniel

    quarta-feira, 9 de maio de 2012 22:28
  • Adriano,

    executei a segunda opção como vc orientou e não tive mais o erro, porém não consegui carregar o arquivo. Ao executar o procedimento somente me retorna o output abaixo:

    User name not provided, either use -U to provide the user name or use -T for Trusted Connection
    usage: bcp {dbtable | query} {in | out | queryout | format} datafile
      [-m maxerrors]            [-f formatfile]          [-e errfile]
      [-F firstrow]             [-L lastrow]             [-b batchsize]
      [-n native type]          [-c character type]      [-w wide character type]
      [-N keep non-text native] [-V file format version] [-q quoted identifier]
      [-C code page specifier]  [-t field terminator]    [-r row terminator]
      [-i inputfile]            [-o outfile]             [-a packetsize]
      [-S server name]          [-U username]            [-P password]
      [-T trusted connection]   [-v version]             [-R regional enable]
      [-k keep null values]     [-E keep identity values]
      [-h "load hints"]         [-x generate xml format file]
    NULL

    O comando ficou desta maneira:

    exec xp_cmdshell 'bcp "SELECT NAT_SIN_RD, USUARIO_ANALISE, SINISTRO, DT_PARECER_ANALISE, USUARIO_TRIAGEM, DT_ENTRADA_TRIAGEM, DT_FECHAMENTO_TRIAGEM, DT_ENTRADA_DESIGNADO, DT_ENTRADA_ANALISE, PARECER_ANALISE, CONVERT(VARCHAR(10), DT_RELATORIO, 112) AS DT_RELATORIO FROM PRODUTIVIDADE_DIA" queryout "\\tsclient\Z\Gerência de Combate a Fraude\01 - PROJETOS\01 - PROJETO SGF - ADM v1\Protótipos\PRODUTIVIDADE_DIA.txt"'

    Aguardo retorno.

    Daniel

    sexta-feira, 11 de maio de 2012 14:38
  • Alguem poderia me ajudar?

    Daniel

    sexta-feira, 11 de maio de 2012 16:46
  • drAlves, boa tarde,

    Faltou alguns parâmetros, tente desta forma:

    exec xp_cmdshell 'bcp "SELECT NAT_SIN_RD, USUARIO_ANALISE, SINISTRO, DT_PARECER_ANALISE, USUARIO_TRIAGEM, DT_ENTRADA_TRIAGEM, DT_FECHAMENTO_TRIAGEM, DT_ENTRADA_DESIGNADO, DT_ENTRADA_ANALISE, PARECER_ANALISE, CONVERT(VARCHAR(10), DT_RELATORIO, 112) AS DT_RELATORIO FROM PRODUTIVIDADE_DIA" queryout "\\tsclient\Z\Gerência de Combate a Fraude\01 - PROJETOS\01 - PROJETO SGF - ADM v1\Protótipos\PRODUTIVIDADE_DIA.txt" -T -c -C"ACP" -t";"'

    Att,


    Rafael Godoi Sabadin
    http://www.linkedin.com/in/rafaelgodoisabadin


    Classifique as respostas. O seu feedback é essencial.

    sexta-feira, 11 de maio de 2012 17:05
  • Rafael,

    coloquei dessa forma.

    exec xp_cmdshell 'bcp "SELECT NAT_SIN_RD, USUARIO_ANALISE, SINISTRO, DT_PARECER_ANALISE, USUARIO_TRIAGEM, DT_ENTRADA_TRIAGEM, DT_FECHAMENTO_TRIAGEM, DT_ENTRADA_DESIGNADO, DT_ENTRADA_ANALISE, PARECER_ANALISE, CONVERT(VARCHAR(10), DT_RELATORIO, 112) AS DT_RELATORIO FROM PRODUTIVIDADE_DIA" queryout "\\tsclient\Z\Gerência de Combate a Fraude\01 - PROJETOS\01 - PROJETO SGF - ADM v1\Protótipos\teste.txt" -S ONIX -T -c -t";"'

    porém deu esse erro. Ressalto que rodando o Select separadamente funciona.

    SQLState = 42S02, NativeError = 208
    Error = [Microsoft][SQL Native Client][SQL Server]Invalid object name 'PRODUTIVIDADE_DIA'.
    SQLState = 42000, NativeError = 8180
    Error = [Microsoft][SQL Native Client][SQL Server]Statement(s) could not be prepared.
    NULL


    Daniel

    sexta-feira, 11 de maio de 2012 17:26
  • drAlves,

    Me desculpe, tente colocar o nome do objeto totalmente qualificado (Ex: SELECT * FROM Instancia.Esquema.Tablea)

    Att,


    Rafael Godoi Sabadin
    http://www.linkedin.com/in/rafaelgodoisabadin


    Classifique as respostas. O seu feedback é essencial.

    sexta-feira, 11 de maio de 2012 17:35
  • Rafael,

    ficou dessa maneira mais ainda continua com a mesma mensagem de erro.

    Olha como ficou:

    exec xp_cmdshell 'bcp "SELECT NAT_SIN_RD, USUARIO_ANALISE, SINISTRO, DT_PARECER_ANALISE, USUARIO_TRIAGEM, DT_ENTRADA_TRIAGEM, DT_FECHAMENTO_TRIAGEM, DT_ENTRADA_DESIGNADO, DT_ENTRADA_ANALISE, PARECER_ANALISE, CONVERT(VARCHAR(10), DT_RELATORIO, 112) AS DT_RELATORIO FROM DBO.PRODUTIVIDADE_DIA" queryout "\\tsclient\Z\Gerência de Combate a Fraude\01 - PROJETOS\01 - PROJETO SGF - ADM v1\Protótipos\teste.txt" -S ONIX -T -c -t";"'

    Olha o erro

    SQLState = 42S02, NativeError = 208
    Error = [Microsoft][SQL Native Client][SQL Server]Invalid object name 'DBO.PRODUTIVIDADE_DIA'.
    SQLState = 42000, NativeError = 8180
    Error = [Microsoft][SQL Native Client][SQL Server]Statement(s) could not be prepared.
    NULL


    Daniel

    sexta-feira, 11 de maio de 2012 17:53
  • Daniel,

    Antes do esquema coloque o nome da instancia conforme o exemplo que postei anteriormente.

    Att,


    Rafael Godoi Sabadin
    http://www.linkedin.com/in/rafaelgodoisabadin


    Classifique as respostas. O seu feedback é essencial.

    sexta-feira, 11 de maio de 2012 17:56
  • Rafael,

    a instância seria o nome do meu servidor?

    SELECT * FROM ONIX.DBO.PRODUTIVIDADE_DIA


    Daniel

    sexta-feira, 11 de maio de 2012 18:40
  • Se for uma instancia padrão é o mesmo nome do servidor, se não é o NomeServidor/NomeInstancia. Mas no seu caso é dessa forma sim, ao menos pelo parâmetro que você passou no bcp.

    Att,


    Rafael Godoi Sabadin
    http://www.linkedin.com/in/rafaelgodoisabadin


    Classifique as respostas. O seu feedback é essencial.

    sexta-feira, 11 de maio de 2012 18:47
  • Rafael,

    quando coloco ONIX ele não funciona nem em um select simples, porém quando deixo somente o DBO o select simples funciona. Contudo o bcp ainda não funciona.


    Daniel

    sexta-feira, 11 de maio de 2012 18:55
  • Daniel,

    Então ONIX não é o nome da sua instância, pois o select deveria funcionar. No Microsoft SQL Server Management Studio, no Object Explorer tem como verificar o nome da instância. Vai ter o nome da instância e logo após entre parênteses, a versão e o usuário).


    Rafael Godoi Sabadin
    http://www.linkedin.com/in/rafaelgodoisabadin


    Classifique as respostas. O seu feedback é essencial.
    sexta-feira, 11 de maio de 2012 19:05
  • Rafael,

    postei a imagem do que vc está falando. E o que está aparecendo é o Onix.


    Daniel

    sexta-feira, 11 de maio de 2012 19:15
  • Daniel,

    Me desculpe, falha minha, como vi no primeiro posto o linked server com o Oracle pensei uma coisa e postei outra.

    Segue:

    SELECT * FROM Banco.Esquema.Tablea

    Att,


    Rafael Godoi Sabadin
    http://www.linkedin.com/in/rafaelgodoisabadin


    Classifique as respostas. O seu feedback é essencial.

    • Marcado como Resposta dralves segunda-feira, 14 de maio de 2012 15:17
    sexta-feira, 11 de maio de 2012 19:22
  • Rafael,

    funcionou muito obrigado pela ajuda. Porém quando tento salvar o arquivo gerado em outra máquina exibe a seguinte mensagem:

    error = microsoft sql native client unable to open bcp host data-file

    Eu sei que é alguma coisa em relação a permissão, porém qual o usuário que deverá ter permissão? O meu usuário ou o usuário SqlServer?

    Desde já agradeço.


    Daniel

    segunda-feira, 14 de maio de 2012 15:21
  • Daniel,

    O usuário do SQL Server que deverá ter permissão.

    Att,


    Rafael Godoi Sabadin
    http://www.linkedin.com/in/rafaelgodoisabadin


    Classifique as respostas. O seu feedback é essencial.

    segunda-feira, 14 de maio de 2012 16:00