Hello everybody.
I have a question? Can I perform recursiveness in PL / SQL?
Thanks if anyone can answer me.
Thanks.
Recursiveness
- dr_gori
- 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
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:
That is, nothing in my table A.
As you can see, PL / SQL accepts recursiveness. I called the procedure itself to insert the lines on the table!
SQL> select * from a;
no rows selected
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>
/*
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///
/// 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.
-
- Information
-
Who is online
Users browsing this forum: No registered users and 0 guests