terça-feira, 29 de dezembro de 2009

Oracle Forms for Dummies – Part 2

Iremos comentar a estrutura hierarquica de uma tela de uma aplicação Oracle Forms:

Basicamente, temos a unidade de programa, que nada mais é que um arquivo fmb(código fonte) e/ou fmx (código executável). Este é o primeiro nível da hierarquia

Logo abaixo, temos as Windows (janelas), que como o nome diz, serão as janelas de sua aplicação.

Exemplo da parte superior de uma window padrão do Oracle Forms

Cada window irá conter um ou mais canvas, que são onde os objetos serão posicionados dentro. Lembra da visão do canvas??? É lá onde irão ficar os objetos.

Dentro da aplicação, teremos também os blocos, que geralmente correspondem a uma tabela do seu modelo de dados (nem sempre é uma tabela, irei explicar melhor quando chegar no item Bloco).

Dentro dos blocos, temos os itens, que correspondem a um objeto que geralmente está relacionado a uma coluna do Banco de Dados


Estes itens do bloco, serão posicionados dentro de um canvas, para dar origem a parte visual da sua aplicação


Resumindo:

Uma aplicação pode ter várias Windows

Uma window pode ter vários canvas

Um canvas pode ter vários itens

Um bloco tem vários itens.

segunda-feira, 28 de dezembro de 2009

Oracle Forms for Dummies – Part 1

Bom, escrevo esta série de posts com a intenção de ajudar as pessoas que estão iniciando a utilizar esta ótima ferramenta de desenvolvimento que é o Oracle Forms. O objetivo não é tornar ninguém ‘um Jedi’ na mesma, mas sim dar subsidio para fazer o básico de uma forma mais correta. Para isto iremos tomar por principio a versão 6i (por ser mais simples de instalar e configurar, posteriormente irei explicar as diferenças para a 10g, mas não são muitas não) e o banco Oracle XE.

Começando pelo principio, a tela inicial do Oracle forms é

Ela contem o menu de opções na parte superior, e o object navigator, onde se pode ‘navegar’ por todos os itens que sua aplicação tem ou terá.

Também teremos posteriormente a visão dos canvas, onde se poderá ver os objetos como eles aparecerão para o usuário (não se preocupe, posteriormente irei explicar para que cada componente serve)

Outra tela importante é a Property palette, onde irão ficar as propriedades dos objetos da sua aplicação (não se preocupe, posteriormente irei explicar para que cada propriedade serve)

Bom, a parte dois irá começar a explicar os itens da aplicação. Até.

segunda-feira, 21 de dezembro de 2009

Subtotal por grupo no BIRT

Bem, estava procurando como fazer um subtotal por grupo de um relatório desenvolvido na ferramenta BIRT, mas não encontrava. Então resolvi postar como fazer...

Use a seguinte função:

Total.sum(row["nomeColuna"], null, "nomeGrupo");

quarta-feira, 9 de dezembro de 2009

Exportação de banco de dados Oracle XE

Bom, vou ser bem simples, para exportar um banco de dados, uma das maneiras é usar o comando expdp

Ele vai criar um arquivo expdat.dmp no caminho (Oracle Xe Home)\app\oracle\admin\xe\dpdump\

Caso queira criar o arquivo de dump com outro nome, utilize a opção dumpfile.
Segue abaixo sintaxe simplificada

expdp (user DBA)@(nome banco) dumpfile=(nome do arquivo de dump).dmp

Simples assim...

quinta-feira, 26 de novembro de 2009

Importação de Base de Dados no Banco XE

Muitas pessoas ainda tem dúvida de como importar um dump exportado via data pump, então logo abaixo coloco uma forma rápida para conseguir isso.

1º coloque seu arquivo de dump na pasta (Oracle XE Home)\app\oracle\admin\xe\dpdump\

2º execute o comando abaixo no prompt do seu sistema operacional, trocando os campos em () pelos valores correspondentes
impdp (user DBA)@(nome banco) dumpfile=(nome arquivo de dump a ser importado).dmp logfile=(nome do arquivo de log de importação).log remap_schema=(schema que foi exportado):(schema imp) remap_tablespace=(tablespace que foi exportado):(tablespace que vai ser importado) transform=oid:n:type

3º Aguarde... Pronto, você acaba de fazer uma importação de um banco de dados!




segunda-feira, 26 de outubro de 2009

Obtendo o primeiro dia do mês

Como no oracle existe a função last_day, e não existe uma 'first_day', muitas vezes nos deparamos com códigos para obter o primeiro dia do mês, quando existe o comando trunc que nos dá isso de barbada! Observe:

SQL> select trunc(sysdate,'mm') from dual
2 /

TRUNC(SY
--------
01/10/09

o mesmo vale para o primeiro dia do ano:

SQL> select trunc(sysdate,'rrrr') from dual
2 /

TRUNC(SY
--------
01/01/09

quinta-feira, 15 de outubro de 2009

Manipulação de tabelas de memória

Muitas vezes temos que trabalhar com tabelas de memória para manipular dados. Existem vários tipos de tabela, sendo a mais comumente utilizada a que indexa os registro por um inteiro binário (binary_integer).

Para o uso desta tabela, encontramos um pequeno problema quando temos que deletar um registro qualquer desta tabela, visto que ai, a mesma acaba perdendo a sequencia da indexação... veja o exemplo:

SQL> DECLARE
2 TYPE T_A IS TABLE OF VARCHAR2(10) INDEX BY BINARY_INTEGER;
3 V_A T_A;
4 BEGIN
5 FOR I IN 1..10
6 LOOP
7 V_A(I) := 'A - '||I;
8 END LOOP;
9 V_A.DELETE(3);
10 FOR I IN V_A.FIRST..V_A.LAST
11 LOOP
12 DBMS_OUTPUT.PUT_LINE( V_A(I));
13 END LOOP;
14 END;
15 /
A - 1
A - 2
DECLARE
*
ERRO na linha 1:
ORA-01403: no data found
ORA-06512: at line 12


Neste exemplo, eu criei uma tabela de memória, e inicializei com 10 registros. Logo após, deletei o terceiro registro, para simular, e mandei mostrar os registros constantes na tabela. Note que no momento que o programa chegou no registro faltante, ele deu um erro de no data found.
Sendo assim, mesmo usando a varredura da tabela de memória do first para o last, ele ainda varre todos os indices, inclusive aquele que já foi deletado!!!

Isto pode ser resolvido facilmente, usando a função exists da tabela de memória, como no exemplo abaixo:

SQL> DECLARE
2 TYPE T_A IS TABLE OF VARCHAR2(10) INDEX BY BINARY_INTEGER;
3 V_A T_A;
4 BEGIN
5 FOR I IN 1..10
6 LOOP
7 V_A(I) := 'A - '||I;
8 END LOOP;
9 V_A.DELETE(3);
10 FOR I IN V_A.FIRST..V_A.LAST
11 LOOP
12 IF V_A.EXISTS(I) THEN
13 DBMS_OUTPUT.PUT_LINE( V_A(I));
14 END IF;
15 END LOOP;
16 END;
17 /
A - 1
A - 2
A - 4
A - 5
A - 6
A - 7
A - 8
A - 9
A - 10

Procedimento PL/SQL concluído com sucesso.