quinta-feira, 21 de junho de 2012

Incompatibilidade na IDE Arduino

Sempre bom lembrar que existe uma incompatibilidade entre a versão 023 ou inferior para a versão 1.0 ou superior do arduino que se refere a um include que é feito. Essa incompatibilidade pode ser resolvida com as linhas de comando, conforme o include da versão, abaixo:





#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif




O 100 representa a versão 1.0. O include também pode ser feito sem o uso do IF conforme a versão, na forma abaixo o programa deverá rodar em qualquer IDE.

terça-feira, 5 de junho de 2012

Stored Procedures em SQL Server 2008

Alguns exemplos de stored procedure que utilizei, a nível de estudo, em banco de dados SQL Server 2008 que podem servir de guia para outras ocasiões.

Ex1:

  1. CREATE PROCEDURE SP_VALIDA_MATRICULA
  2.         @CODIGO NCHAR(20),
  3.         @NOME nvarchar(50) --no primeiro exemplo não é usado
  4. AS     
  5. BEGIN
  6.         IF EXISTS (SELECT 1
  7.                 FROM FUNCIONARIO
  8.                 WHERE FUNCIONARIO.MATRICULA=@CODIGO )
  9.                         SELECT 'Funcionario valido. Operacao realizada!'
  10.         ELSE
  11.                         SELECT 'Funcionario invalido. Operacao nao realizada!'
  12. END;

Verifica se existe funcionário com um determinado código de matrícula dentro da tabela. A vantagem deste tipo de operação é que a pessoa que realiza o teste não precisa ter conhecimento sobre o banco de dados em si pois receberá somente o nome da procedure. Para executar:

 EXEC SP_VALIDA_MATRICULA 152345,'MARCIO DOS SANTOS'


Ex2:

  1. CREATE PROCEDURE SP_VALIDA_MATRICULA
  2.         @CODIGO NCHAR(20),
  3.         @NOME nvarchar(50)
  4. AS     
  5. BEGIN
  6.         IF EXISTS (SELECT 1
  7.                 FROM FUNCIONARIO
  8.                 WHERE FUNCIONARIO.MATRICULA=@CODIGO )
  9.                         INSERT INTO DEPENDENTE VALUES (@CODIGO,@NOME)
  10.         ELSE
  11.                         SELECT 'Funcionario invalido. Operacao nao realizada!'
  12. END;
Neste exemplo o funcionário, caso não exista, será inserido na tabela.


Supondo agora a tabela de testes abaixo:

  1. CREATE TABLE dbmar(
  2. NUMBER INT,
  3. firstname VARCHAR(20)
  4. )
Detalhe que NUMBER é uma palavra reservada e não deveria ser utilizada para nome de campo na tabela, mesmo assim o exemplo funcionou.


Ex1:

  1. USE forcecar --- Nome da DataBase
  2. GO
  3. CREATE PROCEDURE testeBusca --- Declarando o nome da procedure
  4. @NUMBER INT=2 --- Declarando varivel (note que utilizamos o @ antes do nome da varivel)
  5. AS
  6. --SELECT number, firstname --- Consulta
  7. --FROM dbmar
  8. UPDATE dbmar
  9. SET firstname='roiMAS'
  10. WHERE NUMBER = @NUMBER --- Utilizando varivel como filtro para a consulta
  11. --Para executar uma procedure basta utiilizar a clusula EXECUTE seguido pelo nome da procedure e na frente o valor a ser utilizado como parmetro.
  12. --Exemplo:
  13. EXECUTE testeBusca '3'
  14. --Para excluir a procedure
  15. DROP PROCEDURE testeBusca




Outro exemplo:


  1. CREATE PROCEDURE sp_vendas
  2.         @NumeroNF INT,
  3.         @CodProduto INT,
  4.         @desconto       NUMERIC(4,2),
  5.         @quantidade     NUMERIC(10,2)
  6. AS
  7.  /* CRIA AS VARIAVEIS LOCAIS */
  8. DECLARE @estoque        NUMERIC(10,2)
  9. DECLARE @msg            CHAR(100)
  10.  /* DEFINE O VALOR DE CADA VARIÁVEL */
  11. SET @estoque = (SELECT quantidade FROM PRODUTO WHERE CodProduto = @codproduto)
  12.  /* EXECUTO O TESTE, UTILIZANDO IF...ELSE */
  13. IF (@estoque) < (@quantidade)
  14.         BEGIN
  15.                 SET @msg = 'A quantidade a ser vendida é maior que a quantidade em estoque'
  16.                 PRINT(@msg)
  17.         END
  18. ELSE
  19.         BEGIN
  20.                 INSERT produtoitem (numeronf, codproduto, desconto, quantidade)
  21.                 VALUES (@numeronf, @codproduto, @desconto, @quantidade)    
  22.                 UPDATE PRODUTO SET Quantidade = (@estoque-@quantidade) WHERE CodProduto=@codproduto
  23.         END

Verifica possibilidade de venda de produto caso exista em estoque.


Para executar:
exec sp_vendas 1,22,10,100

A procedure pode também ser criada com o comando abaixo:


CREATE OR REPLACE PROCEDURE sp_vendas

Pois, caso já exista uma procedure com o nome não é possível criar outra com o mesmo nome e o replace substitui a anterior.