- Este tópico contém 19 respostas, 3 vozes e foi atualizado pela última vez 16 anos, 2 meses atrás por Ishii.
-
AutorPosts
-
19 de setembro de 2008 às 10:22 pm #82773Anônimo
Como funciona um packages?
Eu posso criar uma function ou procedure dentro dele?
Se possivel postar um exemplo.19 de setembro de 2008 às 10:50 pm #82774Marcio68AlmeidaParticipanteuma package é um conjunto de procedures e/ou functions que trabalham de forma integrada, por isso elas são empacotadas.
a package é dividida em duas partes, header e body.
exemplos você encontra à vontade nas literaturas e links da internet…19 de setembro de 2008 às 11:03 pm #82777IshiiParticipanteOlá,
Package nada mais é que um pacote de procedures e functions, isso otimiza bastante a performance uma vez que o instanciamento de uma procedure ou function dentro de uma package carrega toda a package e executa as procedures e functions em memória…
Ela se divide em Especificação e Corpo sendo que na Especificação são declaradas as Procedures e seus parâmetros e suas variáveis globais, já no Corpo podem ser declaradas variáveis da Procedure/function e suas rotinas.
Segue exemplo simplificado:
create or replace package pck_teste is
function func_teste (pIN_fun varchar2) return number;
procedure proc_teste (pIN_pro varchar2);
end pck_teste;
create or replace package body pck_teste as
function func_teste (pIN_fun varchar2) return number is
--
nReturn number;
--
begin
--
null;
--
return nReturn;
--end func_teste;
procedure proc_teste (pIN_pro varchar2) is
--
begin
--
null;
--end proc_teste;
end pck_teste;
Sempre crie a Especificação primeiro e depois o Corpo.
Espero ter ajudado.
[]s Ishii
23 de setembro de 2008 às 8:12 pm #82826AnônimoIshii, tentei montar uma procedure e uma function só que não deu certo.
Se for possivel confere para mim.ESPECIFICAÇÃO
create or replace package TESTE as
procedure INSERT_CLIENTE(
sp_nome ClIente.Nome%type,
sp_endereco Cliente.Endereco%type,
sp_dtcadastro Cliente.DtCadastro%type,
qte_linhas OUT INTEGER);function BUSCA_CLIENTE(varbusca in number)
RETURN CLIENTE%ROWTYPE IS var_CLIENTE CLIENTE%ROWTYPE;
end TESTE;CORPO TEXTO
create or replace package body “TESTE” is
procedure INSERT_CLIENTE
is
begin
INSERT INTO CLIENTE(Nome,Endereco,DtCadastro)
VALUES(sp_nome,sp_endereco,sp_dtcadastro);
qte_linhas := sql%ROWCOUNT;
end INSERT_CLIENTE;function BUSCA_CLIENTE(varbusca in number)is
BEGIN
SELECT Codigo, Nome, Endereco, DtCadastro
INTO var_CLIENTE.Codigo, var_CLIENTE.Nome, var_CLIENTE.Endereco, var_CLIENTE.DtCadastro from Cliente where Cliente.Codigo=varbusca;
RETURN var_CLIENTE;
end BUSCA_CLIENTE;
end TESTE;23 de setembro de 2008 às 8:12 pm #82827AnônimoIshii, tentei montar uma procedure e uma function só que não deu certo.
Se for possivel confere para mim.ESPECIFICAÇÃO
create or replace package TESTE as
procedure INSERT_CLIENTE(
sp_nome ClIente.Nome%type,
sp_endereco Cliente.Endereco%type,
sp_dtcadastro Cliente.DtCadastro%type,
qte_linhas OUT INTEGER);function BUSCA_CLIENTE(varbusca in number)
RETURN CLIENTE%ROWTYPE IS var_CLIENTE CLIENTE%ROWTYPE;
end TESTE;CORPO TEXTO
create or replace package body “TESTE” is
procedure INSERT_CLIENTE
is
begin
INSERT INTO CLIENTE(Nome,Endereco,DtCadastro)
VALUES(sp_nome,sp_endereco,sp_dtcadastro);
qte_linhas := sql%ROWCOUNT;
end INSERT_CLIENTE;function BUSCA_CLIENTE(varbusca in number)is
BEGIN
SELECT Codigo, Nome, Endereco, DtCadastro
INTO var_CLIENTE.Codigo, var_CLIENTE.Nome, var_CLIENTE.Endereco, var_CLIENTE.DtCadastro from Cliente where Cliente.Codigo=varbusca;
RETURN var_CLIENTE;
end BUSCA_CLIENTE;
end TESTE;23 de setembro de 2008 às 8:13 pm #82828AnônimoIshii, tentei montar uma procedure e uma function só que não deu certo.
Se for possivel confere para mim.ESPECIFICAÇÃO
create or replace package TESTE as
procedure INSERT_CLIENTE(
sp_nome ClIente.Nome%type,
sp_endereco Cliente.Endereco%type,
sp_dtcadastro Cliente.DtCadastro%type,
qte_linhas OUT INTEGER);function BUSCA_CLIENTE(varbusca in number)
RETURN CLIENTE%ROWTYPE IS var_CLIENTE CLIENTE%ROWTYPE;
end TESTE;CORPO TEXTO
create or replace package body “TESTE” is
procedure INSERT_CLIENTE
is
begin
INSERT INTO CLIENTE(Nome,Endereco,DtCadastro)
VALUES(sp_nome,sp_endereco,sp_dtcadastro);
qte_linhas := sql%ROWCOUNT;
end INSERT_CLIENTE;function BUSCA_CLIENTE(varbusca in number)is
BEGIN
SELECT Codigo, Nome, Endereco, DtCadastro
INTO var_CLIENTE.Codigo, var_CLIENTE.Nome, var_CLIENTE.Endereco, var_CLIENTE.DtCadastro from Cliente where Cliente.Codigo=varbusca;
RETURN var_CLIENTE;
end BUSCA_CLIENTE;
end TESTE;23 de setembro de 2008 às 8:49 pm #82833IshiiParticipanteOlá,
Qual a msg de erro que retornou?
[]s Ishii[/code]23 de setembro de 2008 às 9:06 pm #82834AnônimoIshii, ERROS da parte de ESPECIFICAÇÃO:
Falha de compilação; linha 10 (13:59:48)
PLS-00103: Encontrado o símbolo “IS” quando um dos seguintes símbolos era esperado: return
Falha de compilação; linha 10 (13:59:48)
PLS-00103: Encontrado o símbolo “VAR_CLIENTE” quando um dos seguintes símbolos era esperado: language
Falha de compilação; linha 11 (13:59:48)
PLS-00103: Encontrado o símbolo “END” quando um dos seguintes símbolos era esperado: begin function package pragma procedure subtype type use form current cursorE na parte do CORPO DO TEXTO:
Falha de compilação; linha 10 (14:02:03)
PLS-00103: Encontrado o símbolo “VAR_CLIENTE” quando um dos seguintes símbolos era esperado: language
Falha de compilação; linha 11 (14:02:03)
PLS-00103: Encontrado o símbolo “END” quando um dos seguintes símbolos era esperado: begin function package pragma procedure subtype type use form current cursor
Falha de compilação; linha 10 (14:02:03)
PLS-00103: Encontrado o símbolo “IS” quando um dos seguintes símbolos era esperado: returneu não estou sabendo montar.
Obrigada23 de setembro de 2008 às 9:47 pm #82839IshiiParticipanteOlá,
Tente assim:
create or replace package TESTE as
procedure INSERT_CLIENTE(
sp_nome ClIente.Nome%type,
sp_endereco Cliente.Endereco%type,
sp_dtcadastro Cliente.DtCadastro%type,qte_linhas OUT INTEGER);
function BUSCA_CLIENTE(varbusca in number)
RETURN varchar2 IS
var_CLIENTE varchar2;
end TESTE;Para o corpo:
create or replace package body "TESTE" is
procedure INSERT_CLIENTE
is
begin
INSERT INTO CLIENTE(Nome,Endereco,DtCadastro)
VALUES(sp_nome,sp_endereco,sp_dtcadastro);
qte_linhas := sql%ROWCOUNT;
end INSERT_CLIENTE;function BUSCA_CLIENTE(varbusca in number)is
var_Cliente varchar2;
BEGIN
SELECT Codigo||'.'|| Nome||'.'|| Endereco||'.'|| DtCadastro
INTO var_CLIENTE
from Cliente where Cliente.Codigo=varbusca;
RETURN var_CLIENTE;
end BUSCA_CLIENTE;
end TESTE;Acho que tentar retornar o cursor como vc queria não deve funcionar desta forma. Coloquei o ponto para separar mas veja como vc precisa ou tente mais functions…
[]s Ishii
24 de setembro de 2008 às 7:27 pm #82893AnônimoIshii, muito obrigada pela ajuda mais ainda não funcionou quando clico em compilar tanto na Especificação quanto no Corpo, esta dando o seguinte erro:
Falha de compilação; linha 9 (18:59:03)
PLS-00103: Encontrado o símbolo “IS” quando um dos seguintes símbolos era esperado: return
Falha de compilação; linha 8 (18:59:03)
PLS-00103: Encontrado o símbolo “VAR_CLIENTE” quando um dos seguintes símbolos era esperado: language24 de setembro de 2008 às 9:55 pm #82897IshiiParticipanteOlá,
Montei as tabelas aqui na minha BD de teste e corrigi outras coisas que não tinha visto…
create or replace package TESTE as
procedure INSERT_CLIENTE(
sp_nome ClIente.Nome%type,
sp_endereco Cliente.Endereco%type,
sp_dtcadastro Cliente.DtCadastro%type,qte_linhas OUT INTEGER);
function BUSCA_CLIENTE(varbusca in number)
RETURN varchar2 ;
var_CLIENTE varchar2(2000);
end TESTE;Corpo:
create or replace package body "TESTE" is
procedure INSERT_CLIENTE(
sp_nome ClIente.Nome%type,
sp_endereco Cliente.Endereco%type,
sp_dtcadastro Cliente.DtCadastro%type,
qte_linhas OUT INTEGER) is
begin
INSERT INTO CLIENTE(Nome,Endereco,DtCadastro)
VALUES(sp_nome,sp_endereco,sp_dtcadastro);
qte_linhas := sql%ROWCOUNT;end INSERT_CLIENTE;
function BUSCA_CLIENTE(varbusca in number) return varchar2 is
var_Cliente varchar2(2000);
BEGIN
SELECT Codigo||'.'|| Nome||'.'|| Endereco||'.'|| DtCadastro
INTO var_CLIENTE
from Cliente where Cliente.Codigo=varbusca;
RETURN var_CLIENTE;
end BUSCA_CLIENTE;
end TESTE;
Tente novamente 🙂
[]s Ishii
25 de setembro de 2008 às 7:29 pm #82903AnônimoIshii, não deu certo, erros que estão ocorrendo:
Falha de compilação; linha 9 (18:46:02)
PLS-00103: Encontrado o símbolo “VAR_CLIENTE” quando um dos seguintes símbolos era esperado: language
Falha de compilação; linha 10 (18:46:02)
PLS-00103: Encontrado o símbolo “END” quando um dos seguintes símbolos era esperado: begin function package pragma procedure subtype type use form current cursor
Falha de compilação; linha 7 (18:46:02)
PLS-00103: Encontrado o símbolo “IS” quando um dos seguintes símbolos era esperado: begin end function package pragma procedure subtype type use form current cursor
Falha de compilação; linha 14 (18:46:02)
PLS-00103: Encontrado o símbolo “FUNCTION”
Falha de compilação; linha 14 (18:46:02)
PLS-00103: Encontrado o símbolo “NUMBER” quando um dos seguintes símbolos era esperado: (
Falha de compilação; linha 22 (18:46:02)
PLS-00103: Encontrado o símbolo “END” quando um dos seguintes símbolos era esperado: begin function package pragma procedure form25 de setembro de 2008 às 8:24 pm #82904IshiiParticipanteOlá,
Tente rodar primeiro somente a espec e veja se deu algum erro e depois somente o corpo, me mande os erros separados…
[]s Ishii
25 de setembro de 2008 às 10:12 pm #82908AnônimoIshii, parece que vai deu certo. Muito obrigada pela ajuda.
Outra pergunta:
Quando eu chamar no codigo em ASP eu chamo e package ou direto a procedure e a function.25 de setembro de 2008 às 10:45 pm #82909IshiiParticipanteOlá,
Para chamar a procedure ou a função use package.procedure ou no caso da função package.function
No caso do exemplo seria assim:
TESTE.INSERT_CLIENTE(‘ANA’,’RUA QUE SOBE E DESCE’,sysdate,:qtd);
🙂
[]s Ishii
-
AutorPosts
- Você deve fazer login para responder a este tópico.