Criando Procedure no Oracle

8 respostas
R

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

8 Respostas

A
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;
os parâmetros podem ser IN(default quando não informado), OUT ou ainda IN OUT. para atribuir valores às variáveis, o operor é := . Suponha que você quer atribuir o valor 10 à variável x. Então faz:
x := 10;
R

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

  • d qualquer forma, valeu pela ajuda…
A

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]

R

Cara eu ja gostaria de agradecer antes de + nada a ajuda q vc esta me dando...valeu mesmo!!!!

bom o codigo eh esse
CREATE 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?

A

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.

R

Blz, to me virando aqui…

  • como eu faço para fazer com que a minha variavel receba um valor retornado de um select

eu to fazendo assim

Var := (select max(cd_aluno) from aluno)

eu acho q eh assim…

Valeu pela ajuda de qualquer forma

A

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…

R

Cara Valeu pela ajuda…acho q agora ja estou começando a entender bem o oracle e alguns comandos basicos…rsrsr

  • valeu…

Falou e q Deus abençõe vc e sua familia

Criado 22 de maio de 2006
Ultima resposta 25 de mai. de 2006
Respostas 8
Participantes 2