powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / найти слово в базе, не зная ни таблицу, ни колонку - только схему
3 сообщений из 3, страница 1 из 1
найти слово в базе, не зная ни таблицу, ни колонку - только схему
    #40104583
Фотография Victor Cookin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пытаюсь найти слово IDX в базе, не зная ни таблицу, ни колонку - только схему:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
DECLARE
  ncount NUMBER;
  vwhere VARCHAR2(1000) := '';
  vselect VARCHAR2(1000) := ' select count(1) from ';
  vsearchstr VARCHAR2(1000) := 'IDX';
BEGIN
  FOR k IN (SELECT a.table_name
                  ,a.column_name
              FROM user_tab_cols a
             WHERE a.data_type LIKE '%VARCHAR%')
  LOOP
    vwhere := ' where ' || k.column_name || ' = :vsearchstr ';
    EXECUTE IMMEDIATE vselect || k.table_name || vwhere
      INTO ncount
      USING vsearchstr;
    IF (ncount > 0)
    THEN
      dbms_output.put_line(k.column_name || ' ' || k.table_name);
    END IF;
  END LOOP;
END;



Получаю:

ORA-00920: invalid relational operator
ORA-06512: at line 13
ORA-06512: at line 13

Рецепт взял отсюда:
https://community.oracle.com/tech/developers/discussion/2572717/how-to-search-a-particular-string-in-whole-schema

Что не так? Что порекомендуете для решения?
...
Рейтинг: 0 / 0
найти слово в базе, не зная ни таблицу, ни колонку - только схему
    #40104594
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victor Cookin


Что не так? Что порекомендуете для решения?


Ну так вставь DBMS_OUTPUT.PUT_LINE(vselect || k.table_name || vwhere); перед excute immediate. А так - скорее всего имя таблицы/поля состоит из нескольких слов, начи нается с цифры... что надо учитывать:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
DECLARE
  ncount NUMBER;
  vwhere VARCHAR2(1000) := '';
  vselect VARCHAR2(1000) := ' select count(1) from "';
  vsearchstr VARCHAR2(1000) := 'IDX';
BEGIN
  FOR k IN (SELECT a.table_name
                  ,a.column_name
              FROM user_tab_cols a
             WHERE a.data_type LIKE '%VARCHAR%')
  LOOP
    vwhere := '" where "' || k.column_name || '" = :vsearchstr ';
    EXECUTE IMMEDIATE vselect || k.table_name || vwhere
      INTO ncount
      USING vsearchstr;
    IF (ncount > 0)
    THEN
      dbms_output.put_line(k.column_name || ' ' || k.table_name);
    END IF;
  END LOOP;
END;



SY.
...
Рейтинг: 0 / 0
найти слово в базе, не зная ни таблицу, ни колонку - только схему
    #40104595
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И как минимум добавь AND ROWNUM = 1. Незачем терять время и рыть глубже - нашел первый IDX и усе.

SY.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / найти слово в базе, не зная ни таблицу, ни колонку - только схему
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]