Clipper On Line • Ver Tópico - Tem como deixar mais "estilo Harbour"

Tem como deixar mais "estilo Harbour"

Discussão sobre SQL

Moderador: Moderadores

 

Tem como deixar mais "estilo Harbour"

Mensagempor JoséQuintas » 12 Jul 2021 19:16

leis1.png


Os produtos de pedido contém os códigos de leis, pra informações adicionais.
Vou juntar todas de todos os produtos, pra colocar no pedido.

leis2.png


À primeira vista, deu certo.

CREATE PROCEDURE `pedidoLeis`(
   IN `nIdPedido` INT
)
BEGIN
     
DECLARE z, nLen, nCont INT;
DECLARE A, cText VARCHAR(500) DEFAULT '';
DECLARE SP_CURSOR CURSOR FOR SELECT IPLEIS FROM JPITPED WHERE IPPEDIDO = nIdPedido;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET z = 1;

OPEN SP_CURSOR;
REPEAT
   FETCH SP_CURSOR INTO A;
   IF INSTR( A, ',' ) <> 0 THEN
      SET nLen = 7;
   ELSE
      SET nLen = 6;
   END IF;
   SET nCont = 1;
   REPEAT
      IF INSTR( cText, SUBSTR( A, nCont, 6 ) ) = 0 THEN
         SET cText = CONCAT( cText, SUBSTR( A, nCont, 6 ), ',' );
      END IF;   
      SET nCont = nCont + nLen;
   UNTIL nCont > LENGTH( A )
   END REPEAT;
UNTIL ( z = 1 )
END REPEAT;
CLOSE SP_CURSOR;
SELECT cText;

END


Tem como deixar "mais Harbour" ?

Nota:
antigamente usava 6 números juntos sem separação, agora separados por vírgula, por isso a opção para os dois casos.
Por enquanto é teste, dá pra alterar todo passado usando vírgula, pra não precisar ficar testando se está de um jeito ou de outro.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18014
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Tem como deixar mais "estilo Harbour"

Mensagempor JoséQuintas » 13 Jul 2021 06:19

leis.png


expandindo um pouco, ainda em testes.
acrescentado pra retornar como uma tabela, a lista de códigos e "apelido" da lei.

SELECT ctext, lei, denome FROM
( select CAST( SUBSTR( ctext, 1, 6 ) as INT ) as lei
union select CAST( SUBSTR( cText, 8, 6 ) as INT )
union select CAST( SUBSTR( cText, 15, 6 ) as INT )
union select CAST( SUBSTR( ctext, 22, 6 ) as INT )
union select CAST( SUBSTR( ctext, 29, 6 ) as INT )
union select CAST( SUBSTR( ctext, 36, 6 ) as INT )
union select CAST( SUBSTR( ctext, 43, 6 ) as INT )
) as x
LEFT JOIN jptabdecreto AS a ON x.lei = a.iddecreto;


Não é o ideal, porque está pra tamanho/quantidade fixos.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18014
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Tem como deixar mais "estilo Harbour"

Mensagempor JoséQuintas » 13 Jul 2021 08:02

Talvez.... melhor repensar.
Se remodelar os dados...
Pode se tornar mais prático criar uma tabela separada, e trazer a lista pronta.
Menos complicação.

SELECT DISTINCT IdMensagem from jpitpedmsg WHERE ipPedido = IdPedido


Se no SQL mais prático fazer operação com tabelas... é transformar tudo em tabelas... rs
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18014
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Tem como deixar mais "estilo Harbour"

Mensagempor JoséQuintas » 13 Jul 2021 09:16

subs.png


Achei essa função.
Só não sei se ela pode ajudar.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18014
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Tem como deixar mais "estilo Harbour"

Mensagempor JoséQuintas » 13 Jul 2021 20:07

A propósito....
Usei WHILE ao invés de REPEAT, acho que fica mais familiar.

CREATE PROCEDURE ze_pedidoLeis( nIdPedido INT )

BEGIN

DECLARE z, nLen, nCont INT DEFAULT 0;
DECLARE A, cText VARCHAR(500) DEFAULT '';
DECLARE SP_CURSOR CURSOR FOR SELECT IPLEIS FROM jpitped ; /* WHERE IPPEDIDO = nIdPedido; */
DECLARE CONTINUE HANDLER FOR NOT FOUND SET z = 1;

OPEN SP_CURSOR;
THIS:WHILE z <> 1 DO
   FETCH SP_CURSOR INTO A;
   IF z = 1 THEN
      LEAVE THIS;
   END IF;
   IF INSTR( A, ',' ) <> 0 THEN
      SET nLen = 7;
   ELSE
      SET nLen = 6;
   END IF;
   SET nCont = 1;
   WHILE nCont <= LENGTH( A ) DO
      IF LENGTH( TRIM( SUBSTR( A, nCont, 6 ) ) ) <> 0 THEN
         IF INSTR( cText, SUBSTR( A, nCont, 6 ) ) = 0 THEN
            SET cText = CONCAT( cText, SUBSTR( A, nCont, 6 ), ',' );
         END IF;
      END IF;
      SET nCont = nCont + nLen;
   END WHILE;
END WHILE THIS;
CLOSE SP_CURSOR;

/* UPDATE JPPEDIDO SET PDLEIS = cText WHERE IDPEDIDO = nIdPedido */

SELECT ctext, lei, denome FROM
( select CAST( SUBSTR( ctext, 1, 6 ) as INT ) as lei
union select CAST( SUBSTR( cText, 8, 6 ) as INT )
union select CAST( SUBSTR( cText, 15, 6 ) as INT )
union select CAST( SUBSTR( ctext, 22, 6 ) as INT )
union select CAST( SUBSTR( ctext, 29, 6 ) as INT )
union select CAST( SUBSTR( ctext, 36, 6 ) as INT )
union select CAST( SUBSTR( ctext, 43, 6 ) as INT )
) as x
LEFT JOIN jptabdecreto AS a ON x.lei = a.iddecreto;

END


Como teste, estou usando tudo que é produto de tudo que é pedido.
Demora muito com 200 mil itens de pedido, quase 4 segundos, mas é um bom teste.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"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 de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18014
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes




Retornar para SQL

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 10 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro