STORED PROCEDURE simples

Forum sobre SQL.

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

STORED PROCEDURE simples

Mensagem por JoséQuintas »

é... depende do ponto de vista....

fonte parcial anterior:

Código: Selecionar todos

      :cSQL := ;
         "SELECT " + ;
            " IDPRODUTO, IDESTOQUE, ESPRODUTO, ESDATLAN, ESCADASTRO, ESCFOP, ESPEDIDO, ESTIPLAN, " + ;
            " IF( JPNFEKEY.KKCHAVE IS NULL, LPAD( RIGHT( TRIM( ESNUMDOC ), 7 ), 7, '0' ), LPAD( '', 7, ' ' ) ) AS NUMDOC," + ;
            " ESQTDE  * IF( JPITEM.IEQTDCOM < 1, 1, JPITEM.IEQTDCOM ) AS QTDE," + ;
            " ESQTDE * ESVALOR AS VALOR," + ;
            " JPITEM.IEUNID AS UNIDADE, JPITEM.IEANP AS ANPPRO, JPITEM.IENOME AS ITENOME, " + ;
            " IF( TMPANPINS.AIANP IS NULL OR JPTABANPOPE.AOANPREG = '1022002', JPCADASTRO.CDCNPJ, LPAD( '', 14, '0' ) ) AS CADCNPJ, " + ;
            " JPCADASTRO.CDCIDADE AS CADCIDADE, JPCADASTRO.CDUF AS CADUF, JPCADASTRO.CDNOME AS CADNOME," + ;
            " TABCIDADE.CIIBGE AS IBGE," + ;
            " IF( TMPANPINS.AIANP IS NULL OR JPTABANPOPE.AOANPREG = '1022002', TMPANPLOC.ALANP, LPAD( '', 7, '0' ) ) AS ANPLOC," + ;
            " IF( TMPANPINS.AIANP IS NULL OR JPTABANPOPE.AOANPREG = '1022002', LPAD( '', 7, '0' ), TMPANPINS.AIANP ) AS ANPINS," + ;
            " IF( TMPANPINS.AIANP IS NULL, LPAD( '',10,' '), TMPANPAGE.AAANP ) AS ANPAGE," + ;
            " IF( TMPANPINS.AIANP IS NULL OR JPTABANPOPE.AOANPREG = '1022002', TMPCNAE.IDCNAE, LPAD( '', 5, '0' ) ) AS ANPATI," + ;
            " IF( TMPANPINS.AIANP IS NULL, IF( JPCADASTRO.CDCNAE = '9999999', JPTABANPOPE.AOANPOUT, " + ;
            " JPTABANPOPE.AOANPNREG ), JPTABANPOPE.AOANPREG ) AS ANPOPE, " + ;
            " JPNFEKEY.KKCHAVE AS NFEKEY " + ;
         " FROM JPESTOQUE" + ;
            " LEFT JOIN JPITEM ON JPITEM.IDPRODUTO = JPESTOQUE.ESPRODUTO" + ;
            " LEFT JOIN JPCADASTRO ON JPCADASTRO.IDCADASTRO = JPESTOQUE.ESCADASTRO" + ;
            " LEFT JOIN ( SELECT DISTINCT CIIBGE, CIUF, CINOME FROM JPCIDADE ) AS TABCIDADE " + ;
               " ON JPCADASTRO.CDUF = TABCIDADE.CIUF AND LEFT( JPCADASTRO.CDCIDADE, 20 ) = LEFT( TABCIDADE.CINOME, 20 )" + ;
            " LEFT JOIN " + ;
               " ( SELECT DISTINCT ALIBGE, ALANP FROM JPTABANPLOC WHERE LENGTH( ALVALATE ) < 1 ) AS TMPANPLOC" + ;
               " ON TMPANPLOC.ALIBGE = TABCIDADE.CIIBGE " + ;
            " LEFT JOIN " + ;
               " ( SELECT DISTINCT AICNPJ, AIANP FROM JPTABANPINS WHERE LENGTH( AIVALATE ) < 1 ) AS TMPANPINS" + ;
               " ON TMPANPINS.AICNPJ = IF( LENGTH( JPCADASTRO.CDCNPJ ) = 18," + ;
                  " CONCAT( SUBSTR( JPCADASTRO.CDCNPJ, 1, 2 ), SUBSTR( JPCADASTRO.CDCNPJ, 4, 3 )," + ;
                  " SUBSTR( JPCADASTRO.CDCNPJ, 8, 3 ), SUBSTR( JPCADASTRO.CDCNPJ, 12, 4 )," + ;
                  " SUBSTR( JPCADASTRO.CDCNPJ, 17, 2 ) ), 'X' ) " + ;
            " LEFT JOIN " + ;
               " ( SELECT DISTINCT AACNPJ, AAANP FROM JPTABANPAGE WHERE LENGTH( AAVALATE ) < 1 ) AS TMPANPAGE " + ;
               " ON TMPANPAGE.AACNPJ = IF( LENGTH( JPCADASTRO.CDCNPJ ) = 18," + ;
                  " CONCAT( SUBSTR( JPCADASTRO.CDCNPJ, 1, 2 ), SUBSTR( JPCADASTRO.CDCNPJ, 4, 3 ), SUBSTR( CDCNPJ, 8, 3 ) ), 'X' ) " + ;
fonte atual:

Código: Selecionar todos

      :cSQL := "CALL ze_govisimp( " + ;
               DateSql( dDataInicial ) + ", " + ;
               DateSQL( dDataFinal ) + ", " + ;
               StringSQL( jpempresa->emCnpj ) + ", 0 )"
      :Execute()
Mais esta parte:

Código: Selecionar todos

   cnSQL:Execute( ze_GovISimpCreateSql() )
...
STATIC FUNCTION ze_GovISimpCreateSQL()

   #pragma __binarystreaminclude "sql/ze_GovISimp.sql" | RETURN %s
e nesse ze_govisimp.sql tem o comando/stored procedure:

Código: Selecionar todos

CREATE PROCEDURE IF NOT EXISTS ze_govisimp( dDataInicial DATE, dDataFinal DATE, cCnpjEmpresa VARCHAR(20), nFilter INT(2) )
BEGIN
SELECT
   IDPRODUTO, IDESTOQUE, ESPRODUTO, ESDATLAN, ESCADASTRO, ESCFOP, ESPEDIDO, ESTIPLAN,
   IF( JPNFEKEY.KKCHAVE IS NULL, LPAD( RIGHT( TRIM( ESNUMDOC ), 7 ), 7, '0' ), LPAD( '', 7, ' ' ) ) AS NUMDOC,
...
END
Sei lá...
Ainda meio relutante de mudar o modo de trabalho.
Continua existindo a compilação no caso de alterações, mas o fonte Harbour só contém Harbour, e o fonte SQL só contém SQL, um não complica o outro.

Também a possibilidade de usar uma base referência, na internet por exemplo, e buscar tudo de lá para atualização/execução.
Ou até cadastradas em uma tabela, e buscar da tabela na internet.
Desta forma, bastaria eu atualizar o servidor referência, e os demais se atualizarem a partir dele, sem qualquer mudança no aplicativo.
Poderia até cadastrar datas nos comandos, pra indicar se precisam ser executados em determinada versão do aplicativo, pra uma possível atualização.

Só testando esse por enquanto, e imaginando possibilidades.

Por causa do modo tradicional deixando tudo no EXE, mas... deixar fora pode abrir mais possibilidades.
Afinal... o uso de internet é obrigatório, atualizar EXE da internet é normal, então atualizar comandos/procedures seria normal também.

Pois é... as possibilidades se multiplicando.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

STORED PROCEDURE simples

Mensagem por JoséQuintas »

Só explicando melhor:

O arquivo xxx.SQL contém o comando que cria a stored procedure, é exatamente o comando enviado para o servidor pra criar a procedure.
Até aí tudo bem, mas precisa enviar o comando pelo menos uma vez, por isso ele faz parte do fonte ainda.
Depois é só usar.

Talvez melhor cadastrar todos os comandos no meu servidor, por exemplo, e o aplicativo buscar do meu servidor pra salvar no cliente.
Além de retirar do aplicativo, isso poderia permitir fazer atualizações sem ter que enviar um novo aplicativo.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder