sábado, 9 de julho de 2011

Procedure - Valida inserção, update e delete.

Procedure - Valida inserção, update e delete. 

CREATE PROCEDURE sp_malotes

@codmalote    int,
@numerolacre  varchar(15),          
@origem       varchar(50),
@destino      varchar(50),
@operacao     nchar(1),
@novocodigo   int output,
@retorno    nvarchar(50) output

AS

if lower(@operacao) = 'i' -- inserir um registro

begin
if exists(select numerolacre from tb_malote where numerolacre = @numerolacre) 
begin
select @retorno = 'Numero lacre JÁ EXISTENTE.'

return (@retorno)
end

  else

begin

   select @retorno = ''
begin transaction
insert into tb_malote (numerolacre,  origem, destino )
      values(@numerolacre, @origem, @destino )

set @novocodigo = @@identity --variavel global do SQL SERVER que retorna o ultimo valor de um campo(identity)
end
end

else

if lower(@operacao) = 'u' -- alterar um registro

begin
select @retorno = ''  

begin transaction

update tb_malote set numerolacre = @numerolacre,
origem =  @origem,destino = @destino       
where codmalote = @codmalote

end

else

if lower(@operacao) = 'd'  -- excluir um registro
 begin 
select @retorno = ''

    begin transaction

    delete from tb_malote where codmalote = @codmalote

  end

if @@error <> 0

begin

   rollback transaction

   return(1)

end

else

begin

   commit transaction

   return(0)

end


Att,
Leonardo Rocha.

Criando uma procedure - Inserção em varias tabelas (Pai - Filha)

Criando uma procedure - Inserção em varias tabelas (Pai - Filha)

Criando uma única procedure na qual passará informações cujo armazenamento deverá ser dividido entre as tabelas Cliente, Endereço e Telefone.


CreateProcedure dbo.stp_InsereCliente
@Codigo int,
@Nome VarChar(30),
@Endereco VarChar(30),
@Telefone VarChar(10)as
Begin
Set NoCountOn
Insert Into TabelaCliente(CodCliente, Nome)Values (@Codigo, @Nome)
InsertInto TabelaEnderecoCliente(CodCliente, Endereco)Values (@Codigo, @Endereco)
Insert Into TabelaTelefoneCliente(CodCliente, Telefone)Values (@Codigo, @Telefone)
SetNoCount Off
End
Exec stp_InsereCliente1, 'Pedro','São Paulo','2234-5678'
Exec stp_InsereCliente2, 'Tiago','Rio de Janeiro', '2245-1020'
Exec stp_InsereCliente3, 'João', 'Brasília','2298-9835'
Select* From TabelaCliente
Select* From TabelaEnderecoCliente
Select* From TabelaTelefoneCliente

ou então, podemos criar uma procedure de acordo com a lógida da trigger que estou utilizando logo abaixo:


– Criação da trigger de geração de seqüenciais
CREATE TRIGGER trgSeqIDPessoa ON tblPessoas
INSTEAD OF INSERT
AS
BEGIN
– Obter o maior ID (no caso do primeiro registro retornar zero) DECLARE @IDPessoa INT
SET @IDPessoa = ISNULL((SELECT MAX(IDPessoa) FROM tblPessoas),0)
SET @IDPessoa = @IDPessoa + 1

– Obter o nome da Pessoa
DECLARE @NomePessoa VARCHAR(50)
SET @NomePessoa = (SELECT NomePessoa FROM INSERTED)

– Gravar o registro na tabela de pessoas
INSERT INTO tblPessoas VALUES (@IDPessoa, @NomePessoa)
END




Att,
Leonardo Rocha.

quinta-feira, 7 de julho de 2011

Operadores em C#

Operadores em C#

 Operadores da linguagem:

  • Operadores aritméticos
  • Operadores de atribuição
  • Operadores relacionais
  • Operadores lógicos 

Operadores aritméticos
Em C# temos os seguintes operadores aritméticos:
Operador Descrição
+ (Adição)
- (Subtração)
* (Multiplicação)
/ (Divisão)
% (Resto/Módulo)
Dos cinco operadores citados acima os três primeiros trabalham da maneira que nós já conhecemos (Adição, Subtração e Multiplicação), já o operador de Divisão ‘/’ trabalha de maneira diferente na divisão de um inteiro, por exemplo, quando dividimos 11 por 2 usando esse operador (sendo 11 um inteiro) o resto da divisão é descartado, pois os inteiros não aceitam numeros fracionários, ou seja, o resultado seria 5. Já o operador ‘%’ tem como sua única função pegar o resto de uma divisão usando o mesmo exemplo dividindo 11 por 2 usando o operador ‘%’ modulo o resultado seria 1, já que é o resto da divisão.


using System;
class OperadoresAritmeticos
{
public static void Main ()
{
int soma = 0, diferenca=0, produto=0, resto=0;
double divisao=0; // resultado da divisão
int num1 = 10, num2 = 2;
soma = num1 + num2;
diferenca = num1 - num2;
produto = num1 * num2;
divisao = num1 / num2;
// resto de 3/2
resto = 3 % num2;
Console.WriteLine("num1 = {0}, num2 = {1}", num1, num2);
Console.WriteLine();
Console.WriteLine("Soma de {0} e {1} é {2}", num1, num2, soma);
Console.WriteLine("Diferença de {0} e {1} é {2}", num1, num2, diferenca);
Console.WriteLine("Produto de {0} e {1} é {2}", num1, num2, produto);
Console.WriteLine("Quociente de {0} e {1} é {2}", num1, num2, divisao);
Console.WriteLine();
Console.WriteLine("resto de 3 quando é dividido por {0} é {1}", num2, resto);
}
}
O exemplo acima embora simples faz uso de todos os operadores aritméticos, como você já viu no artigo passado o método ‘WriteLine’ da classe ‘Console’ apenas mostra uma mensagem na tela, veja a seguinte linha de código:
Console.WriteLine("Soma de {0} e {1} é {2}", num1, num2, soma);


Você deve estar se perguntando o que significa esses ‘{0}, {1} e {2}’, isso serve para nós dizermos ao programa onde se encontra o valor da variavel nessa string, ou seja, ‘{0}’ será substituído por ‘num1’, ‘{1}’ será substituído por ‘num2’ e ‘{2}’ será substituído por ‘soma’.

Operadores de atribuição

Em C# temos os seguintes operadores de atribuição:

Operador Descrição

= (Atribuição simples)
+= (Atribuição aditiva)
-= (Atribuição Subtrativa)
*= (Atribuição Multiplicativa)
/= (Atribuição de divisão)
%= (Atribuição de módulo)
Um operador de atribuição serve justamente para atribuirmos um valor a uma variável, veja:
x = 5;
Ou seja, simplesmente atribuímos o valor 5 a variável x usando o operador de atribuição simples ‘=’.
Outro exemplo:
int num1=10, num2=2;
num1 += num2;
Primeiro atribuímos o valor 10 a variável num1 e o valor 2 a variável num2, na segunda linha atribuímos o valor de num2 a variável num1 com o operador de atribuição ‘+=’, que valor terá num1 agora?
Neste caso ‘num1’ terá o valor atribuído igual a 12, pois seria o mesmo que:
int num1=10, num2=2;
num1 = num1 + num2;
O mesmo é valido para os outros operadores, exemplo:
int num1=10, num2=2;
num1 -= num2;
O que seria o mesmo que:
int num1=10, num2=2;
num1 = num1 - num2;
Neste caso usamos o operador ‘-=’ e o resultado de num1 seria 8, e assim por diante.

Operadores relacionais

Em C# temos os seguintes operadores relacionais:

Operador Descrição

== (Igualdade)
> (Maior)
< (Menor)
<= (Menor igual)
>= (Maior igual)
!= (Diferente)
Uma expressão relacional sempre retorna um valor Booleano, ou seja, verdadeiro ou falso, por exemplo:
Definindo duas variáveis
int num1 = 2, num2 = 5;
Então,
num1 == num2    
    // falso
num1 != num2     
    // verdadeiro
num1 >  num2    // falso
num1 <  num2    // verdadeiro
num1 <= num2  
    // verdadeiro
num1 >= num2 // falso
Importante: Isso mesmo, quando fazemos comparações (relação) para sabermos se dois números são iguais usamos dois (2) sinais de igualdade ‘==’ o que é diferente do operador de atribuição simples ‘=’.

Operadores lógicos

Em C# temos os seguintes operadores lógicos:

Operador Descrição

&& (E)
|| (OU)
Os operadores lógicos são usados para combinar comparações, exemplo:
Definindo duas variáveis
int num1 = 1, num2 = 3;
bool PrimeiroTeste = num1 > 3 && num2 < 10
Neste caso a variável ‘PrimeiroTeste’ será falsa, pois numa expressão onde usamos o operador lógico && (E) as duas expressões relacionais tem que ser verdadeiras, neste caso a primeira é falsa(num1 não é maior que 3) e a segunda é verdadeira (num2 é menor que 10), mas para que a variável PrimeiroTeste seja verdadeira as duas condições tem que ser verdadeira o que não ocorre.
int num1 = 1, num2 = 3;
bool SegundoTeste = num1 > 3 || num2 < 10
Neste caso a variável ‘SegundoTeste’ é verdadeira, pois quando usamos o operador lógico || (OU) basta que uma das comparações seja verdadeira.

Precedência de Operador

Quando falamos de operadores aritméticos, alguns operadores têm precedência sobre outros, veja:
int X = 25 – 7 * 2;
A expressão acima tem duas respostas dependendo do modo que se faça à conta, por exemplo, 25 - 7 = 18, 18 * 2 = 36, x = 36. Ou, 7*2 = 14, 25-14 = 11, x = 11.
Qual resposta é correta??
Neste caso a segunda, ou seja, x = 11, pois o operador de multiplicação ‘*’ tem precedência sobre o operador de subtração ‘-’, assim o calculo de multiplicação é feito primeiro.
Mas e se eu quisesse que a subtração fosse feita primeiro?
Simples, para resolver esse ‘problema’ usamos os parênteses, assim:
int X = (25 – 7) * 2;
Agora sim o resultado seria 36, pois o que esta dentro dos parênteses é calculado primeiro e depois com o resultado desse calculo é calculado o resto da expressão.

Incremento e Decremento

Incrementar um número ou variável significa adicionar 1 ao valor atual, da mesma forma que subtrair 1 de um número ou variável se da o nome de Decremento.
Em C# temos o seguinte:

Operador Descrição

++ (Incremento)
-- (Decremento)
Exemplo:
int X = 1;
X++;
Aqui estamos atribuindo o valor 1 a variável X e depois na linha seguinte incrementando 1 a mesma variável, ou seja, nesse momento X vale 2.
O mesmo é válido para o Decremento, veja:
X--;
Se antes X valia 2 agora vale 1, pois usamos o operador de decremento assim tirando 1 da variável.

Prefixo e Sufixo

Tanto o operador de incremento quanto o operador de decremento tem duas formas de serem aplicados: prefixo e sufixo.
Prefixo à O operador é digitado antes do nome da variável
Ex:
int X = ++Y;
Sufixo à O operador é digitado depois do nome da variável
Ex:
int X = Y++;
O que ocorre é que quando estamos atribuindo um valor a uma variável usando prefixo, ou seja, algo do tipo <variavel1> = ++<variavel2> você esta dizendo para que a variável2 seja incrementada e logo depois seja atribuído o seu valor a variável1.
Exemplo:
int x = ++y;
Vamos imaginar que a variável y vale 2 e que a variável x vale 0 (zero), como estamos usando o prefixo neste caso a variável y será incrementa em 1, ou seja, agora y vale 3 e logo em seguida o valor de y é atribuído a variável x que agora também vale 3.
No caso de usarmos o sufixo primeiro o valor de y seria passado para a variável x, ou seja, x valeria 2 e em seguida y seria incrementado assim y agora vale 3.



Att,
Leonardo Rocha

terça-feira, 5 de julho de 2011

Script para Inserção no banco de dados - Tables Cidade e UF

Script para Inserção no banco de dados - Tables Cidade e UF



Atendendo a necessidade de muitos desenvolvedores, que é ter um banco com todas as cidades e estados do Brasil, vou postar aqui um banco MySQL que tenho ajustado e formatado com todas essas informações.

São 2 tabelas, uma delas com todos os 26 estados + distrito federal, tendo o nome do estado e abreviação (sigla), a outra tabela, que é bem maior, onde estão cadastradas todas as cidades brasileiras, nesta tabela, estão as seguintes informações, nome da cidade, sigla do estado, e código do estado relativo a tabela anterior dos estados. Esta tabela de cidades, tem além das quase 5600 cidades brasileiras, possui junto distritos, e localidades, totalizando 9715 registros.
Espero que seja util a todos !!!

Click aqui para fazer download.





Leonardo Rocha.