Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Аналог eval в Oracle  [new]
rolling_kz
Member

Откуда:
Сообщений: 42
select * from any_tab s where function(s.id);

function возвращает строковое условие (например: 'field1=6')

и в результате надо получить:
select * from any_tab s where field1=6;

в лоб не срабатывает, а как можно сделать?
30 май 07, 10:07    [4202779]     Ответить | Цитировать Сообщить модератору
 Re: Аналог eval в Oracle  [new]
tru55
Member

Откуда: СПб
Сообщений: 19790
EXECUTE IMMEDIATE
30 май 07, 10:32    [4202950]     Ответить | Цитировать Сообщить модератору
 Re: Аналог eval в Oracle  [new]
rolling_kz
Member

Откуда:
Сообщений: 42
попробовал
select * from any_tab s where EXECUTE IMMEDIATE 'function(s.id)';

EXECUTE IMMEDIATE 'select * from any_tab s
where function(s.id)'

не работает,
подскажите плиз детальнее.

Вообще я имею ввиду такой же метод как в FGAC, когда формируется предикат и добавляется в запросы.
30 май 07, 10:47    [4203056]     Ответить | Цитировать Сообщить модератору
 Re: Аналог eval в Oracle  [new]
Elic
Member

Откуда:
Сообщений: 29977
rolling_kz
Вообще я имею ввиду такой же метод как в FGAC, когда формируется предикат и добавляется в запросы.
Предикат во FGAC не зависит от данных таблицы.
А "такой же метод как в FGAC" реализуется приблизительно так:
open c for 'select * from any_tab s where ' || some_function;
30 май 07, 10:52    [4203101]     Ответить | Цитировать Сообщить модератору
 Re: Аналог eval в Oracle  [new]
rolling_kz
Member

Откуда:
Сообщений: 42
может по другому будет понятнее:

таблица TAB, и поля ID, CONDITION
заполненная так:
1 'id=1'
2 'id=0'
3 'id>3'

таблица TAB2, и поля ID, FIELD1
заполненная так:
1 'f1'
2 'f2'
3 'f3'


надо вытащить
select * from TAB2 t2 where ??(select t.CONDITION from TAB t where t.id=1)??

а смысл огорода, в том чтобы для FGAC хранить предикаты в полях базы
30 май 07, 10:58    [4203153]     Ответить | Цитировать Сообщить модератору
 Re: Аналог eval в Oracle  [new]
db-man
Guest
rolling_kz
надо вытащить
select * from TAB2 t2 where ??(select t.CONDITION from TAB t where t.id=1)??

а смысл огорода, в том чтобы для FGAC хранить предикаты в полях базы


declare
  l_row TAB2%ROWTYPE;
begin
  execute immediate 'select * from TAB2 ...' into l_row;
  ...
end;
только там еще надо обрабатывать exceptions.
30 май 07, 11:03    [4203188]     Ответить | Цитировать Сообщить модератору
 Re: Аналог eval в Oracle  [new]
Elic
Member

Откуда:
Сообщений: 29977
rolling_kz
а смысл огорода, в том чтобы для FGAC хранить предикаты в полях базы
Ну так и в чём проблема? STFF Вопрос по процедуре DBMS_RLS.ADD_POLICY
30 май 07, 12:11    [4203816]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить