Usar tabela temporária

Olá , estou tentando inserir valores em uma tabela temporária e estou obtendo o seguinte erro
’ ERROR: relation “temp_past_triagem” does not exist LINE 1: insert into temp_past_triagem (apto,inapto)values(‘1’,‘1’) ^

ADOConnection._Execute(insert into temp_past_triagem (apto,inapto)values(‘1’,‘1’), false) % line 1149, file: [adodb.inc.php](file:///C:/Program%20Files/NetMake/v9-php73/wwwroot/scriptcase/prod/third/adodb/adodb.inc.php) ADOConnection.Execute(insert into temp_past_triagem (apto,inapto)values(‘1’,‘1’)) % line 7663, file: [form_public_apartacao_apl.php](file:///C:/Program%20Files/NetMake/v9-php73/wwwroot/scriptcase/app/Fazenda/form_public_apartacao/form_public_apartacao_apl.php) form_public_apartacao_apl.apartar_gados() % line 6538, file: [form_public_apartacao_apl.php](file:///C:/Program%20Files/NetMake/v9-php73/wwwroot/scriptcase/app/Fazenda/form_public_apartacao/form_public_apartacao_apl.php) form_public_apartacao_apl.nm_acessa_banco() % line 1497, file: [form_public_apartacao_apl.php](file:///C:/Program%20Files/NetMake/v9-php73/wwwroot/scriptcase/app/Fazenda/form_public_apartacao/form_public_apartacao_apl.php) form_public_apartacao_apl.controle() % line 2329, file: [index.php](file:///C:/Program%20Files/NetMake/v9-php73/wwwroot/scriptcase/app/Fazenda/form_public_apartacao/index.php)’
código: if({fases_reproducao} < 1){
// criar campos temporários com destinos aptos, inaptos,vl
$tabela_temporaria = "
CREATE TEMP TABLE temp_past_triagem
(
apto VARCHAR(20),
inapto VARCHAR(20)

					  )
					  ON COMMIT DROP;
					  
					 ";
sc_exec_sql ($tabela_temporaria, "conn_fazenda");
// insere os valores
sc_begin_trans();
$insert_into_temporaria = "insert into temp_past_triagem (apto,inapto)values('{apto}','{inapto}')";
sc_exec_sql ($insert_into_temporaria, "conn_fazenda");
	
}else{
// criar campos temporários com destinos  aptos, inaptos,vl
$tabela_temporaria = "
					   CREATE TEMP TABLE temp_past_triagem
					  (
						 prenha VARCHAR(20),
						 anestra VARCHAR(20),
						 vazia VARCHAR(20)
						 

					  )
					  ON COMMIT DROP;
					  
					 ";
sc_exec_sql ($tabela_temporaria, "conn_fazenda");
// insere os valores
sc_begin_trans();
$insert_into_temporaria = "insert into temp_past_triagem (apto,inapto)values('{apto}','{inapto}')";
sc_exec_sql ($insert_into_temporaria, "conn_fazenda");

}

Olá.
Não sei qual é o gestor de dados que usas mas o tratamento da tabela temporal é o mesmo que se for uma tabela persistente.

Confirma diretamente no gestor de dados se a tabela temporal foi criada ou não…

Postgresql é o sgbd , no caso não foi criada , estou achando que o sc_exec_sql() não aceita comandos DDL

Cria uma SP e faz tudo por ela.

1 Curtida

O problema é que as tabelas temporais estarão vivas sempre na sessão que deu origem a elas, e depois de forma automática desaparecem. No caso duma aplicação desktop consegues manter aberta sempre a sessão de forma indefinida se quiser mas no caso de Scriptcase deves então usar uma conexão persistente (que afeta a performance e a memoria do servidor) e se é fechada antes de terminar o processo a tabela temporária desaparece independentemente se foi criada por comando ou por SP.
Em mi caso criei uma tabela “temporal” mas persistente com 2 campos adicionais “IdUnica” (tipo BigInt ou Character) e outro do tipo “date” que permite identificar a sessão de trabalho, e a data (date) permite eliminar todos os registos com antiguidades maior de 1 dia ou 2. Assim consigo usar tabelas temporárias para trabalhar de forma não persistente.

O maior dos casos de uso de tabela temporária são em stored procedures.
Mas sim a tabela pode ser myisan e ser destruída após seu uso.

1 Curtida