2010/4/7 Jose Luis Ramos <[email protected]>: > Gostaria de uma ajuda no FOR LOOP abaixo. Não sei como maniular as variáveis > dentro do FOR LOOP: > > > -- cria schema auxiliar > CREATE SCHEMA dump_aux; > > -- tabela para guardar os nomes das tabelas cdrger* disponíveis > > DROP TABLE TABELAS_CDRGER; > > CREATE TABLE TABELAS_CDRGER AS > SELECT TABLENAME > FROM PG_TABLES LIMIT 0; > > -- preenche tabela auxiliar com nomes das tabelas cdrger* disponíveis > INSERT INTO TABELAS_CDRGER > SELECT TABLENAME > FROM PG_TABLES > WHERE TABLENAME LIKE 'cdrger%'; > > COMMIT; > > DECLARE > > COUNT_REGS INT; > REG_TAB RECORD; > > BEGIN > -- para cada tabela cdrger*, cria uma igual no schema dump_aux e preenche > -- com amostragem de x% dos dados da tabela cdrger* original > > FOR REG_TAB IN SELECT TABLENAME AS NOME_TAB_CDRGER > FROM tabelas_cdrger Loop > SELECT INTO COUNT_REGS COUNT(*) FROM REG_TAB.NOME_TAB_CDRGER; > IF COUNT_REGS > 0 THEN > CREATE TABLE REG_TAB.DUMP_AUX.NOME_TAB_CDRGER AS > SELECT * FROM REG_TAB.NOME_TAB_CDRGER LIMIT 0; > INSERT INTO DUMP_AUX.NOME_TAB_CDRGER > SELECT * > FROM REG_TAB.NOME_TAB_CDRGER > WHERE ( > CAST( > SUBSTRING( > ENCODE(cstring_send(tidout(ctid)),'escape'),2, > position(',' in rtrim( encode(cstring_send(tidout(ctid)),'escape') > ))-2 ) > as int) * 199+ > cast( > substring( > encode(cstring_send(tidout(ctid)),'escape'), > position(',' in encode(cstring_send(tidout(ctid)),'escape'))+1, > length(rtrim(encode(cstring_send(tidout(ctid)),'escape'))) - > position(',' > in encode(cstring_send(tidout(ctid)),'escape'))-1 ) > as int) ) > % 10=1; > END IF; > END LOOP; > END; >
Veja: http://www.postgresql.org/docs/current/interactive/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN Monte uma string contendo seu SELECT e utilize-a em um comando EXECUTE ou EXECUTE INTO. Osvaldo _______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
