Ola galera!!
Gostaria de saber como se cria uma procedure no oracle, ja q so sei no sql server…
e como crio variaveis dentro da procedure e como tbm atualizo as mesma…
Valeu
Ola galera!!
Gostaria de saber como se cria uma procedure no oracle, ja q so sei no sql server…
e como crio variaveis dentro da procedure e como tbm atualizo as mesma…
Valeu
create or replace procedure nome_da_procedure(
parametro1 tipo,
parametro2 tipo,
parametro... tipo) is
variavel1 tipo,
variavel2 tipo,
variavel... tipo
begin
comandos
end nome_da_procedure;
x := 10;
Cara + e c eu quero a a minha variavel x receba o numero de registro de uma tabela…isso eu ñ to conseguindo fazer…ta dando erro no meu Select
Vamos ver… dentro da sua procedure você tem que dar um select em alguma(s) tabela(s) e esse select vai te retornar sempre mais de uma linha, é isso? Se for, você precisa então trabalhar com cursor. Posta o código da procedure que a gente dá uma olhada…[/code]
Cara eu ja gostaria de agradecer antes de + nada a ajuda q vc esta me dando...valeu mesmo!!!!
bom o codigo eh esseCREATE OR REPLACE PROCEDURE P_Indice
( Conv integer,
Proc VARCHAR2,
Pres integer,
acre integer)
IS
BEGIN
FOR r IN (SELECT * FROM dbamv.tab_convenio tc WHERE Conv = tc.CD_Convenio AND Proc = tc.CD_Pro_Fat AND Pres = CD_Prestador)
LOOP
INSERT INTO dbamv.tab_convenio
VALUES
(r.CD_Con_Pla, r.CD_Convenio, r.CD_Pro_Fat, SysDate, r.VL_Tab_Convenio + (r.VL_Tab_Convenio * acre)/100, r.SN_Usar_Indice, r.SN_Ativo, r.SN_Horario_Especial, r.SN_Filme, r.CD_Regra, r.CD_Multi_Empresa,(SELECT Max(cd_tab_convenio) FROM dbamv.tab_convenio) + 1 ,r.CD_Prestador, r.CD_Setor);
--INSERT INTO t VALUES (3, r.cd_pro_Fat);
Dbms_Output.put_line('ola mundo');
END LOOP;
END P_Indice;
esse codigo eu fiz boa parte dele sozinho, + tive q olhar em um script na internet pra poder construir ele....
Bom gostaria de saber como eu crio variaveis dentro da minha procedure? e tbm como aquele r no meu For recebeu tds aquele conjunto de dados?
Bem, colega… sem mexer muito no seu código, introduzi aí dois exemplos de variáveis. Acompanhe os comentários.
CREATE OR REPLACE PROCEDURE P_Indice ( Conv integer,
Proc VARCHAR2,
Pres integer,
acre integer)
IS
V_VL_Tab_Convenio number; -- variavel para guardar resultado de calculo
v_conta_registros number := 0; --variável para contar quantidade de registros inseridos (veja que esta já é inicializada ao mesmo tempo em que é declarada)
BEGIN
FOR r IN (SELECT * FROM dbamv.tab_convenio tc
WHERE Conv = tc.CD_Convenio
AND Proc = tc.CD_Pro_Fat
AND Pres = CD_Prestador)
LOOP
-- a cada volta do loop, o valor desta variável será atualizado...
V_VL_Tab_Convenio := r.VL_Tab_Convenio + (r.VL_Tab_Convenio * acre)/100;
INSERT INTO dbamv.tab_convenio VALUES (r.CD_Con_Pla,
r.CD_Convenio,
r.CD_Pro_Fat,
SysDate,
V_VL_Tab_Convenio, -- aqui usamos o valor atual da variável
r.SN_Usar_Indice,
r.SN_Ativo,
r.SN_Horario_Especial,
r.SN_Filme,
r.CD_Regra,
r.CD_Multi_Empresa,
(SELECT Max(cd_tab_convenio) FROM dbamv.tab_convenio) + 1,
r.CD_Prestador,
r.CD_Setor);
-- incrementando a variável contadora
v_conta_registros := v_conta_registros + 1;
--INSERT INTO t VALUES (3, r.cd_pro_Fat);
Dbms_Output.put_line('ola mundo');
END LOOP;
dbms_output.put_line('foram inseridos ' || v_conta_registros || ' registros');
END P_Indice;
Agora sobre sua pergunta “naquele r”. É que no Oracle existem duas formas de trabalhar com cursores: declarando da forma extendida, onde você tem que abrir o cursor, dar um fetch dos valores em variáveis e depois fechar o cursor, tipo como se faz em SQLServer, OK? Mas (graças a Deus) existe lá a forma abreviada que é mais ou menos do jeito que você fez. O “r” é uma variável controladora que a cada volta do loop te traz o valor atual de cada campo trazido no select do cursor. Aliás, achei interessante esse jeito que você fez. Eu ainda não tinha visto isso de dar um FOR (select) e ir pro LOOP.
Blz, to me virando aqui…
eu to fazendo assim
Var := (select max(cd_aluno) from aluno)
eu acho q eh assim…
Valeu pela ajuda de qualquer forma
pode ser assim:
begin
select campo1,
campo2
into variavel1,
variavel2
from tabela
where ...
end;
Lembrando que as variáveis devem já estar declaradas, e que o número de campos retornados pelo select tem que coincidir com o número de variáveis da cláusula INTO. Outra coisa: tem que prever que nessa situação seu select só pode retornar um registro, senão dá erro…
Cara Valeu pela ajuda…acho q agora ja estou começando a entender bem o oracle e alguns comandos basicos…rsrsr
Falou e q Deus abençõe vc e sua familia