#oracle #plsql
#Oracle #plsql
Вопрос:
Привет, я пытаюсь выполнить этот запрос, но получаю эту ошибку
Запрос 1
select OWNER,table_name,
to_number(extractvalue(xmltype(dbms_xmlgen.getxml('select count(*) c from '||owner||'.'||table_name)),'/ROWSET/ROW/C')) as count
from all_tables
Работает нормально
Запрос 2 — Включены дополнительные столбцы (sample_size, last_analyzed)
select OWNER,table_name,
to_number(extractvalue(xmltype(dbms_xmlgen.getxml('select count(*) c from '||owner||'.'||table_name)),'/ROWSET/ROW/C')) as count,
sample_size, last_analyzed
from all_tables
Ошибка — ?
ORA-19202: Error occurred in XML processing
ORA-00933: SQL command not properly ended
ORA-06512: at "SYS.DBMS_XMLGEN", line 176
ORA-06512: at line 1
19202. 00000 - "Error occurred in XML processing%s"
*Cause: An error occurred when processing the XML function
*Action: Check the given error message and fix the appropriate problem
Запрос 2 — Проблема в чем может быть проблема?— Объяснение и разрешение
Комментарии:
1. Не используйте all_tables, поскольку он содержит все таблицы, на которые у вас есть права. Даже если вставить только прямо в таблицу. Таким образом, вы можете использовать таблицу метаданных для получения привилегий и найти таблицы, в которых у вашего пользователя есть select grants own tablea
2. @ Popeye итак, в какой таблице мне нужно искать?
3.
from all_tables where Owner = you or you have select grant on table
. USER_TAB_PRIVS4. Проблема с привилегиями должна вызвать ORA-01031. Я думаю, что у вас есть имя таблицы со специальным символом в нем. Попробуйте
select * from all_tables where regexp_instr(table_name, '[^[:alnum:]$_]')>0;
5. Альтернативно, запустите
select 'select 1 from '||owner||'.'||table_name as q from all_tables
, скопируйте / вставьте выходные данные и запустите его как скрипт, чтобы увидеть, какое имя таблицы вызывает проблему.