Como inserir vários dados em uma FWTemporaryTable sem RecLock

No artigo de hoje, vamos demonstrar em como inserir vários dados de uma vez em uma tabela com FWTemporaryTable.

Recentemente me perguntaram se havia alguma forma de inserir vários registros de uma vez em uma tabela temporária criada com FWTemporaryTable.

 

A questão aqui é não usar While ou outras formas manuais como RecLock na temporária. Então aqui irei descrever duas formas possíveis.

 

Forma 1 – Usando INSERT INTO

//Monta a query que busca os dados de uma tabela
cQuery := " SELECT " + CRLF
cQuery += " BM_GRUPO, BM_DESC " + CRLF
cQuery += " FROM " + CRLF
cQuery += " " + RetSqlName("SBM") + " SBM " + CRLF
cQuery += " WHERE D_E_L_E_T_ = ''" + CRLF

//Cria a temporária
oTempTable := FWTemporaryTable():New("TMPSBM")
aFields := {}  //Ou se quiser todos os campos de uma tabela, você poderia usar SBM->(DbStruct())
aAdd(aFields, {"BM_GRUPO",    "C", TamSX3("BM_GRUPO")[1], 0})
aAdd(aFields, {"BM_DESC",     "C", TamSX3("BM_DESC")[1], 0})
oTempTable:SetFields( aFields )
oTempTable:Create()

//Insere os dados de uma query
cQryIns := "INSERT INTO " + oTempTable:GetRealName() + " (BM_GRUPO, BM_DESC) " + cQuery + ""
TCSQLExec(cQryIns)


/*
	Realiza aqui os seus comandos
*/

//Deleta a temporária
oTempTable:Delete()

 

Forma 2 – Usando Append From

//Abre uma tabela padrão
DbSelectArea("SBM")

//Cria a temporaria
oTempTable := FWTemporaryTable():New("TMPSBM")
aFields := {}  //Ou se quiser todos os campos de uma tabela, você poderia usar SBM->(DbStruct())
aAdd(aFields, {"BM_GRUPO",    "C", TamSX3("BM_GRUPO")[1], 0})
aAdd(aFields, {"BM_DESC",     "C", TamSX3("BM_DESC")[1], 0})
oTempTable:SetFields( aFields )
oTempTable:Create()

//Jogando os dados de uma tabela padrão para a temporária
Append From &("SBM")

/*
	Realiza aqui os seus comandos
*/

//Deleta a temporária
oTempTable:Delete()

Bom pessoal, por hoje é só.

Abraços e até a próxima.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

Deixe uma resposta

Terminal de Informação