SVL_STATEMENTTEXT
Use a exibição SVL_STATEMENTTEXT para obter um registro completo de todos os comandos SQL que foram executados no sistema.
A exibição SVL_STATEMENTTEXT contém a união de todas as linhas nas tabelas STL_DDLTEXT, STL_QUERYTEXT e STL_UTILITYTEXT. Essa exibição também inclui uma junção com a tabela STL_QUERY.
SVL_STATEMENTTEXT é visível para todos os usuários. Os superusuários podem ver todas as linhas; usuários regulares podem ver somente seus próprios dados. Para ter mais informações, consulte Visibilidade de dados em tabelas e visualizações de sistema.
Alguns ou todos os dados nessa tabela também podem ser encontrados na exibição de monitoramento SYS SYS_QUERY_HISTORY. Os dados na exibição de monitoramento SYS são formatados para serem mais fáceis de usar e compreender. É recomendável usar a exibição de monitoramento SYS nas consultas.
Colunas da tabela
Nome da coluna | Tipo de dados | Descrição |
---|---|---|
userid | integer | O ID do usuário que gerou a entrada. |
xid | bigint | O ID da transação associada à instrução. |
pid | integer | O ID de processo para a instrução. |
label | character(320) | O nome do arquivo usado para executar a consulta ou um rótulo definido com o comando SET QUERY_GROUP. Se a consulta não for baseada em arquivos ou o parâmetro QUERY_GROUP não estiver definido, o valor deste campo será branco. |
starttime | timestamp | O horário exato do início da execução da instrução, com 6 dígitos de precisão para as frações de segundo. Por exemplo: 2009-06-12 11:29:19.131358 |
endtime | timestamp | O horário exato do término da execução da instrução, com 6 dígitos de precisão para as frações de segundo. Por exemplo: 2009-06-12 11:29:19.193640 |
sequence | integer | Quando uma única instrução contém mais de 200 caracteres, são registradas linhas adicionais para essa instrução. O valor 0 da sequência é a primeira linha, 1 é a segunda, e assim por diante. |
type | varchar(10) | O tipo da instrução SQL: QUERY , DDL ou UTILITY . |
text | character(200) | O texto em SQL, em incrementos de 200 caracteres. Esse campo pode conter caracteres especiais como barra invertida (\\ ) e nova linha (\n ). |
Consulta de exemplo
A consulta a seguir retorna as instruções em DDL que foram executadas em 16 de junho de 2009:
select starttime, type, rtrim(text) from svl_statementtext
where starttime like '2009-06-16%' and type='DDL' order by starttime asc;
starttime | type | rtrim
---------------------------|------|--------------------------------
2009-06-16 10:36:50.625097 | DDL | create table ddltest(c1 int);
2009-06-16 15:02:16.006341 | DDL | drop view alltickitjoin;
2009-06-16 15:02:23.65285 | DDL | drop table sales;
2009-06-16 15:02:24.548928 | DDL | drop table listing;
2009-06-16 15:02:25.536655 | DDL | drop table event;
...
Reconstrução de SQL armazenado
Para reconstruir o SQL armazenado na coluna text
de SVL_STATEMENTTEXT, execute uma instrução SELECT para criar SQL a partir de uma ou mais partes na coluna text
. Antes de executar o SQL reconstruído, substitua os caracteres especiais por uma nova linha (\n
). O resultado da instrução SELECT a seguir são linhas de SQL reconstruído no campo query_statement
.
select LISTAGG(CASE WHEN LEN(RTRIM(text)) = 0 THEN text ELSE RTRIM(text) END, '') within group (order by sequence) AS query_statement
from SVL_STATEMENTTEXT where pid=pg_backend_pid();
Por exemplo, a consulta a seguir seleciona três colunas. A consulta em si tem mais de 200 caracteres e é armazenada em partes emSVL_STATEMENTTEXT.
select
1 AS a0123456789012345678901234567890123456789012345678901234567890,
2 AS b0123456789012345678901234567890123456789012345678901234567890,
3 AS b012345678901234567890123456789012345678901234
FROM stl_querytext;
Nesse exemplo, a consulta é armazenada em duas partes (linhas) na coluna text
de SVL_STATEMENTTEXT.
select sequence, text from SVL_STATEMENTTEXT where pid = pg_backend_pid() order by starttime, sequence;
sequence | text
----------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
0 | select\n1 AS a0123456789012345678901234567890123456789012345678901234567890,\n2 AS b0123456789012345678901234567890123456789012345678901234567890,\n3 AS b012345678901234567890123456789012345678901234
1 | \nFROM stl_querytext;
Para reconstruir o SQL armazenado em STL_STATEMENTTEXT, execute o seguinte SQL.
select LISTAGG(CASE WHEN LEN(RTRIM(text)) = 0 THEN text ELSE RTRIM(text) END, '') within group (order by sequence) AS text
from SVL_STATEMENTTEXT where pid=pg_backend_pid();
Para usar o SQL reconstruído resultante em seu cliente, substitua os caracteres especiais por uma nova linha (\n
).
text
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
select\n1 AS a0123456789012345678901234567890123456789012345678901234567890,\n2 AS b0123456789012345678901234567890123456789012345678901234567890,\n3 AS b012345678901234567890123456789012345678901234\nFROM stl_querytext;