powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Oracle Forms [игнор отключен] [закрыт для гостей] / разобрать регулярное выражение в default_where
2 сообщений из 2, страница 1 из 1
разобрать регулярное выражение в default_where
    #38539981
ramm9999
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
если кому не сложно-просьба оценить выражение

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
DECLARE
a0 Varchar2(255) := NULL;
a1 Varchar2(255) := NULL;
BEGIN
	GO_BLOCK('block');
	CLEAR_BLOCK(No_Validate);
	a1 := 'cdate BETWEEN
		NVL(to_date('''||:date1||'''),(SELECT min(cdate) FROM base)) and
		NVL(to_date('''||:date2||'''),(SELECT max(cdate) FROM base))'; 
	a0 :=
	'cid in
		(select cid from curr where REGEXP_LIKE
			(currency,''^(''
				||
				(select regexp_replace (UPPER('''||:CURR||'''),''[ ,]'',''|'') from dual)
				||
				'')'')
		)';

	IF :CURR IS NOT NULL THEN
		SET_BLOCK_PROPERTY('BASE',DEFAULT_WHERE, a0||' and '||a1);
	ELSE
		SET_BLOCK_PROPERTY('BASE',DEFAULT_WHERE, a1);
	END IF;
	EXECUTE_QUERY;
END;



код смотрит заполненность 2 дат и 1 поля(:CURR), где можно вводить данные через пробел или запятую - затем парсится.
Полаконичней можно написать?

Можно советовать книжки и RTFM, но не надо-итак читаю. Хотя сказать, можно сделать получше код или нет. Спасибо.
...
Рейтинг: 0 / 0
разобрать регулярное выражение в default_where
    #38540587
-=APS=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На айтемы блока рекомендую ссылаться полностью - :имя_блока.имя_айтема.

Вы применяете конкатенацию значений :date1, :date2, :curr с телом default_where (фактически, с телом запроса к базе). Это в большинстве случаев будет приводить к лишним parse при выполнении. Да и бороться со случайными одиночным кавычками вам придется. Можно применять непосредственную ссылку на айтем блока внутри выражения default_where, т.е. например, не:
'tab.field_a = nvl('||:block1.field_a_search_criteria||', 100)'
а
'tab.field_a = nvl(:block1.field_a_search_criteria, 100)'
Forms, как бы, умный, сам найдет нужный айтем, возьмет его значение и отправит на сервер запрос с соответствующим bind.

В случае to_date для строкового литерала настоятельно рекомендуется указывать форматную маску.

Вызывает сомнение целесообразность (select min/max from base) в подзапросах, как минимум, с точки зрения производительности.

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


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