Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 правильно ли сгенерирован запрос?  [new]
guest11111
Guest
Есть система, в которой пользователь задает определенные условия, на основании которых выстраивается запрос (с помощью всевозможных конкатенации и т.д.). Какого фига нужна такая система - уже невозможно биться головой об стену, поскольку от всех начальников, в том числе от своего слышу только "Хочу!", но не ответы на вопрос "Почему именно так и никак иначе?". Вобщем придется эти запросы разбирать. Вопрос, можно ли в ORACLE как то понять - синтаксически правильно ли написан запрос, не запуская его?
19 окт 10, 18:45    [9637011]     Ответить | Цитировать Сообщить модератору
 Re: правильно ли сгенерирован запрос?  [new]
GL
Member

Откуда: Харьков
Сообщений: 1513
guest11111,

explain plan
19 окт 10, 18:48    [9637027]     Ответить | Цитировать Сообщить модератору
 Re: правильно ли сгенерирован запрос?  [new]
suPPLer
Member

Откуда: Харків, Україна
Сообщений: 7794
Блог
guest11111 ,

dbms_sql.parse. И что-то мне подсказывает, что этот пакет Вам ещё пригодится...
19 окт 10, 18:53    [9637056]     Ответить | Цитировать Сообщить модератору
 Re: правильно ли сгенерирован запрос?  [new]
-2-
Member

Откуда:
Сообщений: 15330
suPPLer
dbms_sql.parse
Зависит от произвольности запроса
> create table test_parse(n number);
create table succeeded.

> select * from test_parse;
N                      
---------------------- 

> var c number

> exec :c := dbms_sql.open_cursor
anonymous block completed

> exec dbms_sql.parse(:c, 'drop table test_parse',  dbms_sql.native)
anonymous block completed

> exec dbms_sql.close_cursor(:c)
anonymous block completed

> select * from test_parse

ORA-00942: таблица или представление пользователя не существует
19 окт 10, 19:22    [9637203]     Ответить | Цитировать Сообщить модератору
 Re: правильно ли сгенерирован запрос?  [new]
suPPLer
Member

Откуда: Харків, Україна
Сообщений: 7794
Блог
-2-,

спасибо, я в курсе, читал. Но надеюсь, что ТС ведёт речь только о запросе, построенном на основе "определённых условий"...
19 окт 10, 19:54    [9637369]     Ответить | Цитировать Сообщить модератору
 Re: правильно ли сгенерирован запрос?  [new]
guest11111
Guest
Большое всем спасибо..
20 окт 10, 10:38    [9638967]     Ответить | Цитировать Сообщить модератору
 Re: правильно ли сгенерирован запрос?  [new]
-2-
Member

Откуда:
Сообщений: 15330
guest11111,

exec sys.utl_xml.parseQuery(user, 'with t as (select dummy a from dual) select * from t where rownum<=1', :result)

<QUERY>
  <WITH>
    <WITH_ITEM>
      <QUERY_ALIAS>T</QUERY_ALIAS>
      <QUERY>
        <SELECT>
          <SELECT_LIST>
            <SELECT_LIST_ITEM>
              <COLUMN_REF>
                <TABLE>DUAL</TABLE>
                <COLUMN>DUMMY</COLUMN>
              </COLUMN_REF>
              <COLUMN_ALIAS>A</COLUMN_ALIAS>
            </SELECT_LIST_ITEM>
          </SELECT_LIST>
        </SELECT>
        <FROM>
          <FROM_ITEM>
            <TABLE>DUAL</TABLE>
          </FROM_ITEM>
        </FROM>
      </QUERY>
    </WITH_ITEM>
  </WITH>
  <SELECT>
    <SELECT_LIST>
      <SELECT_LIST_ITEM>
        <LITERAL>*</LITERAL>
      </SELECT_LIST_ITEM>
    </SELECT_LIST>
  </SELECT>
  <FROM>
    <FROM_ITEM>
      <QUERY_ALIAS>T</QUERY_ALIAS>
    </FROM_ITEM>
  </FROM>
  <WHERE>
    <LE>
      <ROWNUM/>
      <LITERAL>1</LITERAL>
    </LE>
  </WHERE>
</QUERY>
Если запрос некорректный, возвращается пустой клоб.
21 окт 10, 18:15    [9652154]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить