Guia de Consulta Rápida Oracle
PL/SQL Web Toolkit
Desenvolvido por Fernando Boaglio
1. Introdução
Este guia está voltado aos desenvolvedores de aplicações web usando base de dados Oracle. Um
conhecimento de PL/SQL é necessário para o uso desse guia, e o conhecimento de HTML,
apesar de não ser necessário, é sugerido.
1.1 O que é Oracle PL/SQL web toolkit?
O PL/SQL web toolkit é um conjunto de rotinas utilizadas pelo Oracle para gerarem a saída de
suas rotinas em HTML.
Essas rotinas são utilizadas pelos servidores de aplicação para gerarem a interface do usuário em
HTML. O desenvolvedor cria a rotina em PL/SQL que grava no banco de dados e depois
configura o servidor de aplicação para acessar a base de dados. O último passo é apontar o web
browser (Internet Explorer ou Netscape) para esse servidor de aplicação para acessar a
aplicação. Uma solução extremamente leve, rápida, eficaz e fácil de implementar.
1.2 Por que web?
Já foi a época onde a arquitetura cliente-servidor era a melhor solução, onde existia um servidor
de dados e as máquinas cliente. Conforme as novas versões do software foram sendo lançadas
no mercado, mais hardware era exigido das máquinas cliente. Em pouco tempo as máquinas de
32Mb de memória ficaram obsoletas e exigindo assim um novo gasto em upgrade para as
empresas.
A web viabilizou a solução para esse problema, pois além de ser barata e de alcance mundial, ela
utiliza a solução de três camadas: um servidor de dados, um servidor de aplicação e as máquinas
cliente. Nessa arquitetura a aplicação não roda na máquina cliente, ela roda num servidor de
aplicação, deixando para a máquina cliente apenas a saída, o layout da aplicação, viabilizando o
uso de máquinas cliente consideradas até então obsoletas.
1.3 Por que PL/SQL?
A idéia principal consiste em poupar os desenvolvedores de PL/SQL de aprenderem novas
tecnologias web, simplesmente aprendendo novas rotinas de uma linguagem que já dominam.
Essas rotinas, assim como as demais rotinas PL/SQL do Oracle, ficam armazenadas na própria
base de dados, onde para a sua programação, o desenvolvedor pode usar as ferramentas de
desenvolvimento da Oracle (SQL*Plus ou Procedure Builder) ou utilizar outras ferramentas do
mercado, como PL/SQL Developer, TOAD ou SQL Navigator.
1.4 Por que Oracle?
Em se tratando de banco de dados não há dúvida que o líder no mercado é a Oracle. Qualquer
solução em PL/SQL Web desenvolvida no mercado será bem-vinda e bem remunerada.

2. Instalação
Para usar o toolkit presente em vários produtos da Oracle, é necessária a configuração de um
ambiente de desenvolvimento apropriado. Portanto vou assumir que existe um usuário do banco
de dados Oracle chamado web, com a senha oracle e num banco de dados chamado ora8i. Vou
assumir também que foi feita a instalação padrão dos produtos, cabendo a nos somente alterar
suas configurações e desenvolvermos a nossa aplicação. A instalação dos produtos não será
comentada aqui, e sim sua configuração. Para informações de instalação, consulte o site da
Oracle ou a documentação presente na mídia do produto.
Abaixo seguem as instruções de configuração de diferentes servidores web da Oracle. Os nomes
podem variar conforme o seu ambiente, mas os passos são os mesmos.
2.1 Instale no Oracle 9iAS Portal
Esta é a tela inicial do Oracle 9iAS, que é baseado no Apache. Para prosseguir, clique no
"mod_plsql":
Em seguida, clique no "Gateway Database Access Descriptor Settings":

Em seguida, adicione uma configuração clicando no "Add Default (blank configuration)":


Agora preencha somente os campos especificados, os restantes não precisam ser alterados:
Database Access Descriptor Name
aplicacao
Schema Name
web
Oracle User Name
web
Oracle Password
oracle
Oracle Connect String
ora8i
Depois clique no botão "Ok". Agora faça o teste:
http://seu_servidor_web/pls/aplicacao/owa_util.signature
Deverá aparecer algo parecido com a tela abaixo. De agora em diante utilize essa URL para a
execução das rotinas descritas nesse guia.
Se após todas as configurações alteradas ainda não funcionar, procure refazer tudo passo a passo
ou então verifique se a instalação do produto foi bem sucedida, verifique se ele conecta à base de
dados ou se existe algum problema de configuração de rede.
2.2 Instale no Apache
A solução que estarei apresentando agora é ideal para instalações em máquinas de pequeno porte
ou máquinas caseiras com Windows 9x e Personal Oracle 8i.
A primeira coisa a fazer é baixar o Apache para windows, encontrado no site:
http://httpd.apache.org, e os binários em http://www.apache.org/dist/httpd/binaries/win32/.
A minha sugestão é baixar a versão 1.3.22 ou algo parecido, só não baixe a 2 porque ela ainda é
beta .
Depois de instalar o Apache em sua máquina, será necessária a instalação do módulo pl_sql que
habilita o acesso do apache ao Oracle executando as rotinas no banco de dados e gerando
HTML.
Baixe o módulo desse endereço:
http://www.sharemation.com/~dmcmahon/modowa.htm
Procure no diretório que foi instalado o apache um arquivo chamado httpd.conf, abra-o com o
bloco de notas e adicione no final dele as seguintes linhas:
# para o Oracle
LoadModule owa_module modules/ApacheModuleOwa.dll
<Location /aplicacao>
AllowOverride None
Options None
SetHandler owa_handler
OwaUserid web/oracle
OwaNLS WE8ISO8859P1
OwaAuth OWA_INIT
OwaDiag COMMAND ARGS CGIENV POOL SQL MEMORY
OwaLog "logs/oracle.log"
OwaPool 20
OwaUploadMax 10M
OwaCharset "iso-8859-1"
order deny,allow
allow from all
</Location>
Depois disso certifique-se que o banco de dados local ao Apache é o web. Para isso adicione a
variável LOCAL dentro de HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE pelo regedit.
Ela deverá ser do tipo string e de valor web.
Copie o arquivo ApacheModuleOwa.dll para o diretório de módulos do Apache (normalmente
C:\Arquivos de Programas\Apache Group\Apache\modules ). Desative o serviço do Apache se
ele estiver no ar ( após a primeira instalação ele automaticamente põe o serviço no ar).
Agora coloque o serviço do Apache no ar e tente acessar o endereço:

http://seu_servidor_web/pls/aplicacao/owa_util.signature
Deverá aparecer algo parecido com a tela abaixo. De agora em diante utilize essa URL para a
execução das rotinas descritas nesse guia.
Se após todas as configurações alteradas ainda não funcionar, procure refazer tudo passo a passo
ou então verifique se a instalação do produto foi bem sucedida, verifique se o banco de dados
está no ar ou se existe algum problema de configuração de rede.
3. Rotinas
3.1 HTP
htp.address
Gera as tags <ADDRESS> e </ADDRESS> que especificam o endereço, autor e assinatura de
um documento.
htp.address (
cvalue in varchar2
cnowrap in varchar2 DEFAULT NULL
cclear in varchar2 DEFAULT NULL
cattributes in varchar2 DEFAULT NULL);
htf.address (cvalue, cnowrap, cclear, cattributes) return varchar2;
Parâmetro
Descrição
cvalue
String que fica entre as tags <ADDRESS> e </ADDRESS>.
cnowrap
Se o seu valor não for NULL, NOWRAP será incluído na tag. Com essa tag NOWRAP o texto será exibido em
uma única linha, mesmo que para isso ele crie uma barra de rolagem na horizontal.
cclear
O valor para o atributo CLEAR, configura o alinhamento LEFT, RIGHT ou ALL que limpará as margens antes de
exibir o texto.
cattributes
Outros atributos quaisquer, normalmente os de JAVASCRIPT.
Resultado
<ADDRESS CLEAR="cclear" NOWRAP cattributes>cvalue</ADDRESS>
htp.anchor, htp.anchor2
Gera as tags <A> e </A> que especificam o destino de um link. Esta tag aceita vários atributos,
mas HREF ou NAME são obrigatórios. HREF especifica o destino do link e NAME permite que
essa tag seja o destino de outro link.
A diferença entre htp.anchor e htp.anchor2 e que o segundo tem um parâmetro a mais, que
especifica o alvo (TARGET) para ser usado com frames.
htp.anchor (
curl in varchar2
ctext in varchar2
cname in varchar2 DEFAULT NULL
cattributes in varchar2 DEFAULT NULL);
htf.anchor (curl, ctext, cname, cattributes) return varchar2;
htp.anchor2 (
curl in varchar2
ctex t in varchar2
cname in varchar2 DEFAULT NULL
ctarget in varchar2 DEFAULT NULL
cattributes in varchar2 DEFAULT NULL);
htf.anchor2 (curl, ctext, cname, ctarget, cattributes) return varchar2;
Parâmetro
Descrição
curl
É o valor do atributo HREF, onde é especificado o destino do link, como o endereço de uma página, um arquivo
para download ou um email.
ctext
É a string que fica entre as tags <A> e </A>, que especifica o texto que será clicado. Pode ser usado em
conjunto com a função htf.img para criar um link de uma imagem
cname
É o valor do atributo NAME, utilizado para referenciar o valor do campo em rotinas Javascript.
ctarget
É o valor do atributo TARGET, utilizado em links juntamente com frames, onde ctarget deve referenciar o nome
do frame.
cattributes
Outros atributos quaisquer, normalmente os de JAVASCRIPT.
Resultado
<A HREF="curl" NAME="cname" cattributes>ctext</A>
<A HREF="curl" NAME="cname" TARGET = "ctarget" cattributes>ctext</A>
htp.appletopen, htp.appletclose
A rotina htp.appletopen gera a tag <APPLET> que abre chamada de applet Java. Para fechar
essa chamada é usada a rotina htp.appletclose, que gera a tag </APPLET>.
Você poderá especificar parâmetros ao applet Java usando a rotina htp.param. Para o
funcionamento correto do applet, deverá ser especificado o seu local de origem, especificado
pelo atributo CODEBASE dentro da tag <APPLET> (exemplo CODEBASE="/classes/" ).
htp.appletopen(
ccode in varchar2
cheight in number
cwidth in number
cattributes in varchar2 DEFAULT NULL);
htf.appletopen(ccode, cheight, cwidth, cattributes) return varchar2;
htp.appletclose;
htf.appletclose return varchar2;
Parâmetro
Descrição
ccode
É o valor do atributo CODE, onde é especificado o nome da classe do applet
cheight
É o valor do atributo HEIGHT, onde é especificado o altura da janela na qual o browser apresentará o applet
cwidth
É o valor do atributo WIDTH, onde é especificado a largura da janela na qual o browser apresentará o applet
cattributes
Outros atributos quaisquer
Resultado
<APPLET CODE=ccode HEIGHT=cheight WIDTH=cwidth cattributes>
</APPLET>
htp.area
Gera a tag <AREA> que define a imagem mapeada e seus destinos (links) no browser. Deve ser
utilizada juntamente com as rotinas htp.mapopen e htp.mapclose. Pode ser usada em conjunto
com os frames.
htp.area(
ccoords in varchar2
cshape in varchar2 DEFAULT NULL
chref in varchar2 DEFAULT NULL
cnohref in varchar2 DEFAULT NULL
ctarget in varchar2 DEFAULT NULL
cattributes in varchar2 DEFAULT NULL);
htf.area(ccoords, cshape, chref, cnohref, ctarget, cattributes) return varchar2;
Parâmetro
Descrição
ccoords
É o valor do atributo COORD, que representa as coordenadas da imagem mapeada
cshape
É o valor do atributo SHAPE, que define o tipo de polígono que será mapeado (ex: rect , circle)
chref
É o valor do atributo HREF, que define o link para qual a área referenciada aponta
cnohref
Se esse valor for não NULO, é adicionado o atributo NOHREF, que não define nenhum link para a área
ctarget
É o valor do atributo TARGET, que define o frame no qual a página apontada pelo link vai ser exibida
cattributes
Outros atributos quaisquer
Resultado
<AREA COORDS="ccoords" SHAPE="cshape" HREF="chref" NOHREF TARGET="ctarget" cattributes>
htp.base
Gera a tag <BASE> que define a URL atual como a URL padrão para qualquer link na mesma
página. Também é usado em conjunto com os frames, para definir um frame padrão para
qualquer link da página.
htp.base(
ctarget in varchar2 DEFAULT NULL
cattributes in varchar2 DEFAULT NULL);
htf.base(ctarget, cattributes) return varchar2;
Parâmetro
Descrição
ctarget
É o valor do atributo TARGET, que define o nome do frame padrão
cattributes
Outros atributos quaisquer
Resultado
<BASE HREF="<current URL>" TARGET="ctarget" cattributes>
htp.basefont
Gera a tag <BASEFONT> que define o tamanho de uma fonte padrão para todos os textos da
página.
htp.basefont(nsize in integer);
htf.basefont(nsize) return varchar2;
Parâmetro
Descrição
nsize
É o valor do atributo SIZE, que define o tamanho padrão de fonte
Resultado
<BASEFONT SIZE="nsize">
htp.bgsound
Gera a tag <BGSOUND> que faz tocar uma música a partir de um arquivo (normalmente .MID).
htp.bgsound(
csrc in varchar2
cloop in varchar2 DEFAULT NULL
cattributes in varchar2 DEFAULT NULL);
htf.bgsound(csrc, cloop, cattributes) return varchar2;
Parâmetro
Descrição
csrc
É o valor do atributo SRC, que define a localização do arquivo de música
cloop
É o valor do atributo LOOP, que define quantas vezes a música será repetida
cattributes
Outros atributos quaisquer
Resultado
<BGSOUND SRC="csrc" LOOP="cloop" cattributes>
htp.big
Gera as tags <BIG> e </BIG> que exibem um texto com uma fonte maior.
htp.big(
ctext in varchar2
cattributes in varchar2 DEFAULT NULL);
htf.big(ctext, cattributes) return varchar2;
Parâmetro
Descrição
ctext
Define o texto que será exibido com uma fonte maior
cattributes
Outros atributos quaisquer
Resultado
<BIG cattributes>ctext</BIG>
htp.blockquoteOpen, htp.blockquoteClose
Gera as tags <BLOCKQUOTE> e </BLOCKQUOTE> que exibem um texto destacado com
uma margem à esquerda e à direita.
htp.blockquoteOpen (
cnowrap in varchar2 DEFAULT NULL
cclear in varchar2 DEFAULT NULL
cattributes in varchar2 DEFAULT NULL);
htf.blockquoteOpen (cnowrap, cclear, cattributes) return varchar2;
htp.blockquoteClose;
htf.blockquoteClose return varchar2;
Parâmetro
Descrição
cnowarp
Se o seu valor não for NULL, NOWRAP será incluído na tag. Com essa tag NOWRAP o texto será exibido em
uma única linha, mesmo que para isso ele crie uma barra de rolagem na horizontal
cclear
O valor para o atributo CLEAR, configura o alinhamento LEFT, RIGHT ou ALL que limpará as margens antes de
exibir o texto
cattributes
Outros atributos quaisquer
Resultado
<BLOCKQUOTE CLEAR="cclear" NOWRAP cattributes>
</BLOCKQUOTE>
htp.bodyOpen, htp.bodyClose
Gera as tags <BODY> e </BODY> que definem o corpo de uma página HTML.
htp.bodyOpen(
cbackground in varchar2 DEFAULT NULL
cattributes in varchar2 DEFAULT NULL);
htf.bodyOpen(cbackground, cattributes) return varchar2;
htp.bodyClose;
htf.bodyClose return varchar2;
Parâmetro
Descrição
cbackground
Especifica o arquivo de imagem será usado no fundo da página
cattributes
Outros atributos quaisquer
Resultado
<BODY background="cbackground" cattributes>
</BODY>
htp.bold
Gera as tags <B> e </B> que exibe algum texto específico em BOLD.
htp.bold (
ctext in varchar2
cattributes in varchar2 DEFAULT NULL);
htf.bold (ctext, cattributes) return varchar2;
Parâmetro
Descrição
ctext
Especifica o texto que será exibido em BOLD
cattributes
Outros atributos quaisquer
Resultado
<B cattributes>ctext</B>
htp.center
Gera as tags <CENTER> e </CENTER> que exibe algum texto específico centralizado.
htp.center(ctext in varchar2);
htf.center(ctext in varchar2) return varchar2;
Parâmetro
Descrição
ctext
Especifica o texto que será exibido em BOLD
Resultado
<CENTER>ctext</CENTER>
htp.centerOpen, htp.centerClose
As rotinas htp.centerOpen e htp.centerClose gera, respectivamente, as tags <CENTER> e
</CENTER> que exibe algum texto específico centralizado.
htp.centerOpen;
htf.centerOpen return varchar2;
htp.centerClose;
htf.centerClose return varchar2;
Resultado
<CENTER>
</CENTER>
htp.cite
Gera as tags <CITE> e </CITE> que exibe algum texto específico como uma citação.
htp.cite (
ctext in varchar2
cattributes in varchar2 DEFAULT NULL);
htf.cite (ctext, cattributes) return varchar2;
Parâmetro
Descrição
ctext
Especifica o texto que será exibido como citação
cattributes
Outros atributos quaisquer
Resultado
<CITE cattributes>ctext</CITE>
htp.code
Gera as tags <CODE> e </CODE> que exibe algum texto específico com uma fonte monospace
(cada letra da fonte tem sempre o mesmo tamanho).
htp.code (
ctext in varchar2
cattributes in varchar2 DEFAULT NULL);
htf.code (ctext, cattributes) return varchar2;
Parâmetro
Descrição
ctext
Especifica o texto que será exibido com uma fonte monospace
cattributes
Outros atributos quaisquer
Resultado
<CODE cattributes>ctext</CODE>
htp.comment
Gera as tags de comentário do HTML.
htp.comment (ctext in varchar2);
htf.comment (ctext in varchar2) return varchar2;
Parâmetro
Descrição
ctext
Especifica o texto que será exibido com uma fonte monospace
Resultado
<!-- ctext -->
htp.dfn
Gera as tags <DFN> e </DFN> que exibem algum texto específico em itálico.
htp.dfn(ctext in varchar2);
htf.dfn(ctext in varchar2) return varchar2;
Parâmetro
Descrição
ctext
Especifica o texto que será exibido em itálico
Resultado
<DFN>ctext</DFN>
htp.dirlistOpen, htp.dirlistClose
Gera as tags <DIR> e </DIR> que exibem os textos como uma lista de diretórios. Essa rotina
deve ser usada juntamente com htp.listitem .
htp.dirlistOpen;
htf.dirlistOpen return varchar2;
htp.dirlistClose;
htf.dirlistClose return varchar2;
Resultado
<DIR>
</DIR>
htp.div
Gera as tags <DIV> e </DIV> que faz a divisão das páginas HTML.
htp.div(
calign in varchar2 DEFAULT NULL
cattributes in varchar2 DEFAULT NULL);
htf.div(calign, cattributes) return varchar2;
Parâmetro
Descrição
calign
Especifica o atributo ALIGN que faz o alinhamento do texto (Ex: CENTER,LEFT,RIGHT)
cattributes
Outros atributos quaisquer
Resultado
<DIV ALIGN="calign" cattributes>
htp.dlistOpen, htp.dlistClose
Gera as tags <DL> e </DL> que cria uma lista de definições no HTML, deixando o layout
parecido com um glossário. Essa rotina deve ser usada juntamente com htp.dlistTerm e
htp.dlistDef.
htp.dlistOpen (
cclear in varchar2 DEFAULT NULL
cattributes in varchar2 DEFAULT NULL);
htf.dlistOpen (cclear, cattributes) return varchar2;
htp.dlistClose;
htf.dlistClose return varchar2;
Parâmetro
Descrição
cclear
O valor para o atributo CLEAR, configura o alinhamento LEFT, RIGHT ou ALL que limpará as margens antes de
exibir o texto
cattributes
Outros atributos quaisquer
Resultado
<DL CLEAR="cclear" cattributes>
</DL>
htp.dlistDef
Gera as tags <DD> e </DD> que cria a definição de uma lista de definições no HTML. Essa
rotina deve ser usada juntamente com htp.dlistOpen , htp.dlistClose e htp.dlistTerm.
htp.dlistDef(
ctext in varchar2 DEFAULT NULL
cclear in varchar2 DEFAULT NULL
cattributes in varchar2 DEFAULT NULL);
htf.dlistDef(ctext, cclear, cattributes) return varchar2;
Parâmetro
Descrição
ctext
Especifica o texto que será exibido com uma definição
cclear
O valor para o atributo CLEAR, configura o alinhamento LEFT, RIGHT ou ALL que limpará as margens antes de
exibir o texto
cattributes
Outros atributos quaisquer
Resultado
<DD CLEAR="cclear" cattributes>ctext
htp.dlistTerm
Gera as tags <DT> e </DT> que cria um termo de uma lista de definições no HTML. Essa rotina
deve ser usada juntamente com htp.dlistOpen , htp.dlistClose e htp.dlistDef.
htp.dlistTerm (
ctext in varchar2 DEFAULT NULL
cclear in varchar2 DEFAULT NULL
cattributes in varchar2 DEFAULT NULL);
htf.dlistTerm (ctext, cclear, cattributes) return varchar2;
Parâmetro
Descrição
ctext
Especifica o texto que será exibido com uma definição
cclear
O valor para o atributo CLEAR, configura o alinhamento LEFT, RIGHT ou ALL que limpará as margens antes de
exibir o texto
cattributes
Outros atributos quaisquer
Resultado
<DT CLEAR="cclear" cattributes>ctext
htp.download_file
Faz o download de arquivos da base de dados.
htp.download_file(sFileName in varchar2)
htp.download_file(bCompress in boolean DEFAULT FALSE);
Parâmetro
Descrição
sFilename
Nome do arquivo para ser baixado
bCompress
Especifica se o arquivo é comprimido ou não (TRUE ou FALSE)
Resultado
O arquivo baixado.
htp.get_download_files_list
Faz a leitura dos arquivos disponíveis para download da base de dados.
htp.get_download_files_list(sFileName out varchar2)
htp.get_download_files_list(bCompress out binary_integer);
Parâmetro
Descrição
Sfileslist
Retorna a lista de arquivos para download
nCompress
Especifica se o arquivo é comprimido ou não
Resultado
A lista de arquivos para download.
htp.emphasis, htp.em
Gera as tags <EM> e </EM> que exibem um texto específico numa maneira enfatizada.
htp.em (
ctext in varchar2
cattributes in varchar2 DEFAULT NULL);
htf.em (ctext, cattributes) return varchar2;
htp.emphasis (
ctext in varchar2
cattributes in varchar2 DEFAULT NULL);
htf.emphasis (ctext, cattributes) return varchar2;
Parâmetro
Descrição
ctext
Especifica o texto a ser enfatizado
cattributes
Outros atributos quaisquer
Resultado
<EM cattributes>ctext</EM>
htp.escape_sc
Substitui os caracteres especiais do HTML pelos respectivos códigos (exemplos: & é
representado por &, " é representado por " ) em um texto específico.
htf.escape_sc(ctext in varchar2) return varchar2;
htp.escape_sc(ctext in varchar2);
Parâmetro
Descrição
ctext
Especifica o texto a ser convertido
Resultado
O texto convertido.
htf.escape_url
Substitui os caracteres especiais do HTML numa URL pelos respectivos códigos (exemplo: & é
representado por &, % é representado por %25 ) em uma URL específica.
htf.escape_url(p_url in varchar2) return varchar2;
Parâmetro
Descrição
p_url
Especifica a URL a ser convertida
Resultado
A URL convertida.
htp.fontOpen, htp.fontClose
Gera as tags <FONT> e </FONT> que especificam o tipo, o tamanho e a cor de algum texto
específico.
htp.fontOpen(
ccolor in varchar2 DEFAULT NULL
cface in varchar2 DEFAULT NULL
csize in varchar2 DEFAULT NULL
cattributes in varchar2 DEFAULT NULL);
htf.fontOpen(ccolor, cface, csize, cattributes) return varchar2;
htp.fontClose;
htf.fontClose return varchar2;
Parâmetro
Descrição
ccolor
Especifica a cor da fonte
cface
Especifica o tipo de fonte
csize
Especifica o tamanho da fonte
cattributes
Outros atributos quaisquer
Resultado
<FONT COLOR="ccolor" FACE="cface" SIZE="csize" cattributes>
</FONT>
htf.format_cell
Formata os valores numéricos das colunas dentro de uma tabela HTML.
htf.format_cell (
columnValue in varchar2
format_numbers in varchar2 DEFAULT NULL) return varchar2;
Parâmetro
Descrição
columnValue O valor numérico a ser formatado
format_numbersSe for diferente de NULL a rotina irá formatar o valor numérico especificado
Resultado
<TD >columnValue</TD>
htp.formCheckbox
Cria um checkbox dentro de um formulário HTML.
htp.formCheckbox (
cname in varchar2
cvalue in varchar2 DEFAULT 'on'
cchecked in varchar2 DEFAULT NULL
cattributes in varchar2 DEFAULT NULL);
htf.formCheckbox (cname, cvalue, cchecked, cattributes) return varchar2;
Parâmetro
Descrição
cname
Define o nome do campo, que será o nome do parâmetro da procedure definida em htp.formOpen
cvalue
Define o valor que será passado como parâmetro ao formulário
cchecked
Se for não nulo, a opção aparecerá selecionada
cattributes
Outros atributos quaisquer
Resultado
<INPUT TYPE="checkbox" NAME="cname" VALUE="cvalue" CHECKED cattributes>
htp.formOpen, htp.formClose
Cria um formulário HTML através das tags <FORM> e </FORM>.
htp.formOpen (
curl in varchar2
cmethod in varchar2 DEFAULT 'POST'
ctarget in varchar2
cenctype in varchar2 DEFAULT NULL
cattributes in varchar2 DEFAULT NULL);
htf.formOpen (curl, cmethod, ctarget, cenctype, cattributes) return varchar2;
htp.formClose;
htf.formClose return varchar2;
Parâmetro
Descrição
curl
O nome da procedure a ser chamada
cmethod
Especifica o método de envio das informações: POST (padrão) ou GET
ctarget
Outros atributos quaisquer
cenctype
Especifica o método de encriptação das informações enviadas
cattributes
Outros atributos quaisquer
Resultado
<FORM ACTION="curl" METHOD="cmethod" TARGET="ctarget" ENCTYPE="cenctype" cattributes>
</FORM>
htp.formHidden
Cria um HIDDEN dentro de um formulário HTML, que permite a passagem de valores sem a
entrada de dados do usuário.
htp.formHidden (
cname in varchar2
cvalue in varchar2 DEFAULT NULL
cattributes in varchar2 DEFAULT NULL);
htf.formHidden (cname, cvalue, cattributes) return varchar2;
Parâmetro
Descrição
cname
Define o nome do campo, que será o nome do parâmetro da procedure definida em htp.formOpen
cvalue
Define o valor que será passado como parâmetro ao formulário
cattributes
Outros atributos quaisquer
Resultado
<INPUT TYPE="hidden" NAME="cname" VALUE="cvalue" cattributes>
htp.formImage
Formata uma imagem para ser utilizada como um botão de submit, onde a imagem é clicada e o
formulário é chamado.
htp.formImage (
cname in varchar2
csrc in varchar2
calign in varchar2 DEFAULT NULL
cattributes in varchar2 DEFAULT NULL);
htf.formImage (cname, csrc, calign, cattributes) return varchar2;
Parâmetro
Descrição
cname
Define o nome do campo, que será o nome do parâmetro da procedure definida em htp.formOpen
csrc
Define o caminho da imagem exibida
calign
Define o alinhamento do texto exibido ao lado da imagem
cattributes
Outros atributos quaisquer
Resultado
<INPUT TYPE="image" NAME="cname" SRC="csrc" ALIGN="calign" cattributes>
htp.formPassword
Cria um PASSWORD dentro de um formulário HTML, que permite a entrada de valores através
de um campo sem visualizar o que se digita.É normalmente utilizado para se digitar senhas.
htp.formPassword (
cname in varchar2
csize in varchar2
cmaxlength in varchar2 DEFAULT NULL
cvalue in varchar2 DEFAULT NULL
cattributes in varchar2 DEFAULT NULL);
htf.formPassword (cname, csize, cmaxlength, cvalue, cattributes) return varchar2;
Parâmetro
Descrição
cname
Define o nome do campo, que será o nome do parâmetro da procedure definida em htp.formOpen
csize
Define o tamanho do campo em caracteres
cmaxlength
Define o tamanho máximo do campo em caracteres
cvalue
Define o valor que será passado como parâmetro ao formulário
cattributes
Outros atributos quaisquer
Resultado
<INPUT TYPE="password" NAME="cname" SIZE="csize" MAXLENGTH="cmaxlength" VALUE="cvalue"
cattributes>
htp.formRadio
Cria um RADIO dentro de um formulário HTML, que permite a entrada de valores através de
um campo radio button.
htp.formRadio (
cname in varchar2
cvalue in varchar2
cchecked in varchar2 DEFAULT NULL
cattributes in varchar2 DEFAULT NULL);
htf.formRadio (cname, cvalue, cchecked, cattributes) return varchar2;
Parâmetro
Descrição
cname
Define o nome do campo, que será o nome do parâmetro da procedure definida em htp.formOpen
cvalue
Define o valor que será passado como parâmetro ao formulário
cchecked
Se for não nulo, a opção aparecerá selecionada
cattributes
Outros atributos quaisquer
Resultado
<INPUT TYPE="radio" NAME="cname" VALUE="cvalue" CHECKED cattributes>
htp.formReset
Cria um RESET dentro de um formulário HTML, que desfaz qualquer alteração ao valores
padrão do formulário.
htp.formReset (
cvalue in varchar2 DEFAULT 'Reset'
cattributes in varchar2 DEFAULT NULL);
htf.formReset (cvalue, cattributes) return varchar2;
Parâmetro
Descrição
cvalue
Define o valor que será passado como parâmetro ao formulário
cattributes
Outros atributos quaisquer
Resultado
<INPUT TYPE="reset" VALUE="cvalue" cattributes>
htp.formSelectOpen, htp.formSelectClose
Cria uma lista de SELECT dentro de um formulário HTML. Deve ser usado com a rotina
htp.formSelectOption .
htp.formSelectOpen (
cname in varchar2
cprompt in varchar2 DEFAULT NULL
nsize in integer DEFAULT NULL
cattributes in varchar2 DEFAULT NULL);
htf.formSelectOpen (cname, cprompt, nsize, cattributes) return varchar2;
htp.formSelectClose;
htf.formSelectClose return varchar2;
Parâmetro
Descrição
cname
Define o nome do campo, que será o nome do parâmetro da procedure definida em htp.formOpen
cprompt
Define o texto descritivo da lista de select
nsize
Define o número de itens que serão exibidos na lista
cattributes
Outros atributos quaisquer
Resultado
cprompt <SELECT NAME="cname" SIZE="nsize" cattributes>
</SELECT>
htp.formSelectOption
Cria uma opção dentro de uma lista de SELECT dentro de um formulário HTML. Deve ser
usado com a rotina htp.formSelectOpen e htp.formSelectClose .
htp.formSelectOption (
cvalue in varchar2
cselected in varchar2 DEFAULT NULL
cattributes in varchar2 DEFAULT NULL);
htf.formSelectOption (cvalue, cselected, cattributes) return varchar2;
Parâmetro
Descrição
cvalue
Define o valor que será passado como parâmetro ao formulário
cselected
Se for não nulo, a opção aparecerá selecionada
cattributes
Outros atributos quaisquer
Resultado
<OPTION SELECTED cattributes>cvalue
htp.formSubmit
Cria um botão de SUBMIT dentro de um formulário HTML. Deve ser usado com a rotina
htp.formOpen e htp.formClose .Quando o botão é pressionado, o formulário é executado.
htp.formSubmit (
cname in varchar2 DEFAULT NULL
cvalue in varchar2 DEFAULT 'Submit'
cattributes in varchar2 DEFAULT NULL);
htf.formSubmit (cname, cvalue, cattributes) return varchar2;
Parâmetro
Descrição
cname
Define o nome do campo, que será o nome do parâmetro da procedure definida em htp.formOpen
cvalue
Define o valor que será passado como parâmetro ao formulário e pode ser o texto do botão
cattributes
Outros atributos quaisquer
Resultado
<INPUT TYPE="submit" NAME="cname" VALUE="cvalue" cattributes>
htp.formText
Cria um TEXT dentro de um formulário HTML, que permite a entrada de valores através de um
campo, normalmente usado para texto de uma única linha. Deve ser usado com a rotina
htp.formOpen e htp.formClose.
htp.formText (
cname in varchar2
csize in varchar2 DEFAULT NULL
cmaxlength in varchar2 DEFAULT NULL
cvalue in varchar2 DEFAULT NULL
cattributes in varchar2 DEFAULT NULL);
htf.formText (cname, csize, cmaxlength, cvalue, cattributes) return varchar2;
Parâmetro
Descrição
cname
Define o nome do campo, que será o nome do parâmetro da procedure definida em htp.formOpen
csize
Define o tamanho do campo em caracteres
cmaxlength
Define o tamanho máximo do campo em caracteres
cvalue
Define o valor que será passado como parâmetro ao formulário
cattributes
Outros atributos quaisquer
Resultado
<INPUT TYPE="text" NAME="cname" SIZE="csize" MAXLENGTH="cmaxlength" VALUE="cvalue"
cattributes>
htp.formTextarea, htp.formTextarea2
Cria um TEXTAREA dentro de um formulário HTML, que permite a entrada de valores através
de um campo, normalmente usado para texto com várias linhas. Deve ser usado com a rotina
htp.formOpen e htp.formClose.
htp.formTextarea (
cname in varchar2
nrows in integer
ncolumns in integer
calign in varchar2 DEFAULT NULL
cattributes in varchar2 DEFAULT NULL);
htf.formTextarea (cname, nrows, ncolumns, calign, cattributes) return varchar2;
htp.formTextarea2 (
cname in varchar2
nrows in integer
ncolumns in integer
calign in varchar2 DEFAULT NULL
cwrap in varchar2 DEFAULT NULL
cattributes in varchar2 DEFAULT NULL);
htf.formTextarea2 (cname, nrows, ncolumns, calign, cwrap, cattributes) return varchar2;
Parâmetro
Descrição
cname
Define o nome do campo, que será o nome do parâmetro da procedure definida em htp.formOpen
nrows
Define o número de linhas do campo texto
ncolumns
Define o número de colunas do campo texto
calign
Especifica o atributo ALIGN que faz o alinhamento do texto (Ex: CENTER,LEFT,RIGHT)
cwrap
Especifica o atributo WRAP que define se o texto vai ser exibido com ou sem quebra de linha
cattributes
Outros atributos quaisquer
Resultado
<TEXTAREA NAME="cname" ROWS="nrows" COLS="ncolumns" ALIGN="calign"
cattributes></TEXTAREA>
<TEXTAREA NAME="cname" ROWS="nrows" COLS="ncolumns" ALIGN="calign" WRAP="cwrap"
cattributes></TEXTAREA>
htp.formTextareaOpen, htp.formTextareaOpen2, htp.formTextareaClose
Cria um TEXTAREA dentro de um formulário HTML, que permite a entrada de valores através
de um campo, normalmente usado para texto com várias linhas. Deve ser usado com a rotina
htp.formOpen e htp.formClose.
htp.formTextareaOpen (
cname in varchar2
nrows in integer
ncolumns in integer
calign in varchar2 DEFAULT NULL
cattributes in varchar2 DEFAULT NULL);
htf.formTextareaOpen (cname, nrows, ncolumns, calign, cattributes) return varchar2;
htp.formTextareaOpen2(
cname in varchar2
nrows in integer
ncolumns in integer
calign in varchar2 DEFAULT NULL
cwrap in varchar2 DEFAULT NULL
cattributes in varchar2 DEFAULT NULL);
htf.formTextareaOpen2(cname, nrows, ncolumns, calign, cwrap, cattributes) return varchar2;
htp.formTextareaClose;
htf.formTextareaClose return varchar2;
Parâmetro
Descrição
cname
Define o nome do campo, que será o nome do parâmetro da procedure definida em htp.formOpen
nrows
Define o número de linhas do campo texto
ncolumns
Define o número de colunas do campo texto
calign
Especifica o atributo ALIGN que faz o alinhamento do texto (Ex: CENTER,LEFT,RIGHT)
cwrap
Especifica o atributo WRAP que define se o texto vai ser exibido com ou sem quebra de linha
cattributes
Outros atributos quaisquer
Resultado
<TEXTAREA NAME="cname" ROWS="nrows" COLS="ncolumns" ALIGN="calign" cattributes>
<TEXTAREA NAME="cname" ROWS="nrows" COLS="ncolumns" ALIGN="calign" WRAP = "cwrap"
cattributes>
</TEXTAREA>
htp.frame
Cria um FRAME dentro de uma página HTML. Deve ser usado com a rotina htp.framesetOpen e
htp.framesetClose.
htp.frame(
csrc in varchar2
cname in varchar2 DEFAULT NULL
cmarginwidth in varchar2 DEFAULT NULL
cmarginheight in varchar2 DEFAULT NULL
cscrolling in varchar2 DEFAULT NULL
cnoresize in varchar2 DEFAULT NULL
cattributes in varchar2 DEFAULT NULL);
htf.frame(csrc, cname, cmarginwidth, cmarginheight, cscrolling, cnoresize, cattributes) return varchar2;
Parâmetro
Descrição
csrc
Define a procedure a ser exibida como FRAME
cname
Atribui um nome ao FRAME
cmarginwidth Define o tamanho da margem horizontal em pixels
cmarginheight Define o tamanho da margem vertical em pixels
cscrolling
Define se a barra de rolagem será exibida (opções: YES,NO e AUTO)
cnoresize
Define se o frame poderá ser alterado seu tamanho pelo usuário ou não
cattributes
Outros atributos quaisquer
Resultado
<FRAME SRC="csrc" NAME="cname" MARGINWIDTH="cmarginwidth" MARGINHEIGHT="cmarginheight"
SCROLLING="cscrolling" NORESIZE cattributes>
htp.framesetOpen, htp.framesetClose
Define um conjunto de frames dentro de uma página HTML. Deve ser usado com a rotina
htp.frame.
htp.framesetOpen(
crows in varchar2 DEFAULT NULL
ccols in varchar2 DEFAULT NULL
cattributes in varchar2 DEFAULT NULL);
htf.framesetOpen(crows, ccols, cattributes) return varchar2;
hp.framesetClose;
htf.framesetClose return varchar2;
Parâmetro
Descrição
crows
Especifica a divisão do frame em linhas (na horizontal)
ccols
Especifica a divisão do frame em colunas (na vertical)
cattributes
Outros atributos quaisquer
Resultado
<FRAMESET ROWS="crows" COLS="ccols" cattributes>
</FRAMESET>
htp.headOpen, htp.headClose
Define as tags <HEAD> e </HEAD> que criam o cabeçalho da página HTML.Dentro dessas
tags são usadas outras rotinas, como htp.title e htp.meta.
htp.headOpen;
htf.headOpen return varchar2;
htp.headClose;
htf.headClose return varchar2;
Resultado
<HEAD>
</HEAD>
htp.header
Define as tags de <H1> e </H1> até <H6> e </H6> que exibem um texto específico com um
tamanho variando de 1 (tamanho maior) para 6 (tamanho menor).
htp.header (
nsize in integer
cheader in varchar2
calign in varchar2 DEFAULT NULL
cnowrap in varchar2 DEFAULT NULL
cclear in varchar2 DEFAULT NULL
cattributes in varchar2 DEFAULT NULL);
htf.header (nsize, cheader, calign, cnowrap, cclear, cattributes) return varchar2;
Parâmetro
Descrição
nsize
Valor de 1 até 6 para especificar o tamanho da fonte
cheader
Texto a ser exibido formatado
calign
Alinhamento do texto (CENTER,LEFT, RIGHT ou JUSTIFY)
cnowrap
Especifica o atributo WRAP que define se o texto vai ser exibido com ou sem quebra de linha
cclear
O valor para o atributo CLEAR, configura o alinhamento LEFT, RIGHT ou ALL que limpará as margens antes de
exibir o texto
cattributes
Outros atributos quaisquer
Resultado
<Hnsize ALIGN="calign" NOWRAP CLEAR="cclear" cattributes>cheader</Hnsize>
htp.htmlOpen, htp.htmlClose
Define as tags de <HTML> e </HTML> que especificam o início e fim de um documento
HTML.
htp.htmlOpen;
htf.htmlOpen return varchar2;
htp.htmlClose;
htf.htmlClose return varchar2;
Resultado
<HTML>
</HTML>
htp.img, htp.img2
Define a tag de <IMG> que disponibiliza uma imagem num documento HTML.
htp.img (
curl in varchar2 DEFAULT NULL
calign in varchar2 DEFAULT NULL
calt in varchar2 DEFAULT NULL
cismap in varchar2 DEFAULT NULL
cattributes in varchar2 DEFAULT NULL);
htf.img (curl, calign, calt, cismap, cattributes) return varchar2;
htp.img2(
curl in varchar2 DEFAULT NULL
calign in varchar2 DEFAULT NULL
calt in varchar2 DEFAULT NULL
cismap in varchar2 DEFAULT NULL
cusemap in varchar2 DEFAULT NULL
cattributes in varchar2 DEFAULT NULL);
htf.img2(curl, calign, calt, cismap, cusemap, cattributes) return varchar2;
Parâmetro
Descrição
curl
A localização do arquivo da imagem
calign
Alinhamento do texto ao lado da imagem (CENTER,LEFT, RIGHT ou JUSTIFY)
calt
Define o texto que será exibido se a imagem não for visualizada ou exibe o texto como um hint
cismap
Se o valor não for nulo, a imagem será mapeada
cusemap
Define o nome do mapa que irá mapear a imagem
cattributes
Outros atributos quaisquer
Resultado
<IMG SRC="curl" ALIGN="calign" ALT="calt" ISMAP cattributes>
<IMG SRC="curl" ALIGN="calign" ALT="calt" ISMAP USEMAP="cusemap" cattributes>
htp.isindex
Gera um campo de entrada dados com um prompt que passa como parâmetro para a URL
especificada. Recurso já obsoleto do HTML.
htp.isindex (
cprompt in varchar2 DEFAULT NULL
curl in varchar2 DEFAULT NULL);
htf.isindex (cprompt, curl) return varchar2;
Parâmetro
Descrição
cprompt
O valor do prompt do campo de entrada
curl
O valor da URL que será chamada
Resultado
<ISINDEX PROMPT="cprompt" HREF="curl">
htp.italic
Gera as tags <I> e </I> que formata um texto específico em itálico.
htp.italic (
ctext in varchar2
cattributes in varchar2 DEFAULT NULL);
htf.italic (ctext, cattributes) return varchar2;
Parâmetro
Descrição
ctext
Texto a ser formatado em itálico
cattributes
Outros atributos quaisquer
Resultado
<I cattributes>ctext</I>
htp.keyboard, htp.kbd
Gera as tags <KBD> e </KBD> que formata o texto em uma fonte monospace, onde todos os
caracteres possuem o mesmo tamanho.
htp.keyboard (
ctext in varchar2
cattributes in varchar2 DEFAULT NULL);
htf.keyboard (ctext, cattributes) return varchar2;
htp.kbd (
ctext in varchar2
cattributes in varchar2 DEFAULT NULL);
htf.kbd (ctext, cattributes) return varchar2;
Parâmetro
Descrição
ctext
Texto a ser formatado em monospace
cattributes
Outros atributos quaisquer
Resultado
<KBD cattributes>ctext</KBD>
htp.line, htp.hr
Gera uma linha numa página HTML.
htp.line (
cclear in varchar2 DEFAULT NULL
csrc in varchar2 DEFAULT NULL
cattributes in varchar2 DEFAULT NULL);
htf.line (cclear, csrc, cattributes) return varchar2;
htp.hr (
cclear in varchar2 DEFAULT NULL
csrc in varchar2 DEFAULT NULL
cattributes in varchar2 DEFAULT NULL);
htf.hr (cclear, csrc, cattributes) return varchar2;
Parâmetro
Descrição
cclear
O valor para o atributo CLEAR, configura o alinhamento LEFT, RIGHT ou ALL que limpará as margens antes de
exibir o texto
csrc
Especifica ao local de uma imagem para ser exibida na linha
cattributes
Outros atributos quaisquer
Resultado
<HR CLEAR="cclear" SRC="csrc" cattributes>
htp.linkRel
Gera a tag <LINK> utilizada para especificar relacionamentos entre documentos, mas não cria
um link como a rotina htp.anchor .
htp.linkRel (
crel in varchar2
curl in varchar2
ctitle in varchar2 DEFAULT NULL);
htf.linkRel (crel, curl, ctitle) return varchar2;
Parâmetro
Descrição
crel
Define o relacionamento entre o documento e o link (ex: stylesheet)
curl
A URL que será referenciada
ctitle
O título do link definido pela tag TITLE
Resultado
<LINK REL="crel" HREF="curl" TITLE="ctitle">
htp.linkRev
Gera a tag <LINK> utilizada para especificar relacionamentos reversos entre documentos, mas
não cria um link como a rotina htp.anchor .
htp.linkRev (
crev in varchar2
curl in varchar2
ctitle in varchar2 DEFAULT NULL);
htf.linkRev (crev, curl, ctitle) return varchar2;
Parâmetro
Descrição
crev
Define o relacionamento reverso entre o documento e o link (ex: stylesheet)
curl
A URL que será referenciada
ctitle
O título do link definido pela tag TITLE
Resultado
<LINK REV="crev" HREF="curl" TITLE="ctitle">
htp.listHeader
Formata os cabeçalhos das listas do HTML, definido pelas tags <LH> e </LH>.
htp.listHeader (
ctext in varchar2
cattributes in varchar2 DEFAULT NULL);
htf.listHeader (ctext, cattributes) return varchar2;
Parâmetro
Descrição
ctext
Especifica o texto a ser formatado
cattributes
Outros atributos quaisquer
Resultado
<LH cattributes>ctext</LH>
htp.listingOpen, htp.listingClose
Gera as tags <LISTING> e </LISTING>, que definem uma seção de texto de comprimento fixo
no corpo de uma página HTML.
htp.listingOpen;
htf.listingOpen return varchar2;
htp.listingClose;
htf.listingClose return varchar2;
Resultado
<LISTING>
</LISTING>
htp.listItem
Define os itens de uma lista HTML.
htp.listItem (
ctext in varchar2 DEFAULT NULL
cclear in varchar2 DEFAULT NULL
cdingbat in varchar2 DEFAULT NULL
csrc in varchar2 DEFAULT NULL
cattributes in varchar2 DEFAULT NULL);
htf.listItem (ctext, cclear, cdingbat, csrc, cattributes) return varchar2;
Parâmetro
Descrição
ctext
Texto que será item de uma lista
cclear
O valor para o atributo CLEAR, configura o alinhamento LEFT, RIGHT ou ALL que limpará as margens antes de
exibir o texto
cdingbat
Especifica o atributo DINGBAT
csrc
Especifica o atributo SRC
cattributes
Outros atributos quaisquer
Resultado
<LI CLEAR="cclear" DINGBAT="cdingbat" SRC="csrc" cattributes>ctext
htp.mailto
Gera um link para um endereço de email específico HTML.
htp.mailto (
caddress in varchar2
ctext in varchar2
cname in varchar2
cattributes in varchar2 DEFAULT NULL);
htf.mailto (caddress, ctext, cname, cattributes) return varchar2;
Parâmetro
Descrição
caddress
É o valor do endereço de email.
ctext
É o valor do texto que será clicável .
cname
É o valor do atributo NAME, utilizado para referenciar o valor do campo em rotinas Javascript.
cattributes
Outros atributos quaisquer
Resultado
<A HREF="mailto:caddress" NAME="cname" cattributes>ctext</A>
htp.mapOpen, htp.mapClose
Cria um mapeamento no HTML através das tags <MAP> e </MAP>.
htp.mapOpen(
cname in varchar2
cattributes in varchar2 DEFAULT NULL);
htf.mapOpen(cname, cattributes) return varchar2;
htp.mapClose;
htf.mapClose return varchar2;
Parâmetro
Descrição
cname
Define o nome do mapa que será atribuído a uma imagem usando htp.img2
cattributes
Outros atributos quaisquer
Resultado
<MAP NAME="cname" cattributes>
</MAP>
htp.menulistOpen, htp.menulistClose
Cria uma lista de itens juntamente com htp.listItem .
htp.menulistOpen;
htf.menulistOpen return varchar2;
htp.menulistClose;
htf.menulistClose return varchar2;
Resultado
<MENU>
</MENU>
htp.meta
Define a tag META, criada entre htp.headopen e htp.headclose, utilizada para caracterizar a
página HTML, com especificações diversas, como redirecionamento para outras páginas, data de
validade da página, conteúdo da página, autor da página, etc.
htp.meta (
chttp_equiv in varchar2
cname in varchar2
ccontent in varchar2);
htf.meta (chttp_equiv, cname, ccontent) return varchar2;
Parâmetro
Descrição
chttp_equiv
Define os atributos do http (ex: Expires, Contect-type)
cname
Nome do tipo de especificação (ex: description,keywords, Author, etc.)
ccontent
Outros atributos quaisquer
Resultado
<META HTTP-EQUIV="chttp_equiv" NAME ="cname" CONTENT="ccontent">
htp.nl, htp.br
Gera a tag <BR> que pula uma linha no HTML.
htp.nl (
cclear in varchar2 DEFAULT NULL
cattributes in varchar2 DEFAULT NULL);
htf.nl (cclear, cattributes) return varchar2;
htp.br (
cclear in varchar2 DEFAULT NULL
cattributes in varchar2 DEFAULT NULL);
htf.br (cclear, cattributes) return varchar2;
Parâmetro
Descrição
cclear
O valor para o atributo CLEAR, configura o alinhamento LEFT, RIGHT ou ALL que limpará as margens antes de
exibir o texto
cattributes
Outros atributos quaisquer
Resultado
<BR CLEAR="cclear" cattributes>
htp.nobr
Gera a tag <NOBR> que desativa o pulo de linhas no HTML.
htp.nobr(ctext in varchar2);
htf.nobr(ctext) return varchar2;
Parâmetro
Descrição
ctext
Texto que será exibido sem quebra de linha
Resultado
<NOBR>ctext</NOBR>
htp.noframesOpen, htp.noframesClose
Gera a tag <NOFRAMES> e </NOFRAMES> exibem algum texto em HTML somente para
browsers que não suportam frames.
htp.noframesOpen
htf.noframesOpen return varchar2;
htp.noframesClose
htf.noframesClose return varchar2;
Resultado
<NOFRAMES>
</NOFRAMES>
htp.olistOpen, htp.olistClose
Gera as tags <OL> e </OL> que criam uma lista ordenada, com a adição de itens usando a
rotina htp.listItem .
htp.olistOpen (
cclear in varchar2 DEFAULT NULL
cwrap in varchar2 DEFAULT NULL
cattributes in varchar2 DEFAULT NULL);
htf.olistOpen (cclear, cwrap, cattributes) return varchar2;
htp.olistClose;
htf.olistClose return varchar2;
Parâmetro
Descrição
cclear
O valor para o atributo CLEAR, configura o alinhamento LEFT, RIGHT ou ALL que limpará as margens antes de
exibir o texto
cwrap
Especifica o atributo WRAP que define se o texto vai ser exibido com ou sem quebra de linha
cattributes
Outros atributos quaisquer
Resultado
<OL CLEAR="cclear" WRAP="cwrap" cattributes>
</OL>
htp.para, htp.paragraph
Gera a tag <P> que gera um parágrafo no HTML.
htp.para;
htf.para return varcahr2;
htp.paragraph (
calign in varchar2 DEFAULT NULL
cnowrap in varchar2 DEFAULT NULL
cclear in varchar2 DEFAULT NULL
cattributes in varchar2 DEFAULT NULL);
htf.paragraph (calign, cnowrap, cclear, cattributes) return varchar2;
Parâmetro
Descrição
calign
Alinhamento do texto (CENTER,LEFT, RIGHT ou JUSTIFY)
cnowrap
Se for não nulo, especifica o atributo NOWRAP que define se o texto vai ser exibido com ou sem quebra de
linha
cclear
O valor para o atributo CLEAR, configura o alinhamento LEFT, RIGHT ou ALL que limpará as margens antes de
exibir o texto
cattributes
Outros atributos quaisquer
Resultado
<P>
<P ALIGN="calign" NOWRAP CLEAR="cclear" cattributes>
htp.param
Gera a tag < PARAM > usada para passar os valores dos parâmetros das rotinas implementadas
em applets JAVA. Deve ser usada juntamente com htp.appletOpen e htp.appletClose.
htp.param(
cname in varchar2
cvalue in varchar2);
htf.param(cname, cvalue) return varchar2;
Parâmetro
Descrição
cname
É o nome do parâmetro do applet JAVA
cvalue
É o valor que será passado ao parâmetro do applet JAVA
Resultado
<PARAM NAME=cname VALUE="cvalue">
htp.plaintext
Gera a tag < PLAINTEXT > e </ PLAINTEXT > , que exibe o texto com as mesmas quebras de
linha que foi digitado.
htp.plaintext(
ctext in varchar2
cattributes in varchar2 DEFAULT NULL);
htf.plaintext(ctext, cattributes) return varchar2;
Parâmetro
Descrição
ctext
Texto que será exibido com a quebra de linha conforme digitado
cattributes
Outros atributos quaisquer
Resultado
<PLAINTEXT cattributes>ctext</PLAINTEXT>
htp.preOpen, htp.preClose
Gera a tag < PRE > e </ PRE > , que exibe o texto com as mesmas quebras de linha que foi
digitado.
htp.preOpen (
cclear in varchar2 DEFAULT NULL
cwidth in varchar2 DEFAULT NULL
cattributes in varchar2 DEFAULT NULL);
htf.preOpen (cclear, cwidth, cattributes) return varchar2;
htp.preClose;
htf.preClose return varchar2;
Parâmetro
Descrição
cclear
O valor para o atributo CLEAR, configura o alinhamento LEFT, RIGHT ou ALL que limpará as margens antes de
exibir o texto
cwidth
Define o comprimento do texto
cattributes
Outros atributos quaisquer
Resultado
<PRE CLEAR="cclear" WIDTH="cwidth" cattributes>
</PRE>
htp.print, htp.prn
As rotinas htp.print e htp.prn não geram nenhuma tag, simplesmente jogam um texto específico
direto para a página HTML. Toda string passada como parâmetro é terminada com `\n' em
htp.print e em htp.print isso não ocorre. A rotina htp.print é mais comum na exibição de um
código HTML já pronto, que simplesmente é copiado para dentro de uma procedure. Já a rotina
htp.prn é usada normalmente na conversão de algum dado binário, como por exemplo a leitura
de uma imagem de dentro de uma tabela do banco de dados para o browser.
htp.print (cbuf in varchar2);
htp.print (dbuf in date);
htp.print (nbuf in number);
htp.prn (cbuf in varchar2);
htp.prn (dbuf in date);
htp.prn (nbuf in number);
Parâmetro
Descrição
cbuf,dbuf,nbuf Texto a ser exibido
htp.prints, htp.ps
Tem a mesma função que o htp.print, porém substitui os caracteres especiais do HTML pelos
respectivos códigos (exemplos: & é representado por &, " é representado por " ) em
um texto específico.
htp.prints(ctext in varchar2);
htp.ps(ctext in varchar2);
Parâmetro
Descrição
ctext
Texto a ser exibido
Resultado
A string.
htp.s
Gera as tags <S> e </S> que exibem o texto riscado na horizontal, no estilo strike.
htp.s(
ctext in varchar2
cattributes in varchar2 DEFAULT NULL);
htf.s(ctext, cattributes) return varchar2;
Parâmetro
Descrição
ctext
Texto a ser exibido no estilo strike
cattributes
Outros atributos quaisquer
Resultado
<S cattributes>ctext</S>
htp.sample
Gera as tags <SAMP> e </SAMP> que exibem o texto no estilo Courier, normalmente usadas
para ilustrar mensagens de computador.
htp.sample (
ctext in varchar2
cattributes in varchar2 DEFAULT NULL);
htf.sample (ctext, cattributes) return varchar2;
Parâmetro
Descrição
ctext
Texto a ser exibido no estilo Courier
cattributes
Outros atributos quaisquer
Resultado
<SAMP cattributes>ctext</SAMP>
htp.script
Gera a tag <SCRIPT> que especifica a inserção de rotinas em JavaScript ou VBscript numa
página HTML.
htp.script(
cscript in varchar2
clanguage in varchar2 DEFAULT NULL);
htf.script(cscript, clanguage) return varchar2;
Parâmetro
Descrição
clanguage
Especifica a linguagem do script (ex: JavaScript, VBScript)
cscript
Especifica o código fonte do script .
Resultado
<SCRIPT LANGUAGE=clanguage>cscript</SCRIPT>
htp.small
Gera as tags <SMALL> e </SMALL> que exibem o texto numa fonte pequena.
htp.small(
ctext in varchar2
cattributes in varchar2 DEFAULT NULL);
htf.small(ctext, cattributes) return varchar2;
Parâmetro
Descrição
ctext
Texto que será exibido com uma fonte pequena
cattributes
Outros atributos quaisquer
Resultado
<SMALL cattributes>ctext</SMALL>
htp.strike
Gera as tags <STRIKE> e </STRIKE> que exibem o texto riscado na horizontal, no estilo
strike.
htp.strike(
ctext in varchar2
cattributes in varchar2 DEFAULT NULL);
htf.strike(ctext, cattributes) return varchar2;
Parâmetro
Descrição
ctext
Texto a ser exibido no estilo strike
cattributes
Outros atributos quaisquer
Resultado
<STRIKE cattributes>ctext</STRIKE>
htp.strong
Gera as tags <STRONG> e </STRONG> que exibem o em negrito.
htp.strong (
ctext in varchar2
cattributes in varchar2 DEFAULT NULL);
htf.strong (ctext, cattributes) return varchar2;
Parâmetro
Descrição
ctext
Texto que será exibido em negrito
cattributes
Outros atributos quaisquer
Resultado
<STRONG cattributes>ctext</STRONG>
htp.style
Cria um estilo dentro de uma página HTML.
htp.style(cstyle in varchar2);
htf.style(cstyle) return varchar2;
Parâmetro
Descrição
cstyle
Define o valor do estilo da página
Resultado
<STYLE>cstyle</STYLE>
htp.sub
Exibe o texto subscrito em relação à linha exibida.
htp.sub(
ctext in varchar2
calign in varchar2 DEFAULT NULL
cattributes in varchar2 DEFAULT NULL);
htf.sub(ctext, calign, cattributes) return varchar2;
Parâmetro
Descrição
ctext
Texto que será exibido subscrito
calign
Alinhamento do texto (CENTER,LEFT, RIGHT ou JUSTIFY)
cattributes
Outros atributos quaisquer
Resultado
<SUB ALIGN="calign" cattributes>ctext</SUB>
htp.sup
Exibe o texto sobrescrito em relação à linha exibida.
htp.sup(
ctext in varchar2
calign in varchar2 DEFAULT NULL
cattributes in varchar2 DEFAULT NULL);
htf.sup(ctext, calign, cattributes) return varchar2;
Parâmetro
Descrição
ctext
Texto que será exibido sobrescrito
calign
Alinhamento do texto ao lado da imagem (CENTER,LEFT, RIGHT ou JUSTIFY)
cattributes
Outros atributos quaisquer
Resultado
<SUP ALIGN="calign" cattributes>ctext</SUP>
htp.tableCaption
Gera as tags <CAPTION> e </CAPTION> que definem um título em uma tabela HTML.
htp.tableCaption (
ccaption in varchar2
calign in varchar2 DEFAULT NULL
cattributes in varchar2 DEFAULT NULL);
htf.tableCaption (ccaption, calign, cattributes) return varchar2;
Parâmetro
Descrição
ccaption
Define o título da tabela HTML
calign
Alinhamento do texto (CENTER,LEFT, RIGHT ou JUSTIFY)
cattributes
Outros atributos quaisquer
Resultado
<CAPTION ALIGN="calign" cattributes>ccaption</CAPTION>
htp.tableData
Gera a tag <TD> e </TD> que definem uma célula da tabela HTML.
htp.tableData (
cvalue in varchar2 DEFAULT NULL
calign in varchar2 DEFAULT NULL
cdp in varchar2 DEFAULT NULL
cnowrap in varchar2 DEFAULT NULL
crowspan in varchar2 DEFAULT NULL
ccolspan in varchar2 DEFAULT NULL
cattributes in varchar2 DEFAULT NULL);
htf.tableData (cvalue, calign, cdp, cnowrap, crowspan, ccolspan, cattributes) return varchar2;
Parâmetro
Descrição
cvalue
Define os dados dentro da célula
calign
Alinhamento do texto (CENTER,LEFT, RIGHT ou JUSTIFY)
cdp
Define valores para o atributo DP
cnowrap
Especifica o atributo NOWRAP que define se o texto vai ser exibido com ou sem quebra de linha
crowspan
Define o atributo ROWSPAN , que especifica o número de células por coluna
ccolspan
Define o atributo COLSPAN , que especifica o número de células por linha
cattributes
Outros atributos quaisquer
Resultado
<TD ALIGN="calign" DP="cdp" ROWSPAN="crowspan" COLSPAN="ccolspan" NOWRAP
cattributes>cvalue</TD>
htp.tableHeader
Gera as tags <TH> e </TH> que definem cabeçalho de uma tabela no HTML.
htp.tableHeader (
cvalue in varchar2 DEFAULT NULL
calign in varchar2 DEFAULT NULL
cdp in varchar2 DEFAULT NULL
cnowrap in varchar2 DEFAULT NULL
crowspan in varchar2 DEFAULT NULL
ccolspan in varchar2 DEFAULT NULL
cattributes in varchar2 DEFAULT NULL);
htf.tableHeader (cvalue, calign, cdp, cnowrap, crowspan, ccolspan, cattributes) return varchar2;
Parâmetro
Descrição
cvalue
Define os dados dentro do cabeçalho da tabela
calign
Alinhamento do texto (CENTER,LEFT, RIGHT ou JUSTIFY)
cdp
Define valores para o atributo DP
cnowrap
Especifica o atributo NOWRAP que define se o texto vai ser exibido com ou sem quebra de linha
crowspan
Define o atributo ROWSPAN , que especifica o número de células por coluna
ccolspan
Define o atributo COLSPAN , que especifica o número de células por linha
cattributes
Outros atributos quaisquer
Resultado
<TH ALIGN="calign" DP="cdp" ROWSPAN="crowspan" COLSPAN="ccolspan" NOWRAP
cattributes>cvalue</TH>
htp.tableOpen, htp.tableClose
Gera as tags <TABLE> e </TABLE> que definem o início e fim de uma tabela HTML.
htp.tableOpen (
cborder in varchar2 DEFAULT NULL
calign in varchar2 DEFAULT NULL
cnowrap in varchar2 DEFAULT NULL
cclear in varchar2 DEFAULT NULL
cattributes in varchar2 DEFAULT NULL);
htf.tableOpen (cborder, calign, cnowrap, cclear, cattributes) return varchar2;
htp.tableClose;
htf.tableClose return varchar2;
Parâmetro
Descrição
cborder
Define o tamanho da borda da tabela
calign
Alinhamento da tabela (CENTER,LEFT, RIGHT ou JUSTIFY)
cnowrap
Especifica o atributo NOWRAP que define se o texto vai ser exibido com ou sem quebra de linha
cclear
O valor para o atributo CLEAR, configura o alinhamento LEFT, RIGHT ou ALL que limpará as margens antes de
exibir o texto
cattributes
Outros atributos quaisquer
Resultado
<TABLE "cborder" NOWRAP ALIGN="calign" CLEAR="cclear" cattributes>
</TABLE>
htp.tableRowOpen, htp.tableRowClose
Gera as tags <TR> e </TR> que definem uma linha de uma tabela HTML.
htp.tableRowOpen (
calign in varchar2 DEFAULT NULL
cvalign in varchar2 DEFAULT NULL
cdp in varchar2 DEFAULT NULL
cnowrap in varchar2 DEFAULT NULL
cattributes in varchar2 DEFAULT NULL);
htf.tableRowOpen (calign, cvalign,cdp, cnowrap, cattributes) return varchar2;
htp.tableRowClose;
htp.tableRowClose return varchar2;
Parâmetro
Descrição
calign
Alinhamento do texto na horizontal (CENTER,LEFT, RIGHT ou JUSTIFY)
cvalign
Alinhamento do texto na vertical (MIDDLE,TOP, BOTTOM ou BASELINE)
cdp
Define valores para o atributo DP
cnowrap
Especifica o atributo NOWRAP que define se o texto vai ser exibido com ou sem quebra de linha
cattributes
Outros atributos quaisquer
Resultado
<TR ALIGN="calign" VALIGN="cvalign" DP="cdp" NOWRAP catttributes>
</TR>
htp.teletype
Gera as tags <TT> e </TT> que exibem algum texto específico com uma fonte monospace (cada
letra da fonte tem sempre o mesmo tamanho).
htp.teletype (
ctext in varchar2
cattributes in varchar2 DEFAULT NULL);
htf.teletype (ctext, cattributes) return varchar2;
Parâmetro
Descrição
ctext - the text to render in a fixed width typewriter font.
ctext
Texto que será exibido em fonte monospace
cattributes
Outros atributos quaisquer
Resultado
<TT cattributes>ctext</TT>
htp.title
Gera as tags <TITLE> e </TITLE> que definem um título da página HTML, criado entre as tags
<HEAD> e </HEAD>.
htp.title (ctitle in varchar2);
htf.title (ctitle) return varchar2;
Parâmetro
Descrição
ctitle
Define o título da página HTML
Resultado
<TITLE>ctitle</TITLE>
htp.ulistOpen, htp.ulistClose
Gera a tag <UL> e </UL> que define uma lista no HTML, deve ser usada juntamente com
htp.listItem.
htp.ulistOpen (
cclear in varchar2 DEFAULT NULL
cwrap in varchar2 DEFAULT NULL
cdingbat in varchar2 DEFAULT NULL
csrc in varchar2 DEFAULT NULL
cattributes in varchar2 DEFAULT NULL
htf.ulistOpen (cclear, cwrap, cdingbat, csrc, cattributes) return varchar2;
htp.ulistClose;
htf.ulistClose return varhar2;
Parâmetro
Descrição
cclear
O valor para o atributo CLEAR, configura o alinhamento LEFT, RIGHT ou ALL que limpará as margens antes de
exibir o texto
cwrap
Especifica o atributo WRAP que define se o texto vai ser exibido com ou sem quebra de linha
cclear
O valor para o atributo CLEAR, configura o alinhamento LEFT, RIGHT ou ALL que limpará as margens antes de
exibir o texto
cdingbat
Especifica o atributo DINGBAT
csrc
Especifica o atributo SRC
cattributes
Outros atributos quaisquer
Resultado
<UL CLEAR="cclear" WRAP="cwrap" DINGBAT="cdingbat" SRC="csrc" cattributes>
</UL>
htp.underline
Gera as tags <U> e </U> que gera um texto específico sublinhado no HTML.
htp.underline(
ctext in varchar2
cattributes in varchar2 DEFAULT NULL);
htf.underline(ctext, cattributes) return varchar2;
Parâmetro
Descrição
ctext
Texto que será exibido sublinhado
cattributes
Outros atributos quaisquer
Resultado
<U cattributes>ctext</U>
htp.variable
Gera as tags <VAR> e </VAR> que gera um texto específico em itálico no HTML.
htp.variable (
ctext in varchar2
cattributes in varchar2 DEFAULT NULL);
htf.variable (ctext, cattributes) return varchar2;
Parâmetro
Descrição
ctext
Texto que será exibido em itálico
cattributes
Outros atributos quaisquer
Resultado
<VAR cattributes>ctext</VAR>
htp.wbr
Gera a tag <WBR> que insere um pulo de linha dentro de um <NOBR> e </NOBR> no HTML.
htp.wbr;
htf.wbr return wbr;
Resultado
<WBR>
3.2 OWA_UTIL
owa_util.bind_variables
Função que armazena até 25 valores BIND para ser usado em algum cursor aberto, normalmente
usado em rotinas com SQL dinâmicos.
owa_util.bind_variables(
theQuery in varchar2 DEFAULT NULL
bv1Name in varchar2 DEFAULT NULL
bv1Value in varchar2 DEFAULT NULL
bv2Name in varchar2 DEFAULT NULL
bv2Value in varchar2 DEFAULT NULL
bv3Name in varchar2 DEFAULT NULL
bv3Value in varchar2 DEFAULT NULL
...
bv25Name in varchar2 DEFAULT NULL
bv25Value in varchar2 DEFAULT NULL) return integer;
Parâmetro
Descrição
theQuery
O comando SELECT
bv1Name
Define o nome da variável
bv2Value
Define o valor da variável
Resultado
Um número inteiro identificando o cursor aberto
owa_util.calendarprint
Rotina que cria um layout de calendário baseado nos seus parâmetros informados. A primeira
coluna no SELECT é a informação da data, a segunda é o texto do link que irá aparecer dentro
de cada dia especificado no calendário e a terceira coluna é o resultado do link criado pela
segunda.
owa_util.calendarprint(
p_query in varchar2
p_mf_only in varchar2 DEFAULT 'N');
owa_util.calendarprint(
p_cursor in integer
p_mf_only in varchar2 DEFAULT 'N');
Parâmetro
Descrição
p_Query
Define o SELECT utilizado no calendário
p_cursor
Define o cursor a ser usado no mesmo formato do p_query
p_mf_only
O seu valor padrão é N, que especifica se deve ser incluída os dias sábado e domingo ou não
Resultado
Um calendário em HTML com borda
owa_util.cellsprint
Rotina que exibe o resultado de um SELECT dentro de uma célula de uma tabela HTML.
owa_util.cellsprint(
p_colCnt in integer
p_resultTbl in vc_arr
p_format_numbers in varchar2 DEFAULT NULL);
owa_util.cellsprint(
p_theQuery in varchar2
p_max_rows in number DEFAULT 100
p_format_numbers in varchar2 DEFAULT NULL);
owa_util.cellsprint(
p_theCursor in integer
p_max_rows in number DEFAULT 100
p_format_numbers in varchar2 DEFAULT NULL);
owa_util.cellsprint(
p_theQuery in varchar2
p_max_rows in number DEFAULT 100
p_format_numbers in varchar2 DEFAULT NULL
p_skip_rec in numbe DEFAULT 0
p_more_data out boolean);
owa_util.cellsprint(
p_theCursor in integer
p_max_rows in number DEFAULT 100
p_format_numbers in varchar2 DEFAULT NULL
p_skip_rec in number DEFAULT 0
p_more_data out boolean);
owa_util.cellsprint(
p_theQuery in varchar2
p_max_rows in number DEFAULT 100
p_format_numbers in varchar2 DEFAULT NULL
p_reccnt out number);
owa_util.cellsprint(
p_theCursor in integer
p_max_rows in number DEFAULT 100
p_format_numbers in varchar2 DEFAULT NULL
p_reccnt out number);
owa_util.cellsprint(
p_theQuery in varchar2
p_max_rows in number DEFAULT 100
p_format_numbers in varchar2 DEFAULT NULL
p_skip_rec in number DEFAULT 0
p_more_data out boolean);
Parâmetro
Descrição
p_colCnt
Define o número de colunas na tabela
p_theQuery
Define o comando SELECT utilizado
p_theCursor
Define a identificação do cursor, vinda do owa_util.bind_variables
p_max_rows
Define o número máximo de linhas exibidas
p_format_numbers Se for não nulo os valores numéricos serão inseridos alinhados à direita e com duas casas decimais
p_skip_rec
Define o número de linhas excluídas da tabela HTML
p_more_data
Se for TRUE existem mais linhas no resultado do SELECT , senão retorna FALSE
p_recent
Retorna o número de linhas retornadas pelo SELECT
p_resultTbl
Um vetor que contém o resultado do SELECT
Resultado
<tr><td>Resultado</td><td> Resultado</td></tr>
owa_util.choose_date
Rotina que permite a entrada de dados de uma data num formato bem amigável, utilizando três
listas de SELECT, com valores para o dia, mês e ano. Deve ser utilizada dentro de um
formulário, entre as rotinas htp.formOpen e htp.formClose.
owa_util.choose_date(
p_name in varchar2,
p_date in date DEFAULT SYSDATE);
Parâmetro
Descrição
p_name
Define o nome do parâmetro da procedure chamada no formulário
p_date
Define a data que será exibida como padrão
Resultado
<SELECT NAME="p_name" SIZE="1">
<OPTION value="01">1
...
<OPTION value="31">31
</SELECT>
-
<SELECT NAME="p_name" SIZE="1">
<OPTION value="01">JAN
...
<OPTION value="12">DEC
</SELECT>
-
<SELECT NAME="p_name" SIZE="1">
<OPTION value="1997">1997
...
<OPTION value="2007">2007
</SELECT>
owa_util.get_cgi_env
Função que retorna o valor de uma variável CGI. A lista dessas variáveis é obtida executando a
rotina owa_util.print_cgi_env .
owa_util.get_cgi_env(param_name in varchar2) return varchar2;
Parâmetro
Descrição
param_name
Define o nome da variável CGI a ser lida
Resultado
O valor da variável CGI
owa_util.get_owa_service_path function
Função que retorna o valor do caminho virtual da rotina chamada, que é parte da URL.
owa_util.get_owa_service_path return varchar2;
Resultado
O caminho virtual da rotina chamada (ex: "/pls/app/")
owa_util.get_procedure
Função que retorna o nome da procedure que está sendo chamada.
owa_util.get_procedure return varchar2;
Resultado
O nome da procedure chama, estando dentro de uma package ou não.
owa_util.http_header_close
Rotina que fecha um cabeçalho de HTTP.
owa_util.http_header_close;
Resultado
Fecha um cabeçalho HTTP.
owa_util.listprint
Rotina que permite a entrada de dados de uma lista de valores num formato bem amigável,
utilizando uma lista de SELECT, com a passagem de parâmetro de um SELECT, que especifica
três colunas valendo, respectivamente, o valor passado como parâmetro, o valor exibido na lista
e se a opção será selecionada ou não. Deve ser utilizada dentro de um formulário, entre as
rotinas htp.formOpen e htp.formClose.
owa_util.listprint(
p_theQuery in varchar2
p_cname in varchar2
p_nsize in number
p_multiple in boolean DEFAULT FALSE);
owa_util.listprint(
p_theCursor in integer
p_cname in varchar2
p_nsize in number
p_multiple in boolean DEFAULT FALSE);
Parâmetro
Descrição
p_theQuery
Define o comando SELECT utilizado
p_theCursor
Define a identificação do cursor, vinda do owa_util.bind_variables
p_cname
Define o nome do parâmetro da procedure do formulário
p_nsize
Define o número de itens visíveis na página HTML
p_multiple
Define se a lista pode receber múltiplos valores ou não
Resultado
<SELECT NAME="p_cname" SIZE="p_nsize">
<OPTION SELECTED value='value_from_the_first_column'>value_from_the_second_column
<OPTION SELECTED value='value_from_the_first_column'>value_from_the_second_column
...
</SELECT>
owa_util.mime_header
Rotina que define um cabeçalho padrão MIME, normalmente utilizado para especificar o
cabeçalho de uma imagem lida de uma tabela da base de dados. Também é usado quando se
trabalha com cookies utilizando as rotinas da owa_cookie.
owa_util.mime_header(
ccontent_type in varchar2 DEFAULT 'text/html',
bclose_header in boolean DEFAULT TRUE,
ccharset in varchar2 DEFAULT NULL);
Parâmetro
Descrição
ccontent_type Define o MIME type (ex: text/plain , image/gif , application/pdf )
bclose_header Se especificado TRUE fecha o cabeçalho, se especificado FALSE mantém aberto
ccharset
Define o characterset utilizado (ex: 'ISO-8859-4')
Resultado
Content-type: <ccontent_type>; charset=<ccharset>
owa_util.print_cgi_env
Rotina que exibe o valor de todas as variáveis CGI do servidor.
owa_util.print_cgi_env;
Resultado
Uma lista de variáveis CGI
owa_util.redirect_url
Rotina que redireciona a rotina chamada para outro endereço (outra URL).
owa_util.redirect_url(
curl in varchar2
bclose_header in boolean DEFAULT TRUE);
Parâmetro
Descrição
curl
Especifica a URL que a página será redirecionada
bclose_header Se especificado TRUE fecha o cabeçalho, se especificado FALSE mantém aberto
Resultado
A página redirecionada
owa_util.showpage
Rotina que exibe o código fonte HTML da página no SQL* Plus.
owa_util.showpage;
Resultado
A saída é exibida no SQL*Plus
owa_util.showsource
Rotina que exibe o código fonte da procedure passada como parâmetro.
owa_util.showsource (cname in varchar2);
Parâmetro
Descrição
cname
Define o nome da procedure que será exibida o código fonte
Resultado
O código fonte da rotina chamada
owa_util.signature
Rotina que exibe uma linha no HTML com a data que a página foi gerada. Pode ser criado
opcionalmente um link para visualizar o código fonte da rotina passada como parâmetro.
owa_util.signature;
owa_util.signature (cname in varchar2);
Parâmetro
Descrição
cname
Define o nome da procedure que será exibida o código fonte
Resultado
Sem nenhum parâmetro, o resultado fica parecido com:
This page was produced by the PL/SQL Agent on August 9, 2001 09:30.
owa_util.status_line
Rotina que envia o status HTTP padrão para o browser.
owa_util.status_line(
nstatus in integer,
creason in varchar2 DEFAULT NULL
bclose_header in boolean DEFAULT TRUE);
Parâmetro
Descrição
nstatus
Define o número do status
creason
Define o código do status
bclose_header Se especificado TRUE fecha o cabeçalho, se especificado FALSE mantém aberto
Resultado
Status: <nstatus> <creason>\n\n
owa_util.tablePrint
Rotina que gera uma tabela HTML pré-formatada baseada nos valores dos parâmetros.
owa_util.tablePrint(
ctable in varchar2
cattributes in varchar2 DEFAULT NULL
ntable_type in integer DEFAULT HTML_TABLE
ccolumns in varchar2 DEFAULT `*`
cclauses in varchar2 DEFAULT NULL
ccol_aliases in varchar2 DEFAULT NULL
nrow_min in number DEFAULT 0
nrow_max in number DEFAULT NULL) return boolean;
Parâmetro
Descrição
ctable
Define a tabela a ser consultada
cattributes
Outros atributos quaisquer
ntable_type
Como gerar o layout da tabela HTML
ccolumns
Define a lista de colunas exibidas, separadas por vírgula
cclauses
Define as cláusulas WHERE ou ORDER BY das linhas exibidas
ccol_aliases
Define a lista de cabeçalho das colunas exibidas, separadas por vírgula
nrow_min
Define o número da primeira linha a ser exibida
nrow_max
Define o número da última linha a ser exibida
Resultado
Uma tabela HTML pré-formatada.
Retorna TRUE se existem mais linhas a erem exibidas além do parâmetro nrow_max especificado, e
FALSE caso contrário
owa_util.todate
Rotina que converte um datatype do tipo owa_util.dateType em um datatype do tipo DATE.
Normalmente utilizada juntamente com owa_util.choose_date.
owa_util.todate(p_dateArray in dateType) return date;
Parâmetro
Descrição
P_dateArray
Define o vetor com as informações de data. Esse parâmetro é alimentado pela rotina owa_util.choose_date
Resultado
Uma data padrão Oracle
owa_util.who_called_me
Rotina queda informações sobre o código PL/SQL usado para chamar a atual rotina. O resultado
é atribuído as variáveis que devem ser usadas nos parâmetros.
owa_util.who_called_me(
owner out varchar2
name out varchar2
lineno out number
caller_t out varchar2);
Parâmetro
Descrição
owner
Informa o dono da rotina chamada
name
Informa o nome da rotina chamada (de uma package ou procedure)
lineno
Informa a linha que a rotina foi chamada
caller_t
Informa o tipo de rotina: package body, procedure ou function
3.3 OWA_COOKIE
owa_util.get
Função que retorna os valores associados a um cookie específico numa variável do tipo
owa_cookie.cookie .
owa_cookie.get(name in varchar2) return cookie;
Parâmetro
Descrição
name
Define o nome do cookie a ser lido
Resultado
Um dado do tipo owa_cookie.cookie
owa_cookie.get_all
Função que retorna os valores associados de todos os cookies especificados em vetores nos
parâmetros.
owa_cookie.get_all(
names out vc_arr,
vals out vc_arr,
num_vals out integer);
Parâmetro
Descrição
names
Informa os nomes dos cookies lidos
vals
Informa os valores dos cookies
num_vals
Informa o número dos cookies lidos aos pares
Resultado
Um vetor dos cookies lidos
owa_cookie.remove
Rotina que remove o cookie, forçando-o ficar com data expirada.
owa_cookie.remove(
name in varchar2,
val in varchar2,
path in varchar2 DEFAULT NULL);
Parâmetro
Descrição
name
Define o nome do cookie a ser removido
value
Define o valor do cookie a ser removido
path
parâmetro sem uso
Resultado
Set-Cookie: <name>=<value> expires=01-JAN-1990
owa_cookie.send
Rotina que atualiza ou cria um cookie.
owa_cookie.send(
name in varchar2,
value in varchar2,
expires in date DEFAULT NULL,
path in varchar2 DEFAULT NULL,
domain in varchar2 DEFAULT NULL,
secure in varchar2 DEFAULT NULL);
Parâmetro
Descrição
name
Define o nome do cookie a ser criado ou atualizado
value
Define o valor do cookie a ser criado ou atualizado
expires
Define a data de vencimento do cookie a ser criado ou atualizado
path
Define o caminho do cookie
domain
Define o valor do domínio
secure
Define se o cookie utilizará transmissão segura ou não
Resultado
Set-Cookie: <name>=<value> expires=<expires> path=<path> domain=<domain> secure
3.4 OWA_SEC
owa_sec.get_client_hostname
Função que retorna o hostname da máquina cliente.
owa_sec.get_client_hostname return varchar2;
Resultado
O hostname.
owa_sec.get_client_ip
Função que retorna o IP da máquina cliente.
owa_sec.get_client_ip return owa_util.ip_address;
Resultado
O IP da máquina cliente no formato do datatype owa_util.ip_address, que é um vetor onde os quatro
primeiros elementos contém os quatro números que compõem o endereço IP. Ex: ( ipaddr(1) = 123,
ipaddr(2)= 45, ipaddr(3) = 67 e ipaddr(4) = 89 ).
owa_sec.get_password
Rotina que informa a senha digitada na autenticação do usuário.
owa_sec.get_password return varchar2;
Resultado
A senha digitada
owa_sec.get_user_id
Rotina que informa o usuário digitado na autenticação do usuário.
owa_sec.get_user_id return varchar2;
Resultado
O usuário digitado
owa_sec.set_authorization
Rotina que especifica que método de autenticação utilizar. Isso possibilita a implementação de
uma função criada por você chamada authorize que não tem parâmetro e retorna um datatype do
tipo BOOLEAN. Para uma autenticação com sucesso, essa função deve retornar TRUE; caso
contrário deve retornar FALSE. Os esquemas de autenticação existentes são:
OWA_SEC.NO_CHECK (padrão, não faz nenhuma autenticação), OWA_SEC.GLOBAL
(permite que você crie uma função authorize para todos usuários e todas as procedures),
OWA_SEC.PER_PACKAGE (permite que você crie uma função authorize para cada package) e
OWA_SEC.CUSTOM (permite que você crie uma função authorize para cada usuário do banco
de dados).
owa_sec.set_authorization(scheme in integer);
Parâmetro
Descrição
scheme
Define o nome do esquema de autenticação
owa_sec.set_protection_realm
Rotina que especifica o reino de autenticação a utilizar. O usuário e senha digitados deverão
existir nesse reino.
owa_sec.set_protection_realm(realm in varchar2);
Parâmetro
Descrição
realm
Define o nome do reino o qual a página pertence
3.5 OWA_TEXT
owa_text.add2multi
Rotina que adiciona texto ao datatype owa_text.multi_line .
owa_text.add2multi(
stream in varchar2
mline in out multi_line
continue in boolean DEFAULT TRUE);
Parâmetro
Descrição
stream
Define o texto a ser adicionado
mline
Retorna um datatype owa_text.multi_line
continue
Se for TRUE, anexa o conteúdo na mesma linha, se for FALSE adiciona em nova linha
owa_text.new_row_list
Rotina que adiciona uma nova linha ao datatype owa_text.row_list.
/* procedure */
owa_text.new_row_list(rlist out row_list);
/* function */
owa_text.new_row_list return row_list;
Parâmetro
Descrição
rlist
Retorna um datatype owa_text.row_list
Resultado
Retorna um datatype owa_text.row_list
owa_text.print_multi
Rotina que exibe as linhas de um datatype owa_text.multi_line.
owa_text.print_multi(mline in multi_line);
Parâmetro
Descrição
mline
Define o datatype multi_line a ser exibido
Resultado
Retorna o conteúdo de um datatype multi_line
owa_text.print_row_list
Rotina que exibe as linhas de um datatype owa_text.row_list.
owa_text.print_row_list(rlist in row_list);
Parâmetro
Descrição
rlist
Define o datatype row_list a ser exibido
Resultado
Retorna o conteúdo de um datatype row_list
owa_text.stream2multi
Rotina que converte uma string para um datatype multi_line.
owa_text.stream2multi(
stream in varchar2
mline out multi_line);
Parâmetro
Descrição
stream
Define a string a converter
mline
Retorna o datatype multi_line
3.6 WPG_DOCLOAD
wpg_docload.download_file
Rotina que faz o download de um arquivo.
download_file(p_filename in varchar2,
p_bcaching in boolean default true);
download_file(p_blob in blob);
download_file(p_bfile in out bfile);
Parâmetro
Descrição
p_filename
Define o nome do arquivo a ser baixado
p_blob
Define o blob a ser baixado
p_bfile
Define o bfile a ser baixado
p_bcaching
Define se o browser está com cachê habilitado (TRUE, o padrão) ou não (FALSE)
Resultado
Retorna o arquivo especificado
3.7 OWA_PATTERN
owa_pattern.amatch
Função que retorna a posição de uma ocorrência de uma string.
owa_pattern.amatch(
line in varchar2
from_loc in integer
pat in varchar2
flags in varchar2 DEFAULT NULL) return integer;
owa_pattern.amatch(
line in varchar2
from_loc in integer
pat in out pattern
flags in varchar2 DEFAULT NULL) return integer;
owa_pattern.amatch(
line in varchar2
from_loc in integer
pat in varchar2
backrefs out owa_text.vc_arr
flags in varchar2 DEFAULT NULL) return integer;
owa_pattern.amatch(
line in varchar2
from_loc in integer
pat in out pattern
backrefs out owa_text.vc_arr
flags in varchar2 DEFAULT NULL) return integer;
Parâmetro
Descrição
line
Define o texto que será pesquisado
from_loc
Define a posição de início de busca
pat
Define o critério de busca
backrefs
Retorna o texto que conferiu com o critério de busca no datatype vc_arr
flags
Define se o critério de busca diferenciará as maiúsculas das minúsculas (i para não diferenciar)
Resultado
Retorna a posição do caractere depois da última ocorrência, contando desde o começo da linha. Se não
encontrar nenhuma ocorrência a função retorna 0.
owa_pattern.change
Rotina que busca e substitui alguma string em algum texto.
/* function */
owa_pattern.change(
line in out varchar2
from_str in varchar2
to_str in varchar2
flags in varchar2 DEFAULT NULL) return integer;
/* procedure */
owa_pattern.change(
line in out varchar2
from_str in varchar2
to_str in varchar2
flags in varchar2 DEFAULT NULL);
/* function */
owa_pattern.change(
mline in out owa_text.multi_line
from_str in varchar2
to_str in varchar2
flags in varchar2 DEFAULT NULL) return integer;
/* procedure */
owa_pattern.change(
mline in out owa_text.multi_line
from_str in varchar2
to_str in varchar2
flags in varchar2 DEFAULT NULL);
Parâmetro
Descrição
line
Define o texto que será pesquisado
mline
Define o texto que será pesquisado se for utilizado o datatype multi_line
from_str
Define ao expressão para fazer a substituição
to_str
Define o padrão de substituição
flags
Define se o critério de busca diferenciará as maiúsculas das minúsculas (i para não diferenciar) . Se for
especificado o "g", a substituição será feita em todas as ocorrências
Resultado
Retorna o número de substituições feitas
owa_pattern.getpat
Rotina que converte um VARCHAR2 para um owa_pattern.pattern_data.
owa_pattern.getpat(arg in VARCHAR2, pat in out pattern);
Parâmetro
Descrição
arg
Define a string para ser convertida
pat
Retorna o dado convertido no formato do datatype pattern_data
owa_pattern.match
Função booleana que retorna um valor se encontrar uma ocorrência de uma string em um texto.
owa_pattern.match(
line in varchar2
pat in varchar2
flags in varchar2 DEFAULT NULL) return boolean;
owa_pattern.match(
line in varchar2
pat in out pattern
flags in varchar2 DEFAULT NULL) return boolean;
owa_pattern.match(
line in varchar2
pat in varchar2
backrefs out owa_text.vc_arr
flags in varchar2 DEFAULT NULL) return boolean;
owa_pattern.match(
line in varchar2
pat in out pattern
backrefs out owa_text.vc_arr
flags in varchar2 DEFAULT NULL) return boolean;
owa_pattern.match(
mline in owa_text.multi_line
pat in varchar2
rlist out owa_text.row_list
flags in varchar2 DEFAULT NULL) return boolean;
owa_pattern.match(
mline in owa_text.multi_line
pat in out pattern
rlist out owa_text.row_list
flags in varchar2 DEFAULT NULL) return boolean;
Parâmetro
Descrição
line
Define o texto que será pesquisado
mline
Define o texto que será pesquisado se for utilizado o datatype multi_line
pat
Define o critério de busca
backrefs
Retorna o texto que conferiu com o critério de busca no datatype vc_arr
flags
Define se o critério de busca diferenciará as maiúsculas das minúsculas (i para não diferenciar)
rlist
Retorna a lista das ocorrências encontradas
flags
Define se o critério de busca diferenciará as maiúsculas das minúsculas (i para não diferenciar) .
Resultado
Retorna TRUE se a ocorrência for encontrada e FALSE caso contrário
3.8 OWA_OPT_LOCK
owa_opt_lock.checksum
Função que retorna o valor do checksum de uma string ou uma linha de uma tabela.
owa_opt_lock.checksum(p_buff in varchar2) return number;
owa_opt_lock.checksum(
p_owner in varchar2
p_tname in varchar2
p_rowid in rowid) return number;
Parâmetro
Descrição
p_buff
Define a string a ser calculado o checksum
p_owner
Define o dono da tabela
p_tname
Define o nome da tabela
p_rowid
Define o rowid da linha da tabela para se fazer o cálculo
Resultado
Retorna o valor numérico do checksum
owa_opt_lock.get_rowid
Função que retorna o ROWID de um datatype owa_opt_lock.vcArray.
owa_opt_lock.get_rowid(p_old_values in vcArray) return rowid;
Parâmetro
Descrição
p_old_values Define o vetor de valores de uma linha de uma tabela
Resultado
Retorna o valor do ROWID
owa_opt_lock.store_values
Rotina inserida dentro de um formulário HTML que armazena todos os valores das colunas de
uma linha de uma tabela como campos HIDDEN. Essa rotina é normalmente usada juntamente
com owa_opt_lock.verify_values.
owa_opt_lock.store_values(
p_owner in varchar2
p_tname in varchar2
p_rowid in rowid);
Parâmetro
Descrição
p_owner
Define o dono da tabela
p_tname
Define o nome da tabela
p_rowid
Define o rowid da linha da tabela
Resultado
Gera vários campos HIDDEN
owa_opt_lock.verify_values
Função que compara valores passados como parâmetro com valores armazenados na tabela. Essa
função recebe o resultado de um owa_opt_lock.store_values .
owa_opt_lock.verify_values(p_old_values in vcArray) return boolean;
Parâmetro
Descrição
p_old_values Define o vetor de valores de uma linha de uma tabela
Resultado
Retorna TRUE se os valores passados como parâmetro forem idênticos aos valores da linha da tabela; caso contrário retorna
FALSE
3.9 OWA_IMAGE
owa_image.get_x
Função que a coordenada X do ponto onde foi clicado na imagem mapeada.
owa_image.get_x(p in point) return integer;
Parâmetro
Descrição
p
Define o ponto onde o usuário clicou
Resultado
A coordenada X onde o usuário clicou
owa_image.get_y
Função que a coordenada Y do ponto onde foi clicado na imagem mapeada.
owa_image.get_y(p in point) return integer;
Parâmetro
Descrição
p
Define o ponto onde o usuário clicou
Resultado
A coordenada X onde o usuário clicou
3.10 OWA_CHART
Essa package mostra o resultado de um select em formato de gráfico de barra. Essa rotina não vem no web toolkit da base de
dados, consulte na seção de links no final do guia para saber de onde baixar.
owa_chart.show_chart
Função que exibe o resultado de um select em formato de gráfico de barra, tendo opções de
exibição tanto na horizontal como na vertical.
owa_chart.show_chart(
q in varchar2,
parm_name in owa.vc_arr default empty_vc_array,
parm_value in owa.vc_arr default empty_vc_array ,
chart_type in varchar2 default 'HBAR',
bar_image in varchar2,
chart_title in varchar2 default NULL,
axis in varchar2 default 'ZERO',
scale in number default 300,
bar_width in number default 40,
bar_height in number default 20,
num_mask in varchar2 default '999,999,999,999,999,999,999,999,999,999,999,999,999',
font_size in varchar2 default '-2',
max_rows in number default 2000,
show_summary in varchar2 default NULL,
image_locat in varchar2 default '/images/' );
owa_chart.show_chart(
c in varchar2,
chart_type in varchar2 default 'HBAR',
bar_image in varchar2,
chart_title in varchar2 default NULL,
axis in varchar2 default 'ZERO',
scale in number default 300,
bar_width in number default 40,
bar_height in number default 20,
num_mask in varchar2 default '999,999,999,999,999,999,999,999,999,999,999,999,999',
font_size in varchar2 default '-2',
max_rows in number default 2000,
show_summary in varchar2 default NULL,
image_locat in varchar2 default '/images/' );
Parâmetro
Descrição
q
Define SELECT com três colunas definindo respectivamente o link dos itens, o texto a ser exibido dos itens e o
valor a ser calculado no gráfico
parm_name Define o vetor dos parâmetros a serem utilizados no parâmetro q
parm_value
Define o vetor dos valores dos parâmetros a serem utilizados no parâmetro q
c
Define um cursor de um select já analisado, sem parâmetros
chart_type
Define o disposição do gráfico: na horizontal (HBAR) ou na vertical (VBAR)
bar_image
Define o nome da imagem a ser exibida na barra
chart_title
Define um título para o gráfico
axis
Define a relatividade do eixo em relação aos resultados. O padrão é zero (ZERO), mas ele pode estar em
relação ao primeiro (FIRST), ao último (LAST), ao maior valor (MAX), ao menor (MIN) à média (AVG)
scale
Define a escala do gráfico (somente com números inteiros positivos)
bar_width
Define o comprimento em pixels da barra em gráficos na vertical
bar_height
Define a altura em pixels da barra em gráficos na horizontal
num_mask
Define uma máscara para valores numéricos do gráfico
font_size
Define o tamanho da fonte do texto e título do gráfico
max_rows
Define o número máximo de linhas exibidas
show_summary Define o resumo do gráfico, com a opção de usar os seguintes valores: número de registros (C), o valor do eixo
(A), o menor valor (M), o maior valor (X), o valor médio (V), a somatória (S), o primeiro valor (F) e o último (L)
image_locat
Define o diretório virtual das imagens referenciadas pela package (padrão: "/images")
Resultado
O gráfico de barra da consulta definida
4. Construindo suas aplicações
4.1 O início de tudo: HTML
A idéia do HTML é simplesmente exibir alguma informação de uma maneira apresentável.
Naturalmente existem diversas maneiras de se fazer isso. A intenção inic ial era essa, mas depois
começaram a surgir novas necessidades. A internet cresceu e as pessoas não queriam usar as
páginas para simplesmente ler textos, elas gostariam de interagir com ele, digitando informações
e fazendo buscas de informações. Foi então que nasceu o HTML 2, que implementou o recurso
de formulários e de tabelas. Mais pra frente veio o HTML 3 que implementou os frames e o
suporte a Java/Javascript, e finalmente o HTML 4 implementou o uso de estilos.
O interessante é que o conhecimento de HTML no PL/SQL Web Toolkit ajuda, mas não é
fundamental, visto que não é necessário implementar nada em HTML dentro da procedure. O
pré-conhecimento em HTML ajuda no sentido de algumas funções possuem o mesmo nome em
HTML e PL/SQL.
Não iremos abordar esse tema aqui, pois não é o nosso foco, mas existem importantes pontos
que devem ser frisados:
Existem diversas fontes na internet que explicam e exemplificam o uso do HTML (consulte na
seção de links)
A maioria dos editores de texto trabalha com HTML, você digita um texto qualquer e salva-o no
formato HTML.
Existe um programa chamado Web Alchemy que faz a migração de HTML para PL/SQL
(consulte na seção de links).
4.2 Geração dinâmica de páginas: PL/SQL
A tendência natural da internet é geração dinâmica de páginas. Já imaginou toda vez que o seu
chefe pedir aquele relatório na web, você precisar fazer uma busca em alguma tabela e depois,
manualmente construir a página HTML? E no dia seguinte quando ele precisar de novo ter que
fazer tudo novamente?
O PL/SQL Web Toolkit existe para gerar páginas dinâmicas, obtendo resultados dinâmicos. O
conhecimento de PL/SQL é o seu único pré-requisito para desenvolver aplicações para a Web.
4.3 Não reinventar a roda
Muitas vezes a gente precisa de uma certa peculiaridade da nossa aplicação e, ao invés de
procurar saber se já foi implementada, prefere sair fazendo a sua própria solução. Muitas vezes
isso gera um gasto enorme de tempo e recursos que poderiam ser economizados com uma
simples consulta à documentação.
Esse guia foi feito para isso, antes de implementar algo, verifique se já não foi feito. Abaixo eu
enumero as packages explicando as suas finalidades.
Nome da Package
Descrição
HTP/HTF
São de longe as packages mais usadas, possuindo todas as funções de HTML como tabelas,
formulários, frames, etc. Usando somente essas packages é possível construir uma aplicação
completa de consulta e cadastro de registros. As duas packages são parecidas, mas a HTP
implementa os procedimentos do HTML e a HTP implementa as funções.
OWA_UTIL
É uma package com alguns recursos de exibição de dados de tabela, recursos de leitura de
informações da máquina cliente (IP da máquina, Browser, etc) e uma entrada de dados do tipo
informações da máquina cliente (IP da máquina, Browser, etc) e uma entrada de dados do tipo
data muito útil e fácil de usar em formulários.
OWA_COOKIE
É uma package utilizada para trabalhar com cookies, que são variáveis armazenadas pelo
browser que a aplicação usa para armazenar valores, como endereço de email ou opção de
idioma preferida.
OWA_SEC
É uma package que implementa o mecanismo de segurança da aplicação.
OWA_CUSTOM
É uma package sem rotinas pré-definidas, contendo somente uma rotina chamada authorize
que é implementada pelo desenvolvedor, utilizada para autenticar usuários da aplicação
juntamente configurada com a package OWA_SEC
OWA_TEXT
É uma package para trabalhar com textos grandes e manipula-los com variáveis específicas
WPG_DOCLOAD
É uma package utilizada para o upload e download de arquivos para uma tabela
OWA_PATTERN
É uma package utilizada para padronizar o mecanismo em busca em campos string, ela possui
rotinas que permitem buscar ocorrências de determinada seqüência ou padrão de caracteres,
algo como "todo endereço de email" ou "qualquer palavra que comece com C e termine com z"
OWA_OPT_LOCK
É uma package que possui rotinas que auxiliam a manter a sua aplicação consistente, sendo
criada para situações de várias atualizações simultâneas de diferentes usuários. Suas rotinas
são utilizadas juntamente com os formulários para garantir a integridade dos dados.
OWA_IMAGE
É uma package que resgata as coordenadas X e Y clicadas em alguma imagem onde ocorre
alguma espécie de mapeamento.
OWA_CHART
É uma package utilizada para exibir consultas no formato de gráfico de barras.
4.5 Além desse guia...
Com todo o conhecimento do PL/SQL Web Toolkit adquirido, a sua missão estará quase
cumprida. Aqui nós estamos limitados ao HTML, que não oferece nenhum sistema de validação
de dados.
Para resolver esse problema precisamos juntar o HTML com o JavaScript, uma linguagem
orientada a objeto que podemos, juntamente com os formulários, implementar uma validação de
dados. É possível especificar quais campos do formulário são obrigatórios, verificar se algum
endereço de email é valido, etc. A melhor parte dessa história é que quase todas as rotinas que
você precisa já foi feita por alguém, é só procurar na Internet (consulte na seção de links) algum
site de JavaScript e adaptar o seu código.
O padrão de layout do seu site é muito importante, principalmente quando se trata não só de
umas dez páginas, mas algo acima de cem. Quanto maior o número de páginas, maior será o seu
trabalho no HTML de especificar um padrão de cor e fonte para a sua página. Claro, isso se você
não usar os estilos. As folhas de estilos ou simplesmente estilos (conhecidos como CSS) no
HTML 4 surgiram para isso: estipular um padrão de layout no seu site. Procure mais informação
na Internet (consulte na seção de links) sobre os estilos, que com certeza é um tempo de
aprendizado investido que gera um retorno muito satisfatório.
4.6 Exemplos diversos
Nessa seção apresentaremos diversos exemplos para melhor compreender o uso do PL/SQL
Web Toolkit, assim como melhorar uma aplicação depois de pronta.
4.6.1 Testando o seu ambiente
Em primeiro lugar já estou contando com tudo configurado conforme o capítulo 2. Nessa seção
apresentaremos somente alguns testes antes de sair desenvolvendo. O primeiro deles será
verificar se o seu usuário do banco tem acesso às rotinas do PL/SQL Web Toolkit:


Se por acaso você obteve nenhuma linha retornada nessa consulta, os motivos podem ser três:
você pode ter digitado o comando SQL errado, ou o seu usuário não possui acesso às rotinas ou
o PL/SQL Web Toolkit não está instalado na base de dados. Se não souber como resolver esses
problemas consulte o DBA da sua empresa.
O segundo teste é criar uma procedure usando o PL/SQL Web Toolkit:
Se por acaso a criação da procedure apresentar erros, os motivos podem ser dois: você ter
digitado a procedure errado ou seu usuário do banco não ter privilégio de criação de procedures.
Novamente se não souber como resolver esses problemas consulte o DBA da sua empresa.
Como último teste devemos testar a nossa rotina no browser, de maneira que deva aparecer o
seguinte resultado (lembre-se de adaptar o endereço ao seu ambiente conforme o capítulo 2):

Agora estamos prontos para desenvolver aplicações na Web. Observe os exemplos a seguir e
complemente-os com as especificações das rotinas do capítulo 3.
4.6.1 Exemplo Simples
A maioria das rotinas do Toolkit, assim como o HTML, é baseada em tags. Essas tags definem o
formato que a informação (imagem, texto, link, etc.) será exibida.
Para não perder tempo na digitação dessas e outras rotinas de exemplo, consulte na seção de
links o endereço de download do arquivo de exemplos desse guia.
Abaixo segue o primeiro exemplo:
As rotinas utilizadas são bem simples. Utiliza-se htp.htmlopen e htp.htmlclose para definir um
documento HTML, htp.centeropen e htp.centerclose para centralizar tudo o que existe entre os
dois. Para criarmos um link para uma página usamos a rotina htp.anchor e para um link de
email usamos a rotina htp.mailto. Para exibirmos imagens utilizamos a htp.img (observe que é
uma imagem remota, que não se encontra no servidor local) e para exibirmos um traço
horizontal utilizamos htp.hr. Para a exibição de textos em tamanhos diferentes utiliza-se a rotina
htp.header.
Veja o resultado dessa procedure e, se necessário, consulte o código HTML gerado pela
procedure:
create or replace procedure exemplo1
is
begin
htp.htmlopen;
htp.comment(
'Feito por Fernando Boaglio para o Guia PL/SQL Web
Toolkit'
);
htp.centeropen;
htp.strong(
'Esse é o Exemplo1'
);
for a in
1
..
6
loop
htp.header(a,
' Exemplo do tamanho '
||a);
end loop;
htp.anchor(
'http://www.oracle.com'
,
'Site da Oracle'
);
htp.br;
htp.mailto(
'meu_email@mail.com'
,
'mande-me um email'
);
htp.br;
htp.hr;
htp.img(
'http://httpd.apache.org/images/apache_logo.gif'
);
htp.centerclose;
htp.htmlclose;
end;


4.6.2 Exibindo dados de uma tabela
Como se exibe linhas de uma tabela a partir de uma rotina em PL/SQL no SQL Plus? Sim, a
resposta é através de cursor. Como exibir esses valores na Web? Da mesma maneira!
Acompanhe os exemplos, primeiramente no SQL Plus:
Agora basta substituir o DBMS_OUTPUT.PUT_LINE por HTP.CENTER, recompilar a
procedure que se obtém o seguinte resultado:

Portanto basta a troca de maneira de exibir as informações que a sua aplicação funciona na Web.
Observe que qualquer tipo de consulta nas tabelas será feita via cursor.
4.6.3 Consulta com formulário simples
Com certeza o seu site não será eficaz se ele não usar formulários. Formulário é a base de
entrada de qualquer site de busca e qualquer site de cadastro. Começaremos fazendo um site de
busca de parâmetros contidos nas linhas da tabela V$OPTION do exemplo anterior. Observe que
a rotina chama ela mesma.
A rotina htp.formopen especifica qual procedure o formulário executará, a rotina htp.formtext
especifica que o parâmetro p_string será digitado num campo texto e passado como parâmetro
para a procedure definida no htp.formopen. A rotina htp.formsubmit especifica o botão do
formulário que ao ser clicado executará a procedure definida em htp.formopen.
Em seguida na rotina testa-se o parâmetro p_string e se ele foi informado executa-se a busca.
Observe o contador de linhas retornadas implementado atribuindo valores à variável
v_linhas.
Observe os exemplos de uso dessa rotina em seguida.
create or replace procedure exemplo3(p_string varchar2 default null)
is
cursor parametros is
select *
from v$option
where upper(parameter) like upper(
'%'
||p_string||
'%'
);
v_linhas number:=
0
;
begin
htp.htmlopen;
htp.comment(
'Feito por Fernando Boaglio para o Guia PL/SQL Web
Toolkit'
);
htp.centeropen;
htp.header(
4
,
'Entre com o parâmetro a ser buscado:'
);
htp.formopen(
'exemplo3'
);
htp.formtext(
'p_string'
);
htp.formsubmit(cvalue =>
'Fazer a busca'
);
htp.formclose;
htp.hr;
if p_string is not null then
htp.header(
4
,
'Busca por : [ '
||p_string||
' ]'
);
for rec in parametros loop
htp.center(rec.parameter||
'='
||rec.value);
v_linhas:=v_linhas+
1
;
end loop;
htp.br;
if v_linhas=
0
then
htp.center(
'Nenhum parâmetro foi encontrado'
);
elsif v_linhas=
1
then
htp.center(
'1 parâmetro foi encontrado'
);
else
htp.center(v_linhas||
' parâmetros foram encontrados'
);
end if;
htp.centerclose;
end if;
end;


Busca com retorno de várias linhas:
Busca com retorno de uma única linha:


Busca com retorno de nenhuma linha:
4.6.4 Uma aplicação completa: Agenda Web
Nada melhor do que uma aplicação completa para reunir os principais conceitos de uma
aplicação Web. A nossa aplicação chama-se "Agenda Web", e nada mais é do que uma simples
agenda de nomes e telefones composta por duas tabelas: uma de nomes e outra de cidades. Esse
exemplo é bem simples e não foi feito quase nada para melhorar o layout. A idéia aqui é
verificar o correto funcionamento das rotinas básicas de busca, alteração e remoção de registros.
Observe abaixo a estrutura das duas tabelas utilizadas: AW_CIDADES e AW_NOMES:
O prefixo AW dado aos nomes das tabelas são oriundos do nome da aplicação: Agenda Web. A
coluna ID presente nas duas tabelas é chave primária. Existe um relacionamento entre essas
tabelas, sendo que uma cidade pode estar cadastrada em vários nomes (defino entre as colunas
ID da tabela AW_CIDADES e CIDADE_ID da tabela AW_NOMES).
Para maiores detalhes, observem o código fonte que cria essa tabela:
São criadas agora duas sequences para controle do número do ID de cada tabela:
Depois de criada a tabela de cidades, faz-se uma carga inicial com todas as capitais do nosso
país utilizando a sequence criada.
create table AW_cidades
(id number constraint aw_cidades_id_pk primary key,
nome varchar2(100)
constraint aw_cidades_nome_nn not null
constraint aw_cidades_nome_uk unique,
estado varchar2(2) constraint aw_cidades_estado_nn not null)
/
create table AW_nomes
(id number constraint aw_nomes_id_pk primary key,
nome varchar2(100)
constraint aw_nomes_nome_nn not null
constraint aw_nomes_nome_uk unique,
celular varchar2(20) ,
email varchar2(100) ,
cidade_id number constraint aw_nomes_fk references aw_cidades(id) )
/
create sequence aw_nomes_seq
/
create sequence aw_cidades_seq
/
insert into aw_cidades
values (aw_cidades_seq.nextval,'Rio Branco','AC')
/
insert into aw_cidades
values (aw_cidades_seq.nextval,'Maceío','AL')
/
insert into aw_cidades
values (aw_cidades_seq.nextval,'Macapá','AP')
/
insert into aw_cidades
values (aw_cidades_seq.nextval,'Manaus','AM')
/
insert into aw_cidades
values (aw_cidades_seq.nextval,'Salvador','BA')
/
insert into aw_cidades
values (aw_cidades_seq.nextval,'Fortaleza','CE')
/
insert into aw_cidades
values (aw_cidades_seq.nextval,'Vitória','ES')
/
insert into aw_cidades
values (aw_cidades_seq.nextval,'Goiânia','GO')
/
insert into aw_cidades
values (aw_cidades_seq.nextval,'São Luis','MA')
/
insert into aw_cidades
values (aw_cidades_seq.nextval,'Cuibá','MG')
/
insert into aw_cidades
values (aw_cidades_seq.nextval,'Campo Grande','MS')
/
insert into aw_cidades
values (aw_cidades_seq.nextval,'Belo Horizonte','MG')
/
insert into aw_cidades
values (aw_cidades_seq.nextval,'Belém','PA')
/
insert into aw_cidades
values (aw_cidades_seq.nextval,'João Pessoa','PR')
/
insert into aw_cidades
values (aw_cidades_seq.nextval,'Curitiba','PN')
/
insert into aw_cidades
values (aw_cidades_seq.nextval,'Recife','PE')
/
insert into aw_cidades
values (aw_cidades_seq.nextval,'Tesina','PI')
/
insert into aw_cidades
values (aw_cidades_seq.nextval,'Rio de Janeiro','RJ')
/
insert into aw_cidades
values (aw_cidades_seq.nextval,'Natal','RN')
/
insert into aw_cidades
values (aw_cidades_seq.nextval,'Porto Alegre','RS')
/
insert into aw_cidades
values (aw_cidades_seq.nextval,'Porto Velho','RO')
/
insert into aw_cidades
values (aw_cidades_seq.nextval,'Boa Vista','RR')
/
insert into aw_cidades
values (aw_cidades_seq.nextval,'Florianópolis','SC')
/
Depois de criada a tabela de nomes, faz-se uma carga inicial com três nomes com dados
fictícios.
Agora basta instalar a package que compõe toda a aplicação e acessar via browser. As rotinas
principais da Agenda são essas:
insert into aw_cidades
values (aw_cidades_seq.nextval,'São Paulo','SP')
/
insert into aw_cidades
values (aw_cidades_seq.nextval,'Aracaju','SE')
/
insert into aw_cidades
values (aw_cidades_seq.nextval,'Palmas','TO')
/
insert into aw_nomes
values (aw_nomes_seq.nextval,'Santos
Dummont','9999999','santos@dummont.org.br',18)
/
insert into aw_nomes
values (aw_nomes_seq.nextval,'Getulio
Vargas','9999999','getulio@vargas.org.br',18)
/
insert into aw_nomes
values (aw_nomes_seq.nextval,'Pedro Álvares
Cabral','9999999','pedro@cabral.org.br',6)
/
create or replace package agenda is
/********************************************************************
Agenda Web 1.0
Feito por Fernando Boaglio para o Guia PL/SQL Web Toolkit
--------------------------------------------------------------------
requisitos míminos:
1.ambiente PL/SQL Toolkit instalado e configurado
2.Tabelas AW_NOMES e AW_CIDADES
--------------------------------------------------------------------
*********************************************************************/
procedure inicio;
procedure lista_cidades;
procedure lista_nome;
procedure relatorio;
procedure info;
procedure cadastra_cidade;
procedure cadastra_cidade2(p_nome varchar2,p_estado varchar2);
procedure cadastra_nome;
procedure cadastra_nome2(p_nome varchar2,p_celular varchar2,p_email varchar2,
p_estado varchar2);
procedure busca(p_string varchar2,p_tipo number);
procedure altera_cidade(p_id number);
procedure altera_cidade2(p_id number,p_nome varchar2,p_estado varchar2,p_submit varchar2);
procedure altera_nome(p_id number);
procedure altera_nome2(p_id number,p_nome varchar2,p_celular varchar2,p_email varchar2,
p_estado varchar2,p_submit varchar2);
end agenda;

Antes de explicarmos cada uma dessas rotinas públicas além das privadas auxiliares, iremos
mostrar as capacidades da aplicação, com algumas telas de partes da aplicação. Não se esqueça
que não é necessário digitar os exemplos aqui expostos, basta consultar no final do guia a seção
de links para fazer o download das rotinas já digitadas.
Essa é a tela inicial, onde se faz a busca e cadastro de nomes ou cidades, além de gerar listagens
dos dados e um relatório geral.
Em seguida observem a tela de cadastro de nome da aplicação:


Ao clicar em cadastrar é feita a gravação na base de dados e exibida a mensagem:


Em seguida temos a tela de cadastro de cidades:
Ao clicar em cadastrar é feito a gravação na base de dados e exibida a mensagem:

Além de cadastro temos as opções de listagem desses dados, como por exemplo, a listagem de
cidades:

Além de cadastro temos as opções de listagem desses dados, como por exemplo, a listagem de
nomes:
Para exibirmos um resumo de tudo temos o relatório geral, que segue a idéia de juntar todos os
dados num lugar só para impressão pelo usuário:

E finalmente uma pequena parte sobre o ambiente da aplicação e um contador dos dados
armazenados.


Para efetuarmos alguma alteração ou remoção de dados, necessitamos fazer uma busca,
conforme no exemplo abaixo feito na tela inicial, estamos fazendo uma busca por "nin":
O método de busca e alteração das cidades é idêntico ao método de busca dos nomes, por esse
motivo não será exibido. O resultado da busca acima é:

Dessa página tem a opção de detalhar os dados de "Zé Ninguém":


Observe que aqui temos duas opções diferentes para o mesmo registro: Alterar e Remover.
Abaixo foi escolhida a opção de alteração de "Zé Ninguém" para "João Ninguém":

Em seguida foi buscado novamente o mesmo registro (de agora "João Ninguém") e selecionado
a opção de "Remover":
Pronto, agora que já temos uma visão completa da aplicação poderemos detalhar cada rotina
utilizada e aprimorar os nossos conhecimentos do PL/SQL Web Toolkit.
Como a package specification já foi exibida no início, estaremos exibindo todas as 550 linhas
de código da package body por partes, adicionando os devidos comentários:
create or replace package body agenda is
/********************************************************************
Agenda Web 1.0
Feito por Fernando Boaglio para o Guia PL/SQL Web Toolkit
--------------------------------------------------------------------
requisitos míminos:
1.ambiente PL/SQL Toolkit instalado e configurado
2.Tabelas AW_NOMES e AW_CIDADES
--------------------------------------------------------------------
*********************************************************************/
/**************************************************************************
Rotinas Privadas
**************************************************************************/
procedure cabecalho(v_title varchar2)
is
begin
htp.htmlOpen;
htp.comment(
'Feito por Fernando Boaglio para o Guia PL/SQL Web Toolkit'
);
htp.title(v_title);
htp.bodyopen(cattributes =>
'BGCOLOR="#cccccc"'
);
htp.center(htf.header(
2
,
'Agenda Web'
));
htp.hr;
end;
As rotinas privadas somente são usadas por rotinas internas da própria package Agenda. É aqui
que tiramos proveito do PL/SQL na criação de páginas dinâmicas.
Imagine ter uma aplicação de 100 páginas onde seria necessária a mudança do logotipo da
empresa. Num sistema de HTML estático seria necessária a alteração de todos os arquivos
manualmente, no nosso sistema basta simplesmente a recompilação de uma procedure! Como
isso é possível? Simples, basta qualquer página sua chamar uma procedure que gere o cabeçalho
padrão de sua empresa, com as cores e logotipos adequados. Observe o código da procedure
cabecalho que tem exatamente essa função dentro dessa aplicação: todas as páginas geradas
chamam inicialmente essa rotina.
Assim como o cabeçalho padrão, normalmente uma página Web tem um rodapé padrão com
alguns links ou imagens. Isso também foi generalizado pela procedure rodape , que assim como
a cabecalho, é chamada por todas as outras rotinas.
Aqui estamos usando um recurso que a maioria das páginas da aplicação tem: o botão de
retorno. Essa procedure gera um botão que retorna a página anterior com um texto definido pelo
parâmetro p_texto (se não for especificado o parâmetro p_tipo) ou um botão que retorna à
página inicial da aplicação (se não for especificado o parâmetro p_tipo).
procedure rodape
is
begin
htp.br;
htp.hr;
htp.tableopen(cattributes =>
'WIDTH="100%"'
);
htp.tablerowopen;
htp.tabledata(htf.center(htf.header(
5
,
'Agenda Web <font color=red>usando o
PL/SQL Web Toolkit</font> por Fernando Boaglio'
)),calign =>
'RIGHT'
);
htp.tablerowclose;
htp.tableclose;
htp.bodyClose;
htp.htmlClose;
end;
procedure volta(p_texto varchar2,p_tipo number default null)
is
begin
htp.centeropen;
if p_tipo is null then
htp.formopen(
''
);
htp.p(
'<input type="button" value="'
||p_texto||
'" onclick="history.back()">'
);
htp.formclose;
else
htp.formopen(
'agenda.inicio'
);
htp.formsubmit(cvalue =>
'Voltar ao início'
);
htp.formclose;
end if;
htp.centerclose;
end;
Para evitar uma mensagem de erro como "A página requisitada não pode ser exibida" ou algo do
tipo, é interessante que a própria aplicação trate o erro. Se ela não puder tratar o erro então, que
ela o exiba de maneira apropriada. Para isso foi criada a procedure trata_erro que está presente
em todas as cláusulas exception da package. Qualquer erro que ocorra será chama essa rotina e
exibirá o erro de maneira apropriada.
procedure trata_erro(v_erro varchar2,v_erro_oracle varchar2)
is
begin
htp.br;
htp.center(htf.header(
2
,
'<font color="#ff0000">Erro na aplicação!</font>'
));
htp.br;
htp.br;
htp.center(v_erro);
htp.br;
htp.center(
'Erro Oracle: <b>'
||v_erro_oracle||
'</b>'
);
htp.br;
volta(
'Tente novamente'
);
rodape;
end;
/**************************************************************************
Rotinas Públicas
**************************************************************************/
procedure inicio
is
begin
cabecalho(
'Agenda Web'
);
htp.centeropen;
htp.tableopen;
htp.tablerowopen;
htp.tabledata(htf.anchor(
'agenda.cadastra_nome'
,
'Cadastrar novo nome'
),
'CENTER'
);
htp.tablerowclose;
htp.tablerowopen;
htp.tabledata(htf.anchor(
'agenda.cadastra_cidade'
,
'Cadastrar nova
cidade'
),
'CENTER'
);
htp.tablerowclose;
htp.tablerowopen;
htp.tabledata(htf.anchor(
'agenda.lista_cidades'
,
'Listar cidades'
),
'CENTER'
);
htp.tablerowclose;
htp.tablerowopen;
htp.tabledata(htf.anchor(
'agenda.lista_nome'
,
'Listar nomes'
),
'CENTER'
);
htp.tablerowclose;
htp.tablerowopen;
htp.tabledata(htf.anchor(
'agenda.relatorio'
,
'Relatório Geral'
),
'CENTER'
);
htp.tablerowclose;
htp.tablerowopen;
htp.tabledata(htf.anchor(
'agenda.info'
,
'Informações do sistema'
),
'CENTER'
);
htp.tablerowclose;
htp.tablerowopen;
htp.tabledata(
' '
);
htp.tablerowclose;
htp.tablerowopen;
htp.formopen(
'agenda.busca'
);
htp.tabledata(
'Busca por '
||htf.bold(
'nome'
)||
':
'
||htf.formtext(
'p_string'
,
30
,
100
)||
' '
||htf.formsubmit(cvalue =>
'Buscar'
));
htp.formhidden(
'p_tipo'
,
2
);
htp.formclose;
htp.tablerowclose;
htp.tablerowopen;
htp.tabledata(
' '
);
htp.tablerowclose;
htp.tablerowopen;
Essa rotina simplesmente exibe a página inicial da aplicação. Ela, assim como todas as outras se
utilizam das cabecalho e rodape .
Aqui um bom exemplo de uma rápida implementação utilizando rotinas prontas: chamando-se o
cabecalho e rodape temos o layout montado e chamando a rotina OWA_UTIL.TABLEPRINT
temos uma busca facilmente exibida na aplicação. Aqui exibimos os nomes e estados das
cidades cadastradas.
Exemplo semelhante ao anterior, porém a busca é diferente, estão sendo exibidos agora os
registros dos nomes, com informações de nome, celular e email.
htp.formopen(
'agenda.busca'
);
htp.tabledata(
'Busca por '
||htf.bold(
'cidade'
)||
':
'
||htf.formtext(
'p_string'
,
30
,
100
)||
' '
||htf.formsubmit(cvalue =>
'Buscar'
));
htp.formhidden(
'p_tipo'
,
1
);
htp.formclose;
htp.tablerowclose;
htp.tableclose;
htp.centerclose;
rodape;
end;
procedure lista_cidades
is
v_teste boolean;
begin
cabecalho(
'Cidades Cadastradas'
);
htp.br;
htp.center(htf.header(
3
,
'Cidades Cadastradas'
));
htp.br;
htp.centeropen;
v_teste:=owa_util.tableprint(
'aw_cidades '
,ccolumns=>
'nome,estado'
,cclauses =>
'order by nome'
,cattributes =>
'BORDER=10'
);
htp.centerclose;
htp.br;
volta(
'Voltar'
);
rodape;
end;
procedure lista_nome
is
v_teste boolean;
begin
cabecalho(
'Cidades Cadastradas'
);
htp.br;
htp.center(htf.header(
3
,
'Nomes Cadastrados'
));
htp.br;
htp.centeropen;
v_teste:=owa_util.tableprint(
'aw_nomes'
,ccolumns=>
'nome,celular,email'
,cclauses =>
'order by nome'
,cattributes =>
'BORDER=10'
);
htp.centerclose;
htp.br;
volta(
'Voltar'
);
rodape;
end;
Aqui um relatório customizado com um layout um pouco diferente das rotinas do OWA_UTIL.
Para isso ser possível somente criando-se as tabelas HTML com as rotinas do HTP e exibindo as
informações da maneira mais adequada. O cursor nomes gera a busca consultando as duas
tabelas estabelecendo o devido relacionamento.
Mais adiante, depois da tabela HTML montada é executado um loop de FOR para exibir todas
as linhas. No final do relatório também é exibida a data de quando o mesmo foi gerado.
procedure relatorio
is
cursor nomes
is
select n.nome,n.celular,n.email,c.nome||
' ('
||c.estado||
')'
cidade
from aw_nomes n,aw_cidades c
where n.cidade_id=c.id
order by
1
;
begin
cabecalho(
'Relatório Geral'
);
htp.centeropen;
htp.header(
2
,
'Relatório Geral'
);
htp.tableopen(
'BORDER=10'
);
htp.tablerowopen;
htp.tableheader(htf.big(
'Nome'
));
htp.tableheader(htf.big(
'Celular'
));
htp.tableheader(htf.big(
'email'
));
htp.tableheader(htf.big(
'Cidade'
));
htp.tablerowclose;
for rec_nomes in nomes loop
htp.tablerowopen;
htp.tableheader(rec_nomes.nome);
htp.tableheader(rec_nomes.celular);
htp.tableheader(htf.mailto(rec_nomes.email,rec_nomes.email));
htp.tableheader(rec_nomes.cidade);
htp.tablerowclose;
end loop;
htp.tableclose;
htp.header(
5
,
'gerado em '
||to_char(sysdate,
'DD/MM/YYYY "("HH24:MI"h)" '
));
htp.centerclose;
rodape;
end;
procedure info
is
v_versao varchar2(
20
);
v_valor number;
begin
cabecalho(
'Infomações do Sistema'
);
htp.centeropen;
htp.tableopen(
'BORDER=0'
);
htp.tablerowopen;
htp.tabledata(htf.bold(
'Sistema:'
),
'RIGHT'
);
htp.tabledata(
'Agenda Web versão 1.0'
);
htp.tablerowclose;
htp.tablerowopen;
htp.tabledata(htf.bold(
'Tecnologia:'
),
'RIGHT'
);
htp.tabledata(
'PL/SQL Web Toolkit'
);
htp.tablerowclose;
htp.tablerowopen;
htp.tabledata(htf.bold(
'Versão do Oracle:'
),
'RIGHT'
);
select substr(banner,instr(lower(banner),
'release'
,
1
)+
8
, length(banner)-
Instr(banner,
'-'
,
1
)-
1
)
into v_versao
from v$version
where rownum=
1
;
Aqui a procedure info resgata da view V$VERSION a versão do banco de dados utilizado.
Além disso, é feita uma soma dos registros cadastrados nas tabelas da aplicação e exibidos na
tela. Observe no final da rotina a cláusula EXCEPTION que chama a rotina trata_erro.
Aqui temos a rotina de cadastro de cidades, que cria um formulário chamando a procedure
cadastra_cidade2, passando como parâmetro os valores p_nome e p_estado.
htp.tabledata(v_versao);
htp.tablerowclose;
htp.tablerowopen;
htp.tabledata(htf.bold(
'Cidades cadastradas:'
),
'RIGHT'
);
select count(*)
into v_valor
from aw_cidades;
htp.tabledata(v_valor);
htp.tablerowclose;
htp.tablerowopen;
htp.tabledata(htf.bold(
'Nomes cadastrados:'
),
'RIGHT'
);
select count(*)
into v_valor
from aw_nomes;
htp.tabledata(v_valor);
htp.tablerowclose;
htp.tableclose;
htp.centerclose;
volta(
'Voltar'
);
rodape;
exception when others then trata_erro(
'Erro'
,SQLERRM);
end;
procedure cadastra_cidade
is
begin
cabecalho(
'Cadastro de Nova Cidade'
);
htp.centeropen;
htp.header(
3
,
'Cadastro de Cidade'
);
htp.br;
htp.formopen(
'agenda.cadastra_cidade2'
);
htp.tableopen;
htp.tablerowopen;
htp.tabledata(
'Nome:'
,calign =>
'RIGHT'
);
htp.tabledata(htf.formtext(
'p_nome'
,csize =>
30
,cmaxlength =>
100
));
htp.tablerowclose;
htp.tablerowopen;
htp.tabledata(
'Estado:'
,calign =>
'RIGHT'
);
htp.tabledata(htf.formtext(
'p_estado'
,csize =>
2
,cmaxlength =>
2
));
htp.tablerowclose;
htp.tablerowopen;
htp.tabledata(htf.formsubmit(cvalue =>
'Cadastrar'
),ccolspan =>
2
);
htp.tablerowclose;
htp.tableclose;
htp.formclose;
htp.centerclose;
htp.br;
volta(
'Voltar'
);
rodape;
exception when others then trata_erro(
'Erro'
,SQLERRM);
end;
Aqui ocorre a inserção do registro na tabela. Se não ocorrer erro, será exibida a mensagem de
cadastro com sucesso; caso contrário será exibida a mensagem de erro do Oracle.
procedure cadastra_cidade2(p_nome varchar2,p_estado varchar2)
is
begin
cabecalho(
'Cadastro de Nova Cidade'
);
htp.br;
insert into aw_cidades
values (aw_cidades_seq.nextval,p_nome,p_estado);
htp.br;
htp.center(htf.header(
3
,
'Cidade cadastrada com '
||htf.bold(
'Sucesso!'
)));
htp.br;
volta(
''
,
1
);
rodape;
exception when others then trata_erro(
'Erro'
,SQLERRM);
end;
procedure cadastra_nome
is
cursor cidades
is
select nome||
' ('
||estado||
')'
nome,id
from aw_cidades
order by nome;
begin
cabecalho(
'Cadastro de Novo Nome'
);
htp.centeropen;
htp.header(
3
,
'Cadastro de Nome'
);
htp.br;
htp.formopen(
'agenda.cadastra_nome2'
);
htp.tableopen;
htp.tablerowopen;
htp.tabledata(
'Nome:'
,calign =>
'RIGHT'
);
htp.tabledata(htf.formtext(
'p_nome'
,csize =>
30
,cmaxlength =>
100
));
htp.tablerowclose;
htp.tablerowopen;
htp.tabledata(
'Celular:'
,calign =>
'RIGHT'
);
htp.tabledata(htf.formtext(
'p_celular'
,csize =>
10
,cmaxlength =>
20
));
htp.tablerowclose;
htp.tablerowopen;
htp.tabledata(
'Email:'
,calign =>
'RIGHT'
);
htp.tabledata(htf.formtext(
'p_email'
,csize =>
30
,cmaxlength =>
100
));
htp.tablerowclose;
htp.tablerowopen;
htp.tabledata(
'Cidade:'
,calign =>
'RIGHT'
);
htp.p(
'<TD>'
);
htp.formselectopen(
'p_estado'
);
for rec_cidades in cidades loop
htp.formselectoption(rec_cidades.nome,cattributes =>
'VALUE="'
||rec_cidades.id||
'"'
);
end loop;
htp.formselectclose;
htp.p(
'</TD>'
);
htp.tablerowclose;
htp.tablerowopen;
htp.tabledata(htf.formsubmit(cvalue =>
'Cadastrar'
),ccolspan =>
2
);
htp.tablerowclose;
htp.tableclose;
htp.formclose;
htp.centerclose;
htp.br;
volta(
'Voltar'
);
rodape;
exception when others then trata_erro(
'Erro'
,SQLERRM);
end;
Aqui temos a rotina de cadastro de nomes, que cria um formulário chamando a procedure
cadastra_nome2, passando como parâmetro os valores p_nome, p_celular, p_email e
p_estado. Observe o uso do formulário com lista de opções (htp.formselect) combinado com
uma busca na tabela de cidades.
Aqui ocorre a inserção do registro na tabela. Se não ocorrer erro, será exibida a mensagem de
cadastro com sucesso; caso contrário será exibida a mensagem de erro do Oracle.
procedure cadastra_nome2(p_nome varchar2,p_celular varchar2,p_email varchar2,p_estado
varchar2)
is
begin
cabecalho(
'Cadastro de Novo Nome'
);
htp.br;
insert into aw_nomes
values (aw_nomes_seq.nextval,p_nome,p_celular,p_email,p_estado);
htp.br;
htp.center(htf.header(
3
,
'Nome cadastrado com '
||htf.bold(
'Sucesso!'
)));
htp.br;
volta(
''
,
1
);
rodape;
exception when others then trata_erro(
'Erro'
,SQLERRM);
end;
procedure busca(p_string varchar2,p_tipo number)
is
cursor busca1
is
select *
from aw_cidades
where upper(nome) like upper(
'%'
||p_string||
'%'
);
cursor busca2
is
select *
from aw_nomes
where upper(nome) like upper(
'%'
||p_string||
'%'
)
or celular like
'%'
||p_string||
'%'
or upper(email) like upper(
'%'
||p_string||
'%'
);
v_contador number:=
0
;
begin
cabecalho(
'Busca por "'
||p_string||
'"'
);
htp.br;
htp.center(htf.header(
3
,
'Busca por "'
||p_string||
'"'
));
htp.hr;
htp.centeropen;
htp.tableopen;
if p_tipo=
1
then
-- busca por cidade;
for rec_busca in busca1 loop
htp.tablerowopen;
htp.tabledata(htf.anchor(
'agenda.altera_cidade?p_id='
||rec_busca.id,rec_busca.nome));
htp.tabledata(rec_busca.estado);
htp.tablerowclose;
v_contador:=v_contador+
1
;
end loop;
if v_contador=
0
then
htp.tablerowopen;
htp.tabledata(htf.big(
'Não foi encontrada nenhuma cidade !'
));
htp.tablerowclose;
end if;
else
Nessa procedure busca é feita a busca para dois casos exclusivos: busca por cidades ou busca
por nomes. Em cada um deles os resultados (se existirem) são exibidos como resultado da busca
nos cursores busca1 ou busca2. Conforme a busca é detalhada ao clicar numa linha, é exibida a
tela de alteração/remoção do registro, chamando a rotina altera_nome ou altera_cidade .
Essa rotina é usada pela procedure busca, que passa o número da cidade a ser alterada para
p_id. A procedure altera_cidade consulta a tabela e lê as informações sobre aquela cidade
-- busca por nome
for rec_busca in busca2 loop
htp.tablerowopen;
htp.tabledata(htf.anchor(
'agenda.altera_nome?p_id='
||rec_busca.id,rec_busca.nome));
htp.tabledata(rec_busca.celular);
htp.tabledata(rec_busca.email);
htp.tablerowclose;
v_contador:=v_contador+
1
;
end loop;
if v_contador=
0
then
htp.tablerowopen;
htp.tabledata(htf.big(
'Não foi encontrado nenhum nome !'
));
htp.tablerowclose;
end if;
end if;
htp.tableclose;
htp.centerclose;
volta(
'Voltar'
);
rodape;
exception when others then trata_erro(
'Erro'
,SQLERRM);
end;
procedure altera_cidade(p_id number)
is
rec_cidade aw_cidades%rowtype;
begin
select *
into rec_cidade
from aw_cidades
where id=p_id;
cabecalho(
'Alteração de Cidade'
);
htp.centeropen;
htp.header(
3
,
'Alteração de Cidade'
);
htp.br;
htp.formopen(
'agenda.altera_cidade2'
);
htp.formhidden(
'p_id'
,p_id);
htp.tableopen;
htp.tablerowopen;
htp.tabledata(
'Nome:'
,calign =>
'RIGHT'
);
htp.tabledata(htf.formtext(
'p_nome'
,csize =>
30
,cmaxlength =>
100
,cvalue =>
rec_cidade.nome));
htp.tablerowclose;
htp.tablerowopen;
htp.tabledata(
'Estado:'
,calign =>
'RIGHT'
);
htp.tabledata(htf.formtext(
'p_estado'
,csize =>
2
,cmaxlength =>
2
,cvalue =>
rec_cidade.estado));
htp.tablerowclose;
htp.tablerowopen;
htp.tabledata(htf.formsubmit(
'p_submit'
,
'Alterar'
));
htp.tabledata(htf.formsubmit(
'p_submit'
,
'Remover'
));
htp.tablerowclose;
htp.tableclose;
htp.formclose;
htp.centerclose;
htp.br;
volta(
'Voltar'
);
rodape;
exception when others then trata_erro(
'Erro'
,SQLERRM);
end;
identificada por p_id e exibe dentro do formulário para ser alterado. Essa alteração é feita por a
outra rotina, a procedure altera_cidade2. Temos aqui um caso interessante implementado: o
mesmo formulário tem duas opções: "Alterar" e "Remover"; isso é possível utilizando a rotina
htp.formsubmit também para a passagem de parâmetro (p_submit).
Essa rotina recebe os valores a serem alterados p_nome e p_estado para a cidade identificada
por p_id e, se p_submit for igual a "Alterar" será feito o update, caso contrário o delete. Se
essas operações forem bem sucedidas será exibida uma mensagem de sucesso.
procedure altera_cidade2(p_id number,p_nome varchar2,p_estado varchar2,p_submit
varchar2)
is
begin
cabecalho(
'Alteração de Cidade'
);
htp.br;
if p_submit=
'Alterar'
then
update aw_cidades
set nome=p_nome,estado=p_estado
where id=p_id;
htp.center(htf.header(
3
,
'Cidade '
||p_nome||
' alterada com
'
||htf.bold(
'Sucesso!'
)));
else
delete aw_cidades
where id=p_id;
htp.center(htf.header(
3
,
'Cidade '
||p_nome||
' removida com
'
||htf.bold(
'Sucesso!'
)));
end if;
htp.br;
volta(
''
,
1
);
rodape;
exception when others then trata_erro(
'Erro'
,SQLERRM);
end;
procedure altera_nome(p_id number)
is
cursor cidades
is
select nome||
' ('
||estado||
')'
nome,id
from aw_cidades
order by nome;
rec_nome aw_nomes%rowtype;
begin
select *
into rec_nome
from aw_nomes
where id=p_id;
cabecalho(
'Alteração de Nome'
);
htp.centeropen;
htp.header(
3
,
'Alteração de Nome'
);
htp.br;
htp.formopen(
'agenda.altera_nome2'
);
htp.formhidden(
'p_id'
,p_id);
htp.tableopen;
htp.tablerowopen;
htp.tabledata(
'Nome:'
,calign =>
'RIGHT'
);
htp.tabledata(htf.formtext(
'p_nome'
,csize =>
30
,cmaxlength =>
100
,cvalue =>
rec_nome.nome));
htp.tablerowclose;
htp.tablerowopen;
Essa rotina funciona da mesma forma que a altera_cidade , porém com campos referentes aos
nomes cadastrados na tabela AW_NOMES.
E finalmente temos a rotina altera_nome2 que funciona de forma semelhante à rotina
altera_cidade2.
htp.tabledata(
'Celular:'
,calign =>
'RIGHT'
);
htp.tabledata(htf.formtext(
'p_celular'
,csize =>
10
,cmaxlength =>
20
,cvalue =>
rec_nome.celular));
htp.tablerowclose;
htp.tablerowopen;
htp.tabledata(
'Email:'
,calign =>
'RIGHT'
);
htp.tabledata(htf.formtext(
'p_email'
,csize =>
30
,cmaxlength =>
100
,cvalue=>rec_nome.email));
htp.tablerowclose;
htp.tablerowopen;
htp.tabledata(
'Cidade:'
,calign =>
'RIGHT'
);
htp.p(
'<TD>'
);
htp.formselectopen(
'p_estado'
);
for rec_cidades in cidades loop
if (rec_nome.cidade_id=rec_cidades.id) then
htp.formselectoption(rec_cidades.nome,
'Y'
,
'VALUE="'
||rec_cidades.id||
'"'
);
else
htp.formselectoption(rec_cidades.nome,cattributes =>
'VALUE="'
||rec_cidades.id||
'"'
);
end if;
end loop;
htp.formselectclose;
htp.p(
'</TD>'
);
htp.tablerowclose;
htp.tablerowopen;
htp.tabledata(htf.formsubmit(
'p_submit'
,
'Alterar'
));
htp.tabledata(htf.formsubmit(
'p_submit'
,
'Remover'
));
htp.tablerowclose;
htp.tableclose;
htp.formclose;
htp.centerclose;
htp.br;
volta(
'Voltar'
);
rodape;
exception when others then trata_erro(
'Erro'
,SQLERRM);
end;
procedure altera_nome2(p_id number,p_nome varchar2,p_celular varchar2,p_email
varchar2,p_estado varchar2,p_submit varchar2)
is
begin
cabecalho(
'Alteração do Nome '
||p_nome);
htp.br;
if p_submit=
'Alterar'
then
update aw_nomes
set nome=p_nome,celular=p_celular,email=p_email,cidade_id=p_estado
where id=p_id;
htp.center(htf.header(
3
,
'Nome '
||p_nome||
' alterado com
'
||htf.bold(
'Sucesso!'
)));
else
delete aw_nomes
where id=p_id;
htp.center(htf.header(
3
,
'Nome '
||p_nome||
' removido com
'
||htf.bold(
'Sucesso!'
)));
end if;
htp.br;
volta(
''
,
1
);
rodape;
exception when others then trata_erro(
'Erro'
,SQLERRM);
end;

4.6.5 Melhorando a aplicação Agenda Web
Agora que compreendemos o funcionamento da aplicação poderemos fazer um olhar crítico a
essa aplicação e comentar algumas falhas e algumas melhorias que poderiam ser implementadas.
A princípio poderia existir uma melhoria no cadastro, visto que os campos obrigatórios da
aplicação não são validados e ocasionam erro. Tente cadastrar uma cidade sem informar o nome,
ocorrerá esse erro:
A melhor maneira de se evitar esse erro é impedir que a procedure cadastra_cidade2 seja chamada
sem existir valor para cidade. Como implementar isso se o HTML não faz nenhum tipo de
validação? Simples, basta usar alguma linguagem de script, como o JavaScript. Ele foi criado pela
Netscape para complementar o HTML no sentido de corrigir essas falhas e ajudar na validação de
dados entre diversas outras coisas. Ilustrarei aqui um exemplo de corrigir o nosso problema usando
JavaScript.
Alterando-se o código da procedure cadastra_cidade teremos a validação procurada.
Aqui temos uma rotina adicionada e outra alterada. Com htp.script foi possível adicionarmos um
script que faz a validação não só do nome da cidade, mas do estado também. Em seguida alteramos
a rotina htp.formopen adicionando a chamada à função checa_campos quando for clicado (que é o
evento onSubmit do JavaScript). Essa rotina pode ser facilmente adaptada para outras aplicações,
assim como outras rotinas de JavaScript podem ser inseridas no seu código sem maiores problemas.
Experimente adaptar a rotina checa campos para a rotina cadastra_nome . Observe agora o
resultado dessa implementação:
procedure cadastra_cidade
is
begin
cabecalho(
'Cadastro de Nova Cidade'
);
htp.script(
'
function checa_campos()
{ if (document.form.p_nome.value == "")
{ alert("Por favor coloque a informação da cidade."); return false; }
if (document.form.p_estado.value == "")
{ alert("Por favor coloque a informação do estado."); return false; }
return true;
}
','
JavaScript
');
htp.centeropen;
htp.header(
3
,
'Cadastro de Cidade'
);
htp.br;
htp.formopen(
'agenda.cadastra_cidade2'
,cattributes =>
'name="form"
onSubmit="return checa_campos(this);"'
);
htp.tableopen;
htp.tablerowopen;

Outras particularidades que poderiam ser melhoradas: o layout poderia ser bem melhorado com a
utilização das folhas de estilos (CSS), a segurança que na aplicação não está presente poderia ser
implementada com uma rotina de login de usuário e senha.
5. Conclusão
Agora que já entendemos esses exemplos você está totalmente apto a criar a sua aplicação. Sempre comece desenvolvendo da
maneira mais simples, sem ênfase ao layout e sem rotinas de JavaScript.
Depois comece a melhorar a sua aplicação aos poucos, sempre fazendo cópia das versões anteriores para eventuais problemas.
Espero que tenha gostado e feito bom proveito desse guia. Muito obrigado pelo seu tempo e espero que eu tenha solucionado
muito de seus problemas.
6.Sobre o autor
Tendo formação de Bacharel em Ciências da Computação pela UNESP, o paulistano Fernando Boaglio atua no mercado
Oracle/Web desde 1996, analisando e desenvolvendo aplicações. Atua na área de treinamento como instrutor oficial pela Oracle
Education desde 1998, não perdendo o enfoque de consultoria de seus clientes. Seus focos principais são as tecnologias de
desenvolvimento web, assim como as ferramentas que a Oracle proporciona, como o Oracle Portal.
O autor também gerencia a lista de usuários (
usuários_oracle@yahoogrupos.com.br
) , além de dedicar parte de seu site ao
sistema operacional Linux, com diversos tutoriais com ênfase de seu uso com Oracle, além de ser o tradutor oficial do documento
de instalação ORACLE-HOWTO.
Para contatar o autor visite o seu site
http://www.oracle.matrix.com.br/
que já existe há três anos, ou envie um email para
oracle@matrix.com.br
.
7. Links
Nessa seção juntamos todos os links desse guia, de maneira que aqui será a sua fonte extra de informação:
HTML
http://www.w3.org/TR/html4/
http://www.icmsc.sc.usp.br/manuals/HTML/
http://www.htmlguide.kit.net/
http://www.abcdohtml.hpg.ig.com.br/index.htm
http://www.aquivoceaprendehtml.hpg.ig.com.br/
http://archive.ncsa.uiuc.edu/General/Internet/WWW/HTMLPrimerAll.html
http://www.davesite.com/webstation/html/
Estilos (CSS)
http://www.w3.org/Style/CSS/
http://www.tutcss.hpg.ig.com.br/
http://hotwired.lycos.com/webmonkey/authoring/stylesheets/tutorials/tutorial1.html
http://geocities.yahoo.com.br/doc2web/Aprender/CSS2/Apresentacao.html
JavaScript
http://www.javascriptsource.com
http://www.htmlguide.kit.net/scripts/javascript.htm
http://www.geocities.com/SiliconValley/Network/7445/script.htm
http://www.javascriptbrasil.hpg.ig.com.br/
OWA_CHART
http://uisnt1.humboldt.edu/otn/library/product/appsvrs/webapp/info/chart/chart.htm
Web Alchemy
http://www.oracle.matrix.com.br/download/
Download dos
exemplos do guia
http://www.oracle.matrix.com.br/guia/
Página do Autor
http://www.oracle.matrix.com.br/