Recursiveness

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Post Reply
alexandreizumi
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Posts: 1
Joined: Sat, 05 Jun 2004 11:45 pm

Hello everybody.

I have a question? Can I perform recursiveness in PL / SQL?

Thanks if anyone can answer me.

Thanks.
User avatar
dr_gori
Moderador
Moderador
Posts: 5024
Joined: Mon, 03 May 2004 3:08 pm
Location: Portland, OR USA
Contact:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Let's test and let's find out:

Select all

SQL> select * from a; 
 
no rows selected
That is, nothing in my table A.

Select all

SQL> create or replace procedure rec (n number) is 
  2  begin 
  3    insert into a(nome) values (to_char(n)); 
  4    if n>0  
  5    then rec(n-1); 
  6    end if; 
  7  end; 
  8  / 
 
Procedure created. 
 
SQL> exec rec(5); 
 
PL/SQL procedure successfully completed. 
 
SQL> select * from a; 
 
NOME      
----------  
5 
4 
3 
2 
1 
0 
 
6 rows selected. 
 
SQL> 
As you can see, PL / SQL accepts recursiveness. I called the procedure itself to insert the lines on the table!
jce
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Posts: 1
Joined: Fri, 26 Aug 2011 9:38 am
Location: porto alegre - rs

Select all

/* 
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
/// 
/// Implementando Uma Solução Recursiva em Oracle para obter dados de uma tabela autorelacionada 
///  
/// Montei uma tabela para demostrar o exemplo baseado em uma hipotetica estrutura de dados porem a solução e apta a ser aplicada em  
/// diversas areas onde se faça nescessario o uso de tabelas autorelacionadas como estruturas de produtos, menus hierarquicos entre muitas outras  
/// soluções 
/// 
/// Autor:Julio.Cesar.Eyras@gmail.com 
///  
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
///  
/// Estrutura de produtos (ou em inglês: Bill of materials (BOM)) pode ser uma lista de materiais brutos, pré-montados,  
/// sub-componentes, componentes ou partes, e a quatidade necessária de cada um para manufaturar um produto por completo.  
/// Pode ser usado para comunicação entre parceiros de negócios ou por simples organização de um projeto, a fim de realizar  
/// uma estocagem prévia. 
/// Pode ser definida de acordo com a intenção do projeto, variando seus tipos de estruturação, contendo desde propostas com 
/// foco em engenharia ou ordenação por preço, até uma para a resolução de manutenções. No processo industrial, ela também é  
/// conhecida como uma fórmula, receita ou lista de ingredientes. Na eletrônica, representa uma lista de componentes usados  
/// numa placa de circuito impresso. Uma vez o projeto completado, a BOM é passada para para a equipe de compras ou engenheiros  
/// de produção, como no caso da eletrônica, na qual irão obter os itens determinados. 
/// Uma BOM é naturalmente hierárquica, com o nível superior representando o produto concluído, em que pode ser um subproduto  
/// ou ele por inteiro. 
///  
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
*/ 
   
-- Criando a tabela hierarquica de forma simplificada apenas para demostrar os conceitos envolvidos 
-- Drop table billofmaterials; 
CREATE TABLE billofmaterials 
( 
  id CHAR(32), 
  id_father CHAR(32), 
  description VARCHAR2(100) NOT NULL, 
  PRIMARY KEY ( 
    id 
  ) ENABLE NOVALIDATE 
) 
 
-- Populando os resgistro basicos   
-- Truncate table billofmaterials; 
INSERT INTO billofmaterials (id, id_father, description) 
VALUES ('1', NULL, 'Calhambeke Chines'); 
INSERT INTO billofmaterials (id, id_father, description) 
VALUES ('2', 7, 'Motor 1.0'); 
INSERT INTO billofmaterials (id, id_father, description) 
VALUES ('3', 16, 'Porta'); 
INSERT INTO billofmaterials (id, id_father, description) 
VALUES ('4', 3, 'Estofamento de porta'); 
INSERT INTO billofmaterials (id, id_father, description) 
VALUES ('5', 3, 'Maçaneta de Porta'); 
INSERT INTO billofmaterials (id, id_father, description) 
VALUES ('6', 3, 'Vidros de Porta'); 
INSERT INTO billofmaterials (id, id_father, description) 
VALUES ('7', 1, 'Chassis'); 
INSERT INTO billofmaterials (id, id_father, description) 
VALUES ('8', 7, 'Barras Estruturais'); 
INSERT INTO billofmaterials (id, id_father, description) 
VALUES ('9', 7, 'Eixos de roda'); 
INSERT INTO billofmaterials (id, id_father, description) 
VALUES ('10', 16, 'Rodado'); 
INSERT INTO billofmaterials (id, id_father, description) 
VALUES ('11', 10, 'Roda Liga Leve'); 
INSERT INTO billofmaterials (id, id_father, description) 
VALUES ('14', 16, 'Vidros Dianteiro'); 
INSERT INTO billofmaterials (id, id_father, description) 
VALUES ('15', 16, 'Vidros Traseiro'); 
INSERT INTO billofmaterials (id, id_father, description) 
VALUES ('16', 1, 'Carroceria'); 
INSERT INTO billofmaterials (id, id_father, description) 
VALUES ('12', 10, 'Pneu 175'); 
INSERT INTO billofmaterials (id, id_father, description) 
VALUES ('13', 10, 'Parafusos de roda'); 
  
Select * from billofmaterials; 
  
-- Uma forma estranha 
SELECT *    
  FROM ( SELECT id,    
                id_father,    
                description,    
                SYS_CONNECT_BY_PATH (id,'.') tree,    
                CONNECT_BY_ROOT id children    
           FROM billofmaterials CONNECT BY PRIOR id_father = id )    
 WHERE id = 1 
  
  
-- obtendo os dados estruturados hierarquicamente.  
 SELECT id, 
        id_father, 
        description 
   FROM billofmaterials 
CONNECT BY PRIOR id = id_father 
  START WITH id = 1 --0

by J.C.E.
Post Reply
  • Information
  • Who is online

    Users browsing this forum: No registered users and 0 guests