- Este tópico contém 27 respostas, 2 vozes e foi atualizado pela última vez 17 anos, 6 meses atrás por
rodfbar.
-
AutorPosts
-
29 de agosto de 2008 às 10:53 pm #82579
Anônimo
Tenho a seguinte procedure:
create or replace PROCEDURE SP_INSERT_CLIENTE
(sp_codigo Cliente.Codigo%type,
sp_nome Cliente.Nome%type,
sp_endereco Cliente.Endereco%type,
sp_dtcadastro Cliente.DtCadastro%type
)
IS
BEGIN
INSERT INTO CLIENTE(Codigo,Nome,Endereco,DtCadastro)
VALUES(sp_codigo,sp_nome,sp_endereco,sp_dtcadastro);
End;Como faço para verificar se ela foi executada e transferir o resultado para o form
29 de agosto de 2008 às 11:40 pm #82582rodfbar
ParticipanteOLA..
VOCE PODE CRIAR VARIAVEIS DO TIPO “OUT”
EXEMPLO
create or replace PROCEDURE SP_INSERT_CLIENTE
(sp_codigo Cliente.Codigo%type,
sp_nome Cliente.Nome%type,
sp_endereco Cliente.Endereco%type,
sp_dtcadastro Cliente.DtCadastro%type
QTDE_LINHAS_INSERIDAS OUT NUMBER
)
IS
BEGIN
INSERT INTO CLIENTE(Codigo,Nome,Endereco,DtCadastro)VALUES(sp_codigo,sp_nome,sp_endereco,sp_dtcadastro);
QTDE_LINHAS_INSERIDAS := SQL%ROWCOUNT;
End;e la no seu programa vc trabalha essa variavel
beginSP_INSERT_CLIENTE (p1,p2,p3,p4,p_inserts)
if p_inserts = 0 then
erro();
end if;
end
29 de agosto de 2008 às 11:42 pm #82583rodfbar
Participantedesculpe foi coisa a mais…
sem o [ b ] [ / b ] é q tentei colocar negrito
30 de agosto de 2008 às 1:04 am #82584Anônimo
Rodfbar, não deu certo. Se vc puder detalhar melhor desde obrigada.
Obs: Sou inciante e estou usando o oracle 10g.
Obrigada30 de agosto de 2008 às 9:13 pm #82588rodfbar
Participanteok.. eh bem longa a explicação… tem duas formas de vc trabalhar sua procedure
1º com “raise”
exemplo
create or replace PROCEDURE SP_INSERT_CLIENTE
(sp_codigo Cliente.Codigo%type,
sp_nome Cliente.Nome%type,
sp_endereco Cliente.Endereco%type,
sp_dtcadastro Cliente.DtCadastro%type
)
IS
BEGIN
begin
INSERT INTO CLIENTE(Codigo,Nome,Endereco,DtCadastro)
VALUES(sp_codigo,sp_nome,sp_endereco,sp_dtcadastro);
exception
when others then
raise_application_error(-20001,'Erro: ' || sqlerrm); /retorna erro para sua aplicação/
end;
--
if sql%rowcount = 0 then /sql%rowcount = quantidade de linhas afetadas na dml/
raise_application_Error(-20002,'Não foi inserida nenhuma linha;'); /retorna erro para sua aplicação/end if;
End;
depois voce precisa tratar o erro onde vc faz a chamada a procedure
se for pelo forms:
begin
chama a procedure
exception
when others then
message(sqlerrm);
message(' ',no_acknowledge)
raise form_trigger_failure;
end;
2º usando variaveis do tipo como no exemplo q ja te passei
se vc puder passar em qual linguagem vc esta fazendo a chamada à procedure e qual o erro q retorna….
espero ter ajudado
abrçs[/code]
30 de agosto de 2008 às 9:28 pm #82589Anônimo
RodFar, o erro esta dando dentro do oracle10g quando eu clico no botão compilar. Ele não esta aceitando a linhas:
“QTDE_LINHAS_INSERIDAS OUT NUMBER”
“QTDE_LINHAS_INSERIDAS := SQL%ROWCOUNT;”
Outra coisa “SQL%ROWCOUNT” faz.
Muito obrigado pela atenção.30 de agosto de 2008 às 9:30 pm #82590Anônimo
RodFar, o erro esta dando dentro do oracle10g quando eu clico no botão compilar. Ele não esta aceitando a linhas:
“QTDE_LINHAS_INSERIDAS OUT NUMBER”
“QTDE_LINHAS_INSERIDAS := SQL%ROWCOUNT;”
Outra coisa “SQL%ROWCOUNT” faz.
Muito obrigado pela atenção.1 de setembro de 2008 às 7:07 pm #82614rodfbar
Participanteola…
deve estar dando erro pois no script que te passei ficou sem uma virgula no final do parametro anterior ao parametro “out”:
create or replace PROCEDURE SP_INSERT_CLIENTE
(sp_codigo Cliente.Codigo%type,
sp_nome Cliente.Nome%type,
sp_endereco Cliente.Endereco%type,
sp_dtcadastro Cliente.DtCadastro%type , <- olha a danada q faltou
QTDE_LINHAS_INSERIDAS OUT NUMBER
)O SQL%ROWCOUNT retorna a quantidade de linhas que o seu DML afetou no banco
tipo um insert simples retorna "1" (1 linha inserida)
um update ou delete podem variar de acordo com sua clausula where (por exemplo)abrçs
1 de setembro de 2008 às 8:00 pm #82615Anônimo
rodfbar, valeu pela ajuda vou testar.
Na procedure de busca o return esta no lugar certo.create or replace PROCEDURE SP_BUSCA (varbusca as integer)
RETURN (
sp_codigo integer,
sp_nome varchar(40),
sp_endereco(40),
sp_dtcadastro date
)
IS
BEGIN
SELECT INTO Codigo, Nome, Endereco, DtCadastro from Cliente where Cliente.Codigo=varbusca;
end;1 de setembro de 2008 às 8:22 pm #82616rodfbar
Participanteola..
não se pode dar return em procedures soh em caso de paremetros “out” … apenas em funções voce consegue dar o return…
um exemplo bem pratico pra vc fazer desta função seria
create or replace FUNCTION SP_BUSCA (varbusca as integer)
RETURN CLIENTE%ROWTYPE IS
VV_CLIENTE CLIENTE%ROWTYPE;
BEGIN
SELECT Codigo, Nome, Endereco, DtCadastro
INTO VV_CLIENTE.Codigo, VV_CLIENTE.Nome, VV_CLIENTE.Endereco, VV_CLIENTE.DtCadastro
from Cliente
where Cliente.Codigo=varbusca;
--
RETURN VV_CLIENTE;
end;soh q na sua aplicação vc deve fazer uma variavel do mesmo tipo receber sua função
declare
v_retorno cliente%rowtype;
begin
v_retorno := SP_BUSCA (parametro);
end;
2 de setembro de 2008 às 8:24 pm #82620Anônimo
rodfbar, agora deu certo no oracle só que na rotina do programa não esta retornando nada. Não sei se esta codificado certo se vc puder dar uma olhada, obrigada.
Outro esclarecimento quando declaro Dim var1, var2 as string só a variavel “var2” é do tipo string ou todas duas são strings
**INSERT.ASP****
2 de setembro de 2008 às 8:33 pm #82621rodfbar
Participanteola Ana…
agora vc me pegou… nao conheço asp…
creio q suas variaveis vao ser tipo String sim… no caso da sua duvida…
porem como tratar a chamada a procedure infelizmente nao vou poder te ajudar…talvez pra vc seria mais facil na função criar exceptions e tratar as mesmas no seu código… tipo um “try” antes da sua chamada… mas nao conheço asp pra lhe ajudar…
desculpe…
abrçs
2 de setembro de 2008 às 8:57 pm #82622Anônimo
rodfbar, mesmo assim obrigada.
3 de setembro de 2008 às 8:36 pm #82635Anônimo
rodfbar, quando eu clico em compilar esta dando erro:
Linha 1 – PLS-00103: Encontrado o símbolo “AS” quando um dos seguintes
Linha 2 – PLS-00103: Encontrado o símbolo “IS” quando um dos seguintesNa linha 1 troquei para “NUMBER” mesmo assim continuou dando erro.
“create or replace FUNCTION SP_BUSCA (varbusca as integer)
RETURN CLIENTE%ROWTYPE IS VV_CLIENTE CLIENTE%ROWTYPE;
BEGIN
SELECT Codigo, Nome, Endereco, DtCadastro
INTO VV_CLIENTE.Codigo, VV_CLIENTE.Nome,
VV_CLIENTE.Endereco, VV_CLIENTE.DtCadastro
from Cliente where Cliente.Codigo=varbusca;
—
RETURN VV_CLIENTE;
end;Outra pergunta “VV_CLIENTE” é uma variavel com diversos registros?
Seria um “RecordSet”?3 de setembro de 2008 às 8:55 pm #82636rodfbar
Participantetenta assim
create or replace FUNCTION SP_BUSCA (varbusca number)
RETURN CLIENTE%ROWTYPE IS
begin
--codigos;
end SP_BUSCA;
-
AutorPosts
- Você deve fazer login para responder a este tópico.