Shell com Mysql

1. Shell com Mysql

Alex Douglas
adsjcsp

(usa Debian)

Enviado em 20/10/2010 - 16:06h

estou tentando popular uma tabela com campo blob com o seguinte comando:

#!/bin/bash

mysql -u usuario -psenha -e \
"INSERT INTO danfes VALUES('null',$caminho,LOAD_FILE($arq),$ANO-$MES ,'null','N','null','null');" danfe

só que as variáveis que contem os dados que quero me traz o seguinte erro:

ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '/home/srv-ftp/desenvolvimento/danfe/01092994000186/2010-02,LOAD_FILE(),2010-02,'' at line 1
./aplicativonf.sh: line 50: /home/srv-ftp/desenvolvimento/danfe/07126726000203/2010-02: é um diretório

ou seja, a variável está vazia, mais eu sei que elas não estão tanto que a que me traz o caminho conta o caminho criado, alguém poderia me ajudar?


  


2. Re: Shell com Mysql

Renato Carneiro Pacheco
renato_pacheco

(usa Debian)

Enviado em 20/10/2010 - 16:49h

Não é q a variável tá vazia, mas vc tá apontando pra um diretório. Verifique o caminho correto e tente d novo.


3. Antes eu movia os arquivos....

Alex Douglas
adsjcsp

(usa Debian)

Enviado em 20/10/2010 - 16:54h

antes eu movia os arquivos dessa forma:

getarq=`grep -l $cnpj *.xml | xargs grep -l "<dEmi>$ANO-$MES"`
mv $getarq /home/srv-ftp/desenvolvimento/danfe/$cnpj/$ANO-$MES 0> /dev/null 1> /dev/

e os arquivos são movidos direitinho, como meus diretórios são com mumero de cnpj e de anomes, não sei o que estou fazendo de errado.....

uma pergunta se eu der o find ele me trará o diretório e o arquivo? Vou testar isso que estou falando, mais obrigado mesmo aqui.


4. Re: Shell com Mysql

Renato Carneiro Pacheco
renato_pacheco

(usa Debian)

Enviado em 20/10/2010 - 16:57h

Se vc pesquisar no find sem parâmetros de type (-type f), ele t passa diretórios e arquivos.


5. pra entender melhor...

Alex Douglas
adsjcsp

(usa Debian)

Enviado em 20/10/2010 - 18:43h

#!/bin/bash
#Protocolo HTTP

#Dvide a data em DIA, MES, ANO
DIA=`date +%d`
MES=`date +%m`
ANO=`date +%Y`

#Esta função pega de 1 a 14 caracteres de cnpj que esta em um arquivo de cnpj
_cnpjdir()
{
#cat /home/srv-ftp/desenvolvimento/cnpjlojas | grep '\<[0-9]\{1,14\}\>' | grep '^1'
cut -b1-14 /home/srv-ftp/desenvolvimento/cnpjlojas
}

#faz um loop para a contagem de mes, estou usando dessa forma por que o dia que esta na separação da data não vem com o 0 e isso me causou transtorno então fiz dessa forma
for MES in 01 02 03 04 05 06 07 08 09 10 11 12; do
#faz o loop pegando todos os cnpjs que estão no arquivo de cnpj
for cnpj in $( _cnpjdir );do
#cria pastas dentro de um determido diretorio com a numeração dos cnpjs
mkdir -p -m 777 /home/srv-ftp/desenvolvimento/danfe/$cnpj
#cria a pasta de ANO e MES para organizar os arquivos que serão movidos
mkdir -p -m 777 /home/srv-ftp/desenvolvimento/danfe/$cnpj/$ANO-$MES
#entra na pasta repositório onde é colocado sem distinção todo e qualquer arquiivo XML
cd /home/srv-ftp/desenvolvimento/repositorio/
#aqui se faz a divisão dos arquivos por cnpj e por ano e mes, ou seja, cada arquivo tem neu nome, mais os dados encontram-se dentro do arquivo, eu procuro lá pelo cnpj e pela data.
getarq=`grep -l $cnpj *.xml | xargs grep -l "<dEmi>$ANO-$MES"`
#aqui movemos os aqruivos previamente selecionados pra suas respectivas pastas, ou seja, para a pasta de cnpj correta e a pasta da data (ANO-MES) em que ele foi criado isso sem mostrar os erros por que como tem varios tipos de arquivos xml dentro dessa pasta o que ficar lá será feito outra coisa com eles.
mv $getarq /home/srv-ftp/desenvolvimento/danfe/$cnpj/$ANO-$MES 0> /dev/null 1> /dev/null 2> /dev/null

#Sei que o script esta tosco, mais para a urgencia que tenho esta de bom tamanho, mais quero organoza-los de forma melhor. Então decidi criar um script para popular uma tabela no mysql, para que ogerenciasmento se dê de forma mais eficaz.

#aqui abrimos o mysql e com a senha e o usuário liberado pra tal, da segunda linha em diante é a tabla onde quero popular com os arquivos xml especificamente no campo no 3 campo
mysql -u usuario -psenha -e \
"INSERT INTO danfes
VALUES(
'null',
'$caminho',
LOAD_FILE(`find .$cnpj -type f`),
'$ANO-$MES',
now(),
'N',
'null',
'null')" danfe

done

done

# Extrutura de base de dados para gerenciar danfes Banco de dados=dnafe tabela=danfes campos= id, caminho, arquivo, data, cnpj, verificado, data_ent, data_ver




6. Re: Shell com Mysql

Renato Carneiro Pacheco
renato_pacheco

(usa Debian)

Enviado em 20/10/2010 - 19:02h

Pelo q percebi, acho q a linha problemática é essa:

LOAD_FILE(`find .$cnpj -type f`),

O find não pode localizar diretórios, apenas arquivos, pois a opção LOAD_FILE só aceita arquivos.


7. script reformulado....

Alex Douglas
adsjcsp

(usa Debian)

Enviado em 21/10/2010 - 13:04h

Bem a noite foi feita pra se pensar rsrsrsr, então resolvi reescrever o script e saiu essa agora:

#!/bin/bash
#Protocolo HTTP

#Divide a data em DIA, MES, ANO
DIA=`date +%d`
MES=`date +%m`
ANO=`date +%Y`

_arqsxml()
{
cut -f1 /home/srv-ftp/desenvolvimento/danfesxmls
}

#Esta função pega de 1 a 14 caracteres de cnpj que esta em um arquivo de cnpj
_cnpjdir()
{
#cat /home/srv-ftp/desenvolvimento/cnpjlojas | grep '\<[0-9]\{1,14\}\>' | grep '^1'
cut -b1-14 /home/srv-ftp/desenvolvimento/cnpjlojas
}

# Extrutura de base de dados para gerenciar danfes Banco de dados=dnafe tabela=danfes campos= id, caminho, arquivo, data, cnpj, verificado, data_ent, data_ver
for arquivos in $(_arqsxml)
do
#echo $arquivos
mysql -u usuario -psenha -Bse \
"INSERT INTO danfes VALUES('0','null',#LOAD_FILE($arquivos)(sem aspas simples),'null',now(),'N','null','null')" danfe
done

se eu tirar a linha onde o mysql fará a inclusão e colocar um echo, ele me tras o caminho e o arquivo que eu teria de incluir na base de dados..... alguma dica???

Valeu.....


8. Re: Shell com Mysql

Renato Carneiro Pacheco
renato_pacheco

(usa Debian)

Enviado em 21/10/2010 - 13:47h

O q tem dentro desse arquivo /home/srv-ftp/desenvolvimento/danfesxmls?


9. lista dos arquivos xml

Alex Douglas
adsjcsp

(usa Debian)

Enviado em 21/10/2010 - 14:32h

a lista com o caminho e o nome dos arquivos xml.


10. Re: Shell com Mysql

Renato Carneiro Pacheco
renato_pacheco

(usa Debian)

Enviado em 21/10/2010 - 15:00h

Mas do jeito q tá ae ainda dá a msm msg?


11. é esse aqui.

Alex Douglas
adsjcsp

(usa Debian)

Enviado em 21/10/2010 - 15:03h

ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '/repositorio/35100704175844000124550030000079817227098827.xml,'null',now(),'N','' at line 1



12. Re: Shell com Mysql

Renato Carneiro Pacheco
renato_pacheco

(usa Debian)

Enviado em 21/10/2010 - 15:15h

Mas manualmente vc consegue inserir os dados q vc deseja?






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts