Herdei uma consulta com mais de 1.000 linhas que funciona no Oracle SQL Developer.
Quando tento executar a consulta em um script Python, recebo um erro (Ocorreu um erro: ORA-00900: instrução SQL inválida) na linha: EXEC DBMS_STATS.gather_table_stats('SSS', 'YYY') .
Tenho pouca experiência com bancos de dados e uma busca no Google sobre o erro não gerou uma solução possível.
Script Python:
with open('myquery.sql', 'r') as sql_file:
query = str(sql_file.read().replace("\n\n",""))
sql_commands = query.split(';')
for command in sql_commands:
try:
if command.strip() != '':
print(command)
cur.execute(command)
connection.commit()
except Exception as e:
print(f"An error occurred: {e}")
connection.commit()
As últimas linhas da consulta (myquery.sql):
DELETE
FROM CD_SS.MM_DSD_MIG_MASTER;
commit;
INSERT INTO CD_SS.MM_DSD_MIG_MASTER
SELECT DISTINCT
PATTERN,
b_ITEM_NUM,
'N',
NULL, NULL, NULL
FROM CD_SS.MM_DSD_MIG_PATTERNS;
commit;
update MM_DSD_MIG_MASTER
set MIGRATION_STATUS_FLAG = 'Z'
where MIGRATION_STATUS_FLAG = 'N';
commit;
grant all privileges on MM_DSD_MIG_MASTER to public;
grant all privileges on MM_DSD_MIG_PATTERNS to public;
DBMS_STATS.gather_table_stats('CD_SS', 'MM_DSD_MIG_PATTERNS');
DBMS_STATS.gather_table_stats('CD_SS', 'MM_DSD_MIG_MASTER');
Tudo funciona se as linhas DMS_STATS forem omitidas, mas fui informado que isso deve permanecer.