Pesquisar este blog
quarta-feira, 2 de fevereiro de 2011
Como desconfigurar o Grid Cluster Configuration após falha na instalação
segunda-feira, 24 de janeiro de 2011
Conheça os principais daemons Red-Hat
http://magazine.redhat.com/2007/03/09/understanding-your-red-hat-enterprise-linux-daemons/
sábado, 11 de setembro de 2010
Função para validar CPF em PHP
/*Delphi-like function para converter string para inteiro*/function StrToInt($value){return (int)$value; } /* Função para validar CPF. Baseado na função validaCPF (Delphi) do PoliGestor da empresa Polidados Informática Ltda. */ function validaCPF($cpf){ $CPFInvalido = array ('00000000000', '11111111111', '22222222222', '33333333333', '44444444444', '55555555555', '66666666666', '77777777777', '88888888888', '99999999999'); $digitado = ""; $calculado = ""; $Result = false; try { // verifica CPF inválido for ($i = 0; $i < 9; $i++) if ($cpf == $CPFInvalido[$i]) return false; if ($cpf != ''){ $n1 = StrToInt($cpf[0]); $n2 = StrToInt($cpf[1]); $n3 = StrToInt($cpf[2]); $n4 = StrToInt($cpf[3]); $n5 = StrToInt($cpf[4]); $n6 = StrToInt($cpf[5]); $n7 = StrToInt($cpf[6]); $n8 = StrToInt($cpf[7]); $n9 = StrToInt($cpf[8]); $d1 = $n9*2+$n8*3+$n7*4+$n6*5+$n5*6+$n4*7+$n3*8+$n2*9+$n1*10; $d1 = 11-($d1 % 11); if ($d1>=10) $d1 = 0; $d2 = $d1*2+$n9*3+$n8*4+$n7*5+$n6*6+$n5*7+$n4*8+$n3*9+$n2*10+$n1*11; $d2 = 11-($d2 % 11); if ($d2>=10) $d2 = 0; $calculado = $d1 . $d2; $digitado = $cpf[9] . $cpf[10]; return ($calculado == $digitado) ? true : false; } } catch (Exception $e) { $Result = false; } } ?>
sábado, 4 de setembro de 2010
Principais Visões para ORACLE
Fonte: http://www.techonthenet.com/oracle/sys_tables/index.php
ALL_ARGUMENTS Arguments in object accessible to the user
ALL_CATALOG All tables, views, synonyms, sequences accessible to the user
ALL_COL_COMMENTS Comments on columns of accessible tables and views
ALL_CONSTRAINTS Constraint definitions on accessible tables
ALL_CONS_COLUMNS Information about accessible columns in constraint definitions
ALL_DB_LINKS Database links accessible to the user
ALL_ERRORS Current errors on stored objects that user is allowed to create
ALL_INDEXES Descriptions of indexes on tables accessible to the user
ALL_IND_COLUMNS COLUMNs comprising INDEXes on accessible TABLES
ALL_LOBS Description of LOBs contained in tables accessible to the user
ALL_OBJECTS Objects accessible to the user
ALL_OBJECT_TABLES Description of all object tables accessible to the user
ALL_SEQUENCES Description of SEQUENCEs accessible to the user
ALL_SNAPSHOTS Snapshots the user can access
ALL_SOURCE Current source on stored objects that user is allowed to create
ALL_SYNONYMS All synonyms accessible to the user
ALL_TABLES Description of relational tables accessible to the user
ALL_TAB_COLUMNS Columns of user's tables, views and clusters
ALL_TAB_COL_STATISTICS Columns of user's tables, views and clusters
ALL_TAB_COMMENTS Comments on tables and views accessible to the user
ALL_TRIGGERS Triggers accessible to the current user
ALL_TRIGGER_COLS Column usage in user's triggers or in triggers on user's tables
ALL_TYPES Description of types accessible to the user
ALL_UPDATABLE_COLUMNS Description of all updatable columns
ALL_USERS Information about all users of the database
ALL_VIEWS Description of views accessible to the user
DATABASE_COMPATIBLE_LEVEL Database compatible parameter set via init.ora
DBA_DB_LINKS All database links in the database
DBA_ERRORS Current errors on all stored objects in the database
DBA_OBJECTS All objects in the database
DBA_ROLES All Roles which exist in the database
DBA_ROLE_PRIVS Roles granted to users and roles
DBA_SOURCE Source of all stored objects in the database
DBA_TABLESPACES Description of all tablespaces
DBA_TAB_PRIVS All grants on objects in the database
DBA_TRIGGERS All triggers in the database
DBA_TS_QUOTAS Tablespace quotas for all users
DBA_USERS Information about all users of the database
DBA_VIEWS Description of all views in the database
DICTIONARY Description of data dictionary tables and views
DICT_COLUMNS Description of columns in data dictionary tables and views
GLOBAL_NAME global database name
NLS_DATABASE_PARAMETERS Permanent NLS parameters of the database
NLS_INSTANCE_PARAMETERS NLS parameters of the instance
NLS_SESSION_PARAMETERS NLS parameters of the user session
PRODUCT_COMPONENT_VERSION version and status information for component products
ROLE_TAB_PRIVS Table privileges granted to roles
SESSION_PRIVS Privileges which the user currently has set
SESSION_ROLES Roles which the user currently has enabled.
SYSTEM_PRIVILEGE_MAP Description table for privilege type codes. Maps privilege type numbers to type names
TABLE_PRIVILEGES Grants on objects for which the user is the grantor, grantee, owner, or an enabled role or PUBLIC is the grantee
TABLE_PRIVILEGE_MAP Description table for privilege (auditing option) type codes. Maps privilege (auditing option) type numbers to type names
terça-feira, 31 de agosto de 2010
Exemplo de Midlet
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
import java.util.Date;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
/**
* @author agilar
*/
public class CadastroCliente extends MIDlet {
private Display display;
private Form frmCadastro;
private TextField txtNome, txtEndereco, txtFone, txtEmail;
private DateField txtDtCadastro;
private ChoiceGroup sexo, casado;
private void createGUI(){
txtNome = new TextField("Nome", "", 70, TextField.ANY);
frmCadastro.append(txtNome);
txtEndereco = new TextField("Endereço", "", 70, TextField.ANY);
frmCadastro.append(txtEndereco);
txtFone = new TextField("Fone", "", 20, TextField.PHONENUMBER);
frmCadastro.append(txtFone);
txtEmail = new TextField("E-mail", "", 30, TextField.EMAILADDR);
frmCadastro.append(txtEmail);
txtDtCadastro = new DateField("Data Cadastro", DateField.DATE);
txtDtCadastro.setDate(new Date());
frmCadastro.append(txtDtCadastro);
sexo = new ChoiceGroup("Sexo", ChoiceGroup.EXCLUSIVE);
sexo.append("Masculino", null);
sexo.append("Feminino", null);
frmCadastro.append(sexo);
casado = new ChoiceGroup("Casado", ChoiceGroup.EXCLUSIVE, new String[] {"Sim", "Não"}, null);
frmCadastro.append(casado);
}
public void startApp() {
display = Display.getDisplay(this);
frmCadastro = new Form("Cadastro de Clientes");
createGUI();
display.setCurrent(frmCadastro);
}
public void pauseApp() {
}
public void destroyApp(boolean unconditional) {
}
}
quinta-feira, 12 de agosto de 2010
Arvore binária simples com os três métodos de caminhamento
/*
* Árvore binária simples com os três métodos de caminhamento:
* Pré-Fixado
* Central
* Pós-Fixado
*
* Autor: Everton Agilar
* Data: 12/08/2010
*
*/
package aula.arvore;
public class Arvore {
int valor;
Arvore esq;
Arvore dir;
public Arvore(int valor){
this.valor = valor;
this.esq = null;
this.dir = null;
}
public void add(Arvore no){
if (no.valor < this.valor){
if (esq == null){
esq = no;
}else {
esq.add(no);
}
}
else {
if (no.valor > this.valor){
if (dir == null){
dir = no;
}
else {
dir.add(no);
}
}
}
}
public void caminhamentoPreFixado(){
System.out.printf("%d%n", valor); // a raiz é acessada por primeiro
if (esq != null)
esq.caminhamentoPreFixado();
if (dir != null)
dir.caminhamentoPreFixado();
}
public void caminhamentoCentral(){
if (esq != null)
esq.caminhamentoCentral();
System.out.printf("%d%n", valor); // a raiz é acessada no meio
if (dir != null)
dir.caminhamentoCentral();
}
public void caminhamentoPosFixado(){
if (esq != null)
esq.caminhamentoPosFixado();
if (dir != null)
dir.caminhamentoPosFixado();
System.out.printf("%d%n", valor); // a raiz é a última acessada
}
public static void main(String[] args) {
System.out.println("Demonstração de formas de caminhamento em árvore binária\n");
Arvore arv = new Arvore(10);
arv.add(new Arvore(8));
arv.add(new Arvore(12));
arv.add(new Arvore(4));
arv.add(new Arvore(14));
arv.add(new Arvore(2));
arv.add(new Arvore(1));
System.out.println("Caminhamento Pré-Fixado:");
arv.caminhamentoPreFixado();
System.out.println("\nCaminhamento In-Fixado ou Central:");
arv.caminhamentoCentral();
System.out.println("\nCaminhamento Pós-Fixado:");
arv.caminhamentoPosFixado();
}
}
quarta-feira, 11 de agosto de 2010
Regras Firewall Pessoal - iptables
# Regras de Firewall
# Autor: Everton Agilar
# Última alteração: 11/08/2010
# Limpa todas as tabelas
iptables -t filter -F INPUT
iptables -t filter -F OUTPUT
iptables -t filter -F FORWARD
# Define política padrão (DROP)
iptables -t filter -P INPUT DROP
iptables -t filter -P OUTPUT DROP
iptables -t filter -P FORWARD DROP
# Permite pacotes de loopback
iptables -t filter -A INPUT -i lo -j ACCEPT
# Permite pacotes de entrada gerados dentro da rede
iptables -t filter -A INPUT -i wlan0 -p tcp -m state --state related,established -j ACCEPT
iptables -t filter -A INPUT -i wlan0 -p udp -m state --state related,established -j ACCEPT
iptables -t filter -A INPUT -i wlan0 -p icmp -m state --state related,established -j ACCEPT
iptables -t filter -A INPUT -i wlan0 -p tcp --sport 20:21 -j ACCEPT
iptables -t filter -A INPUT -i wlan0 -p tcp --sport 1863 -j ACCEPT
iptables -t filter -A INPUT -i wlan0 -p tcp --sport 443 -j ACCEPT
# Permite pacotes de saída para icmp,www,domain,ftp,msn,https
iptables -t filter -A OUTPUT -o wlan0 -p icmp -j ACCEPT
iptables -t filter -A OUTPUT -o wlan0 -p tcp --dport 80 -j ACCEPT
iptables -t filter -A OUTPUT -o wlan0 -p udp --dport 53 -j ACCEPT
iptables -t filter -A OUTPUT -o wlan0 -p tcp --dport 20:21 -j ACCEPT
iptables -t filter -A OUTPUT -o wlan0 -p tcp --dport 1863 -j ACCEPT
iptables -t filter -A OUTPUT -o wlan0 -p tcp --dport 443 -j ACCEPT
segunda-feira, 26 de julho de 2010
Exemplo de Applet e os eventos de ativação
package aula.applet;
import java.applet.*;
import java.awt.Graphics;
public class HelloWorldApplet extends Applet implements Runnable {
Thread anime = null;
public void init(){
System.out.println("Inicializando...");
}
public void start(){
System.out.println("Startando...");
if (anime == null){
System.out.println("Cria animador...");
anime = new Thread(this);
anime.start();
};
}
public void stop(){
System.out.println("Parando...");
anime.interrupt();
anime = null;
}
public void destroy(){
System.out.println("Morrendo...");
}
public void paint(Graphics g){
int x = new java.util.Random().nextInt(100);
int y = new java.util.Random().nextInt(100);
g.drawString("Ola Mundo", x, y);
System.out.println("pintando...");
}
@Override
public void run() {
while (!Thread.currentThread().isInterrupted()){
try {
Thread.currentThread().sleep(2000);
} catch (InterruptedException e) {
}
if (isActive())
repaint();
else {
break;
}
}
System.out.println("Finalizando animador...");
return;
}
}
sexta-feira, 23 de julho de 2010
Comandos diversos
ls -l | grep "^d"
Sinopse: ^ significa primeira letra, que nesse caso é d
2 - Para listar somente arquivos executáveis
ls -l | grep "^-..x"
Sinopse: ^ significa lista primeira letra, nesse caso - significa arquivo comum, pula
dois caracteres de permissão (rw) e encontra o x se o arquivo estiver com permissão de
executável
3 - Como listar arquivos somente em uma linha
ls -1
Sinopse: -1 significa 1 linha
4 - Como listar arquivos pelo mais recente (o que foi modificado por último)
ls -1t
Sinopse: Use -1 para listar apenas uma coluna e -t para listar pela data de modificação
5 - Como alterar a data/hora
date 092713202006
clock -w
Sinopse: O comando date serve para alterar a data/hora.
Foi passado no formato mêsdiahoraminutoano.
Logo em seguinda foi usado o comando clock -w para gravar a data/hora na bios.
6 - Copiando usando tar
Use o comando tar.
$ (cd /origem && tar cf - . ) | (cd /destino && tar xvfp -)
Preste atenção nos parêntesis, eles fazem com que a operação seja executada em uma subshell,
não afetando a shell que vc está usando.
7 - Como saber o tamanho de um diretório em MB?
du -sm nome_do_diretório
8 - Como se tornar o root sem efetuas logou
su root ou su -
Sinopse: Digite o comando e após informe a senha
RPM
-------------------------------------------------
8 - Saber se um arquivo pertence a um pacote
rpm -qf nomearquivo
9 - Saber os arquivos de um pacote
rpm -ql koules-1.2-2.i386.rpm
10 - Obter informações sobre um pacote
rpm -qi coreutils
11 - Ver uma lista de todos os pacotes instalados
rpm -qa
12 - Como instalar, atualizar e remover pacotes
rpm -ivh nompacote.rpm
rpm -U nomepacote.rpm
rpm -e nomepacote
13 - Como testar se um pacote pode ser instalado corretamente
rpm -i --test nomepacote.rpm
14 - Reinstalar um pacote
rpm -U --replacedpkgs nomepacote.rpm
Redes
---------------------------------------------------
1 - Como saber as portas TCP abertas
netstat -an | grep LISTEN
diff e patch
-------------------------------------------------------------------
1 - Como comparar dois arquivos e gerar um arquivo das diferenças
diff -a arq1 arq2 > dif.txt
Sinopse: A opção -a foi usada para ser modo texto
G++
-------------------------------------------------------------------
1 - Compilar um programa usando uma bibliteca externa
g++ -o app1.exe -Wl,--add-stdcall-alias,L.,-msgdll app1.c
2 - Compilar sem usar a rtl cygwin1.dll
Incluir a opção -mno-cygwin no g++
--------------------------------------------------------------------
1 - Como redirecionar dispositivos no Windows
Ver comando MODE
Ex.: MODE LPT1:=COM1:
Este comando redireciona tudo que vai para LPT1 para COM1
terça-feira, 6 de julho de 2010
Criando objetos com javascript
// Classe Pessoa
function pessoa(nome, idade, endereco){ this.nome = nome; this.idade = idade; this.endereco = endereco; function gritar(){ if (this.idade >= 30) document.write("aaaaaaaaaaaaaaaa! "); else document.write("aaaaaaaaaaaaaaaaaaaaaaaaaaaaa! "); } this.gritar = gritar; }
// Classe Calc function Calc(){ function add(x, y){ return x + y; } function subtract(x, y){ return x - y; } this.add = add; this.subtract = subtract; }
// instância a calculadora e faz cálculos matemáticos var c = new Calc(); document.write("2+2=" + c.add(2, 2) + " "); document.write("2-2=" + c.subtract(2, 2) + " ");
// instância pessoas e imprime seus nomes var joao = new pessoa("Joao", 30, "rua X"); document.write(" My name is " + joao.nome + " e tenho " + joao.idade + " anos "); joao.gritar(); // instância Maria e imprime seu nome var maria = new pessoa("Maria", 25, "rua Y"); document.write(" My name is " + maria.nome + " e tenho " + maria.idade + " anos "); maria.gritar(); sábado, 26 de junho de 2010
Base de fatos e regras família em Prolog
homem(joao).
homem(marcos).
homem(jader).
homem(henrique).
homem(jonas).
homem(leo).
homem(rodrigo).
mulher(thaise).
mulher(mara).
mulher(carol).
mulher(melina).
marido(everton, thaise).
marido(joao, carol).
esposa(mara, jader).
filho(henrique, everton).
filho(jonas, marcos).
filho(leo, melina).
filho(rodrigo, mara).
casado_com(X, Y):- homem(X),
mulher(Y),
marido(X, Y), !.
casado_com(X, Y):- homem(X),
mulher(Y),
esposa(Y, X), !.
casado_com(X, Y):- mulher(X),
homem(Y),
esposa(X, Y), !.
casado_com(X, Y):- mulher(X),
homem(Y),
marido(Y, X), !.
tem_filho(X):- homem(X),
filho(Y, X), !.
tem_filho(X):- mulher(X),
filho(Y, X), !.
tem_filho(X):- casado_com(X, Y),
filho(K, Y), !.
sábado, 19 de junho de 2010
Questões sobre Gerenciamento de Projetos
É um esforço progressivo e temporário para criar um produto ou serviço único.
2 - O QUE É GERENCIAMENTO DE PROJETOS
É a aplicação de ferramentas, técnicas, conhecimentos e habilidades de gerência de projetos
a fim de atender a seus requisitos.
3 - QUAIS OS PROCESSOS DO GERENCIAMENTO DE PROJETOS
São cinco: iniciação, planejamento, execução, controle e encerramento
4 - QUAIS AS ÁREAS DE CONHECIMENTO DO GERENCIAMENTO DO PROJETO
São nove áreas:
* Gerenciamento de Integração - processos necessários para gerenciar e coordenar
os diversos grupos do gerenciamento de projetos;
Palavra chaves: Termo de abertura, plano de gerenciamento de projeto,
controle e monitoramento.
* Gerenciamento do Escopo - processos envolvidos na verificação de que o projeto
inclui todo o trabalho e somente o necessário para concluir com sucesso.
Palavras chaves: coletar requisitos, definir escopo, criar EAP, verificar e controlar escopo.
* Gerenciamento do Tempo - processos necessários para assegurar o termino
do projeto no tempo definido.
Palavras chaves: Definir e sequenciar atividades, estimar recursos e duração das atividades,
desenvolver e controlar cronograma.
* Gerenciamento de Custos - processos envolvidos no planejamento, estimativa, orçamentação
e controle de custos de modo que o projeto termine dentro do orçamento aprovado.
Palavras chaves: estimar custo, determinar orçamento, controlar custo.
* Gerenciamento da Qualidade - processos envolvidos na garantia de que o projeto
irá satisfazer os objetivos para os quais foi realizado.
Palavras chaves: Planejar qualidade, realizar garantia e controle da qualidade.
* Gerenciamento de Recursos Humanos - processos que organiza e gerencia a equipe do projeto.
Palavras chaves: desenvolver plano de RH, mobilizar equipe, desenvolver e gerenciar equipe.
* Gerenciamento das comunicações - processos relativos a geração e disseminação da informação
do projeto as pessoas interessadas.
Palavras chaves: Identificar interessados, planejar comunicação, reportar desempenho,
gerenciar expectativas.
* Gerenciamento de Riscos - processos para realizar o gerenciamento dos riscos do projeto.
Palavras chaves: planejar e identificar riscos, fazer análise
qualitativa e quantitativa dos riscos, monitorar e controlar riscos.
* Gerenciamento de Aquisições - processos para compra e aquisição de produtos, serviços,
resultados e contratos.
Palavras chaves: planejar e realizar aquisições, administrar e encerrar aquisições.
5 - QUAIS AS HABILIDADES DE UM GERENTE DE PROJETO
São cinco:
Habilidades organizacionais - organização e planejamento
Habilidades para finanças e contabilidade - estimar custos e desenvolver orçamentos
Habilidades de liderar - direcionamento e envolvimento da equipe
Habilidades de negociar e influênciar - dialogar e obter consenso
Habilidades de comunicação - comunicação clara e objetiva
6 - DEFINA O CONTEXTO DO GERENCIAMENTO
São cinco:
Portfólio - carteira de negócios (conj. de programas e/ou projetos)
Programas - são conj. de projetos administrados juntos. Ex.: Programa Educacional
Projeto - é um esforço progressivo e temporário para criar um produto ou serviço único.
Tarefa - elemento de trabalho com duração, custo e recurso definido.
Pacote de trabalho - menor unidade de trabalho possível de ser planejada, controlada e executada.
7 - O QUE É UM PMO
Escritório de projetos. Orienta e fornece suporte aos gerentes de projeto.
8 - PORQUE ESTUDAR GERENCIAMENTO DE PROJETOS
Porque falhas em projetos em suas definições de tempo, prazo e custo são elevadas
quando não se aplicam técnicas consistentes de gerenciamento de projetos. Estudos
mostram que o uso de gerenciamento de projetos aumenta as chances do projeto concluir no prazo e no orçamento estipulado.
9 - PARA GESTÃO DE UM PROJETO, QUAIS OS CICLOS DE VIDA QUE PRECISAMOS CONSIDERAR
São três:
Ciclo de vida do produto - permanência do produto no mercado
Palavras chaves: idealização, concepção, construção, uso e descarte.
Ciclo de vida do projeto - descreve o que deve ser feito para completar o projeto (definem inicio, meio e fim)
Palavras chaves: Termo de abertura, plano do projeto, declaração do escopo, progresso, aceitação, aprovação, entrega
Cicle de vida da GP - descreve o que deve ser feito para gerenciar o projeto (grupos de processos)
Palavras chaves: iniciação, planejamento, execução, controle, encerramento.
10 - CARACTERÍSTICAS DO CICLO DE VIDA DE UM PROJETO DE SOFTWARE
- fases geralmente sequenciadas
- custos e uso do pessoal baixos no início, aumentam durante a execução e cai rapidamente no final
- no início do projeto, nível de incerteza e riscos maiores e caem no final
- capacidade dos stakeholders em influênciar no projeto são maiores no início
- mudanças tem maior impacto a medida que a execução do projeto avança
11 - QUEM SÃO OS STAKEHOLDERS
São os interessados no projeto, ou seja, pessoas ou organizações que influênciam
ou são influênciados, positivamente ou negativamente, pelos resultados de um projeto.
12 - QUEM SÃO OS PRINCIPAIS STAKEHOLDERS
Gerente do projeto, cliente, usuário, membros da equipe, patrocinador, fornecedores, PMOs.
13 - QUAIS OS FATORES DE SUCESSO DE UM PROJETO
- seleção dos processos adequados
- uso de abordagem definida
- atendimento aos requisitos do cliente
- balançeamento de interesses entre os vários interessados
14 - FATORES QUE DETERMINAM A NECESSIDADE OU NÃO DE GERENCIAMENTO DE PROJETO
- Tamanho do empreendimento
- Importãncia do empreendimento
- Reputação da organização
- Compartilhamento de recursos
- Não familiaridade - empreendimento completamente novo
15 - TIPOS DE PROCESSOS
- Orientado ao Projeto - Iniciação, planejamento, execução, controle, monitoramento, encerramento.
- Orientado ao Produto - Especificação e criação do produto do projeto.
quarta-feira, 12 de maio de 2010
Formatando datas no ORACLE para importar scripts do IBExpert
Dois parâmetros no ORACLE devem ser configurados:
- nls_date_format
- nls_timestamp_format
A máscara default utilizado pelo IBExpert para formatar as datas é 'YYYY-MM-DD' para o tipo DATE e 'YYYY-MM-DD HH:MI:SS' para o tipo TIMESTAMP. No ORACLE pode-se executar os seguintes comandos para configurar as máscaras:
Para o tipo DATE:
ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD';Para o tipo TIMESTAMP:
ALTER SESSION SET NLS_TIMESTAMP_FORMAT='YYYY-MM-DD HH24:MI:SS';Seguindo estes procedimentos, consegue-se importar registros que contém campos de data e timestamp de forma simples.
Uma observação é quanto ao tipo TIME do Firebird, inexistente no ORACLE. Para este tipo de dados pode-se armazenar como VARCHAR2(8).
Até o próximo post!
sexta-feira, 7 de maio de 2010
Oracle Pipelined Table Functions
http://www.akadia.com/services/ora_pipe_functions.html
http://mail.firebase.com.br/pipermail/lista_firebase.com.br/2008-February/049950.html
quinta-feira, 6 de maio de 2010
Ativar teclas de atalho para o sqlplus no Linux
Recentemente descobri uma software que pode ser instalado, que permite ativar as teclas de atalho para o sqlplus. Para instalar digite o seguinte comando no prompt de comando.
sudo apt-get install rlwrap
Após instalado, precisamos invocar o sqlplus desta forma:
rlwrap sqlplus user/senha
Com isso, teremos um histórico de comandos da mesma forma que em ambiente Windows.
quarta-feira, 5 de maio de 2010
Usando sudo para executar comandos como root no Linux
Para que qualquer usuário possa utiliza-lo é necessário informar ao Linux que o usuário pertence ao grupo sudo. Podemos fazer isso através do usuário root da seguinte forma:
usermod -G sudo agilar
O comando acima adiciona o usuário agilar no grupo sudo. A partir dai, pode-se utilizar sudo toda vez que precisarmos executar um comando com permissões de root para o usuário agilar.
domingo, 7 de março de 2010
Windows Seven com Delphi 7
A pasta SysWOW64 contém as DLLs de 32 bits. Já a pasta C:\Windows\System32 contém arquivos DLLs de 64 bits. Quando um programa necessita de uma DLL de 32 bits, automaticamente é redirecionado para a pasta C:\Windows\SysWOW64. Pode parecer estranho, mas é assim que o Windows funciona. A pasta C:\Windows\System32 ainda continua existindo, mas seu conteúdo é de 64 bits!
2 - Como substituir o QuickReport do Delphi 7 por outra versão.
Antes de instalar a bpl qrpt70.bpl deve-se primeiro excluir o arquivo c:\windows\SysWOW64\qrpt70.dll e reabrir o Delphi.
3 - Mostrar arquivos e pastas ocultas do Windows
No Windows Explorer, clique no botão Organizar, Opções de pasta e pesquisa. Na janela "Opções de Pasta" possui diversos opções para mostrar pastas e arquivos ocultos.
4 - Como acessar a pasta "Arquivos de Programas" no menu Executar.
Digite "program files".
Obs.: Se você digitar "arquivos de programas" como no Windows XP, aparece a mensagem acesso negado.
quarta-feira, 10 de fevereiro de 2010
Transações em PostgreeSQL
segunda-feira, 25 de janeiro de 2010
Usando condições ANY ou SOME
Dado o esquema a seguir:
SQL> desc valores Nome Nulo? Tipo ------------------- -------- --------- V NUMBER(38) SQL> select * from valores; V ---------- 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 18 linhas selecionadas. SQL>
Exemplos de Condições SQL
EXEMPLO 1
SQL> select * from valores
2 where v = some(1, 3, 10);
V
----------
1
3
10
3 linhas selecionadas.
EXEMPLO 2
1 select * from valores
2* where v > some(3, 10, 11)
SQL> /
V
----------
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
15 linhas selecionadas.
EXEMPLO 3
1 select * from valores
2* where v > all(3, 10, 11)
SQL> /
V
----------
12
13
14
15
16
17
18
7 linhas selecionadas.
sexta-feira, 22 de janeiro de 2010
Desafio SQL: Alias em SQL
Considere a seguinte questão:
SQL>
1 select id "Produto ID", sum(preco) "Preco"
2 from estoque
3 where Preco > 50
4 group by "Produto ID"
5* order by sum(preco)
Qual linha causa um erro ?
Analisando a questão, pode-se perceber várias partes que podem dar a entender estar errado. Olhando o SQL, vemos que os campos utilizam-se de alíases, e o campo preco tem um alias semelhante ao nome do campo: "Preco". Isso pode passar despercebido ou confundir, fazendo alguém pensar que a linha 3 está errado, pois o alias está sendo referênciado.
Então a primeira regra que temos que saber: na cláusula WHERE, devemos referênciar o campo e não o alias, senão um erro ocorre.
Na consulta acima, agora não resta dúvida, estamos acessando o campo preco, pois SQL é case insensitive, não importa como escrevemos: preco, Preco, PRECO, PReco, etc. Com isso, podemos concluir também que, se fizermos uma prova para certificação em SQL e aparecer um alias na cláusula WHERE, é certo que há um erro ai.
Para não restar dúvida, segue um SQL de exemplo:
SQL> select codigo "Codigo" from estoque
2 where "Codigo" <> 0;
where "Codigo" <> 0
*
ERRO na linha 2:
ORA-00904: "Codigo": identificador invßlido
Seguindo o exercício da questão, alguns podem dizer que a linha 4 está errado. E de fato, está. A mesma regra do WHERE vale no GROUP BY, na cláusula WHERE e GROUP BY, devemos referênciar o campo e não o alias, senão um erro ocorre.
Segue dois exemplos, o primeiro SQL referenciou um alias no group by e o segundo o próprio campo:
EXEMPLO 1:
SQL>
1 select codigo as num
2 from estoque
3* group by num
SQL> /
group by num
*
ERRO na linha 3:
ORA-00904: "NUM": identificador invßlido
EXEMPLO 2:
SQL>
1 select codigo as num
2 from estoque
3* group by codigo
SQL> /
NUM
-------------
1255
124
126
125
Bom, sabemos que o erro na questão está na linha 4, onde é referênciado o alias "Produto ID". Mas quero mostrar outra regra, que nesta questão não se aplica, mas que devemos saber mesmo assim:
Na cláusula ORDER BY, podemos acessar tanto o campo, como o alias ou um número que indica a posição do campo na cláusula SELECT.
Isso pode confundir muitos, pois porque não podemos acessar o alias no WHERE e no GROUP BY mas podemos acessar no ORDER BY. E ainda, podemos acessar o campo pela sua posição na lista de campos do SELECT.
Isso mesmo, segue vários exemplos que mostram isso na prática:
EXEMPLO 1: SQL> 1 select codigo as num 2 from estoque 3* order by codigo SQL> / NUM ------------- 124 124 124 125 125 125 1255 126 8 linhas selecionadas. EXEMPLO 2: SQL> 1 select codigo as num 2 from estoque 3* order by num SQL> / NUM ------------- 124 124 124 125 125 125 1255 126 8 linhas selecionadas. EXEMPLO 3: SQL> 1 select codigo as num 2 from estoque 3* order by 1 SQL> / NUM ------------- 124 124 124 125 125 125 1255 126 8 linhas selecionadas. SQL>
Então como vemos, o ORDER BY é a cláusula mais flexivel de todas, podemos acessar os campos da consulta de qualquer maneira e vai funcionar. A cláusula ORDER BY tem como finalidade ordenar as tuplas de uma relação, portanto, ela é a última etapa executada e consegue ver a relação pronta, ao contrário das demais cláusulas.
Mais uma vez, espero ter ajudado a comunidade de desenvolvedores, sempre tive muita dúvida a respeito disso, até que resolvi escrever este post e testar de diversas maneiras, vários SQL e terminar de uma vez por todas, estas dúvidas sobre o uso do alias em consultas SQL.
Até o próximo post!