Este é um texto off-topic, mas pode ser útil pra algumas pessoas.

Aqui na empresa, prestamos serviço pra vários clientes. Um particularmente, exige que o trabalho seja feito no próprio notebook que eles fornecem. Nesse caso, eu tenho na minha mesa um PC (na esquerda) e um notebook (na direita), este, exclusivamente para uso de um cliente.

O problema é que isso gera uma série de incômodos, por exemplo:

  • Quando conecto na VPN usando o notebook, acabo perdendo a conexão com a internet. Caso eu precise copiar algum script (aqui do site, por exemplo) tenho que desconectar da VPN ou copiar pra um pen-drive, etc.
  • Outro problema é o espaço na mesa. É um pouco desconfortavel usar 2 teclados, 2 mouses. Tem que girar os braços pra um lado ou pra outro (fail), e quase sempre eu me confundo e acabo usando o mouse errado (double fail).


Leia mais…




Neste post, vamos mostrar como utilizar funções analíticas para fazer o rateio de um valor em diversas linhas de uma tabela.

Primeiro, vamos criar a tabela de teste:

CREATE TABLE glufke_teste
(nro_nota  NUMBER, item NUMBER, valor NUMBER);
INSERT INTO glufke_teste VALUES ( 50, 1, 1.45);
INSERT INTO glufke_teste VALUES ( 50, 2, 3.91);
INSERT INTO glufke_teste VALUES ( 50, 3, 5.04);
SQL> SELECT * FROM glufke_teste;

  NRO_NOTA       ITEM      VALOR
---------- ---------- ----------
        50          1       1,45
        50          2       3,91
        50          3       5,04

SQL>

Nosso objetivo é ratear um valor proporcionalmente nessas linhas. Como exemplo prático, vamos distribuir o valor R$ 49,30!
Leia mais…




É comum termos que procurar qual package ou qual procedure de banco que faz INSERT dentro de uma determinada tabela.

Nestes casos, podemos usar a ALL_SOURCE, que contém os códigos de todos programas de banco. Normalmente um select com LIKE resolve o problema:

SELECT * FROM all_source
WHERE UPPER(text) LIKE '%INSERT%TABELA%'

O problema é que nem sempre o código está no padrão, por exemplo, o nome da tabela pode estar no lado ou na próxima linha!

INSERT INTO tabelax...

INSERT 
INTO tabelax...

O mesmo vale pra UPDATES! Ou seja, se o comando INSERT estiver na linha anterior, essa consulta simples não vai retornar o que procuramos!

UPDATE tabelax SET...

UPDATE 
tabelax
SET...


Leia mais…




Este tutorial mostra como instalar o Apex 4.1 no Oracle XE. Aí vai um passo a passo:

1 – Baixar e instalar Oracle XE

Download nesse link: http://www.oracle.com/technetwork/database/express-edition/overview/index.html

Leia mais…




Participei do GUOB TECH DAY 2011 e posso dizer: Foi um evento memorável! Resolvi colocar aqui a opinião de algumas pessoas que participaram! Então, aí vai:

GUOB Tech Day


Leia mais…




Neste artigo irei apresentar um recurso muito bom que existe no Oracle Database desde a versão 9i e chama-se Pipelined Table Function.

Este recurso permite criar funções que retornam dados como se fossem uma tabela virtual, podendo transformar os dados de retorno enquanto eles são produzidos, ou seja, é possível alterar os dados pesquisados em uma tabela, linha por linha, enquanto eles são processados, sem ter que esperar pelo retorno completo do “result set” (conjunto de dados que são retornados pela função).

Este recurso é ótimo para ETL (Extract, Transform, and Load), pois é rápido e consome menos memória que outros métodos que podem ser utilizados para o mesmo objetivo, como por exemplo, preencher um cursor e percorrê-lo para transformar e retornar dados.

Seguem abaixo 3 scripts que demonstram como criar e testar uma Pipelined Table Function. Os scripts utilizam a tabela EMPLOYEES do schema de exemplo HR.

Para iniciar o passo-a-passo dos itens abaixo, é necessário conectar-se previamente no Banco de Dados desejado, através do SQL Plus, com um usuário com privilégios administrativos (usuário contendo a role DBA ou o privilégio de sistema SYSDBA) ou com o usuário HR.

1- Criando a package HR.PKG_TYPES

A package HR.PKG_TYPES contém os tipos de dados que são criados para retornarem uma tabela virtual na função que será criada no próximo passo:

create or replace package HR.PKG_TYPES as
  TYPE TABLEEMPTYPE IS TABLE OF EMPLOYEES%ROWTYPE;
  TYPE ROWEMPTYPE IS RECORD(
          EMPLOYEE_ID    EMPLOYEES.EMPLOYEE_ID%TYPE,
          FIRST_NAME     EMPLOYEES.FIRST_NAME%TYPE,
          LAST_NAME      EMPLOYEES.LAST_NAME%TYPE,
          EMAIL          EMPLOYEES.EMAIL%TYPE,
          PHONE          EMPLOYEES.PHONE_NUMBER%TYPE,
          HIRE_DATE      EMPLOYEES.HIRE_DATE%TYPE,
          JOB_ID         EMPLOYEES.JOB_ID%TYPE,
          SALARY         EMPLOYEES.SALARY%TYPE,
          COMMISSION_PCT EMPLOYEES.COMMISSION_PCT%TYPE,
          MANAGER_ID     EMPLOYEES.MANAGER_ID%TYPE,
          DEPARTMENT_ID  EMPLOYEES.DEPARTMENT_ID%TYPE
         );
END;
/


Leia mais…




O site glufke.net possui alguns livros que estão no acervo e vão ser sorteados para os seguidores do twitter!

Estes serão os livros sorteados:

SORTEIO ENCERRADO – LISTA DOS GANHADORES
Dia 13/08/2010 – Guia Novatec – Oracle 10g SQL – GANHADOR: @garcia_joao
Dia 20/08/2010 – Guia Novatec – Cascading Style Sheets – GANHADOR: @marcelo_hugo
Dia 27/08/2010 – Guia Novatec – Java 2 – GANHADOR: @stefandeckert
Dia 03/09/2010 – Guia Novatec – JavaServer Pages – GANHADOR: @jeroqueiroz
Dia 10/09/2010 – Livro Programação de Jogos com C++ e DirectX – GANHADOR: @anitokj

Como Participar?

1. Para concorrer você deve seguir no twitter o @glufke

2. Enviar a seguinte mensagem:

Quero participar do sorteio de livros de oracle, java, etc do @glufke – http://bit.ly/cMIzSV

3. Aguardar o sorteio nos dias acima ao MEIO DIA!

Normas

1. O Sorteio se dará de forma aleatória para todos que estão seguindo @glufke e deram RT na mensagem.
2. O vencedor será contatado via twitter e será solicitado o endereço para enviar o livro.
3. O envio do livro será pago pelo GLUFKE.NET via encomenda registrada

Qualquer dúvida, envie para o twitter @glufke

BOA SORTE E BONS ESTUDOS




Este artigo demonstra como criar Concurrents no Oracle EBS com saída para Microsoft Excel. Aí vai um passo a passo:

1 – Adicionar o tipo de saída Microsoft Excel

Na responsabilidade Administrador de Sistema você deve acessar o caminho abaixo:
Instalar -> Idiomas
Insira um registro com estes valores:
Formato do Arquivo = Text
Tipo de Mime = application/vnd.ms-excel
Descrição = Microsoft Excel

Leia mais…




A maioria das pessoas tem essas perguntas sobre Index Partition:

  • O que é um Local Index?
  • O que é um Global Index?
  • Quando você forçaria a criação de um Global Index em uma partition table?
  • Quando você recomendaria criar um Global Index em vez de um Local Index?

Para responder a essas perguntas….

1. O que é um Local Index?

Local Indexes particionados são mais fáceis de gerenciar, cada partição do Local Index está associado a uma partição. Eles também oferecem maior disponibilidade e são comuns em ambientes de DSS. Quando tomamos qualquer ação (MERGE, SPLIT,EXCHANGE etc) em um Local Index, isso impacta apenas aquela partição e as outras estarão disponíveis. Nós não podemos adicionar explicitamente um Local Index para uma nova partição. O Local Index será adicionado implicitamente a nova partição, quando for criada uma nova partição na tabela. Da mesma forma, não podemos dropar o índice local em uma partição específica. Ele pode ser dropado automaticamente quando nós dropamos a partição da tabela subjacente. Local Indexes podem ser UNIQUE quando a chave da partição é parte do índice composto. Unique Local Indexes são úteis para o ambiente OLTP. Podemos também criar bitmap indexes em tabelas, com a restrição de que os índices de bitmap deve ser local para a tabela particionada. Eles não podem ser Global Indexes.

SQL> CREATE TABLE employees
2 (employee_id NUMBER(4) NOT NULL,
3 last_name VARCHAR2(10),
4 department_id NUMBER(2))
5 PARTITION BY RANGE (department_id)
6 (PARTITION employees_part1 VALUES LESS THAN (10) TABLESPACE ODS_STAGE_DATA,
7 PARTITION employees_part2 VALUES LESS THAN (20) TABLESPACE ODS_STAGE_DATA,
8 PARTITION employees_part3 VALUES LESS THAN (30) TABLESPACE ODS_STAGE_DATA);

Table created.

SQL> declare
2 v_no number :=1;
3 begin
4 delete employees;
5 for i in 1..10 loop
6 insert into employees values(v_no,'name...',v_no);
7 v_no := v_no+1;
8 end loop;
9 end;
10 /

PL/SQL procedure successfully completed.

SQL>
SQL> create index idx_local on employees(last_name) local;

Index created.

SQL>


Leia mais…




Iniciando a categoria “Fun-Stuff”, trazemos a você a revelação do ano: Larry Ellison é o Ironman.

Você pensou que o Iron Man era mesmo o bilionário industrial Tony Stark, temos provas de que isso é apenas um apelido mal disfarçado do magnata bilionário da Oracle, Larry Ellison. A prova:

Larry Ellison – Oracle:

Tony Stark – Ironman

Tony Stark tem o ROSTO do Larry, a VOZ do Larry, os CARROS do Larry, o DINHEIRO de Larry e os AVIÕES também. Pra completar a lista de evidências, temos a Oracle como um dos principais patrocinadores do filme:

Está comprovado!