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?
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.
Michel_M
Opa valeu ai pela a sugestão!
Mais so uma duvida a sintexa é essa mesma?
A declaração das variáveis esta correta?
E
evefuji
a sintaxe me parece ser essa mesma, e a declaração de variáveis também. Só o operador de atribuição que ao invés de = seria := se não me engano.
Michel_M
Aqui não funfo!
E
evefuji
Qual erro?
gfkauer
Sua rotina não irá fncionar com esta estrutura…
o seu erro esta aqui:
qt = (SELECT count(*) FROM M_UNIDADE);
id =(SELECT min(ID_UNIDADE) FROM M_UNIDADE);
Isto não funciona!! O correto é fazer algo assim:
Select count(1)
Into qt
From m_unidade;
Select min(id_unidade)
Into id
From m_unidade;
claro, tem outras opções, mas a mais rapida é esta.
Michel_M
Esse é o erro:
Avisos: —>
W (1): Warning: execução concluída com advertência
<—
Obs: estou usando o SGBD AQUA.
E
evefuji
Não mostra nenhum outro erro?
Trocou o = por :=?
Verdade gfkauer, nem tinha reparado que faltava o INTO.
Me parece que faltam ; em dois lugares.
Michel_M
Ai galera peço desculpas pela a demora em responder. Mais com as alterações que foi
comentada acho que ficaria assim ne: