Boa tarde Pessoal, estou montando uma procedure que conta a quantidade de registro em uma tabela(M_UNIDADE) e com isso é feito um INSERT(MM_MEMBRO) em uma outra tabela para cada registro da tabela M_UNIDADE. Gostaria de saber se sintaxe esta correta?
[code]CREATE PROCEDURE inserirMM_MEMBRO()
IS
qt number;
cont number = 0;
id number;
BEGIN
qt = (SELECT count(*) FROM M_UNIDADE);
id =(SELECT min(ID_UNIDADE) FROM M_UNIDADE);
WHILE qt => cont LOOP
cont = cont + 1;
id = id + 1;
INSERT INTO MM_MEMBRO(ID_FILHO, ID_UNIDADE)
VAlUES(id,1)
END LOOP
END inserirMM_MEMBRO;
EXEC inserirMM_MEMBRO();[/code]
Desde já agradeço a todos.
E tb peço desculpa por postar aqui no guj essa minha duvida sobre procedure.
Desculpa amigo se eu não entendi. Mais o seu exemplo que vc me passou teria que ficar assim né:
CREATE PROCEDURE inserirMM_MEMBRO()
IS
qt number;
cont number = 0;
id number;
BEGIN
qt = (SELECT count(*) FROM M_UNIDADE);
id =(SELECT min(ID_UNIDADE) FROM M_UNIDADE);
WHILE qt <= cont LOOP
cont = cont + 1;
id = id + 1;
INSERT INTO MM_MEMBRO(ID_FILHO, ID_UNIDADE)
VAlUES(id,1)
END LOOP
END inserirMM_MEMBRO;
EXEC inserirMM_MEMBRO();
testou? funcionou dessa forma que ele falou? (acredito que tenha funcionado)
Vou dar uma sugestão, a carga no servidor deve ser menor…
INSERT INTO MM_MEMBRO(ID_FILHO, ID_UNIDADE)
SELECT
id + Level, 1
FROM (SELECT count(*) as qt FROM M_UNIDADE) a
CROSS JOIN (SELECT min(ID_UNIDADE) id FROM M_UNIDADE) b
CONNECT BY Level <= qt - id
Dá uma olhada se a lógica está certa (se é <= mesmo, etc…) e dá a resposta.