powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Oracle Forms [игнор отключен] [закрыт для гостей] / Странное поведение EXEC_SQL в Forms 11G
10 сообщений из 10, страница 1 из 1
Странное поведение EXEC_SQL в Forms 11G
    #38790339
Duddha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пользователь пожаловался, что не все строки данных отображаются - должно быть 4 строки, а выводятся только 3 (кроме первой).
Полез в форму разбираться. Там код следующего рода:
Код: 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.
  sqlstr := 'select name, value, null n_lgt, null k_lgt ' ||
  'from ... 
   ....
  order by value desc ';
	
  EXEC_SQL.parse(cursorID, sqlstr, exec_sql.V7);
		
  exec_sql.bind_variable(cursorID, ':tab_no', tab_no);
		
  EXEC_SQL.define_column(cursorID, 1, loc_name_prop, 120);
  EXEC_SQL.define_column(cursorID, 2, loc_value, 7);
  EXEC_SQL.define_column(cursorID, 3, loc_n_lgt, 15);
  EXEC_SQL.define_column(cursorID, 4, loc_k_lgt, 15);
	
  nIgn := EXEC_SQL.execute(cursorID);
	
  while (EXEC_SQL.fetch_rows(cursorID) > 0) loop
    create_record;
		 
    EXEC_SQL.column_value(cursorID, 1, :b_otp_prop.name_prop);
    exec_sql.column_value(cursorID, 2, :b_otp_prop.val);
    EXEC_SQL.column_value(cursorID, 3, :b_otp_prop.n_lgt);
    exec_sql.column_value(cursorID, 4, :b_otp_prop.k_lgt);
  end loop;



Решил, что как-то не так отрабатывает EXEC_SQL.FETCH_ROWS (подумал, что может сразу после EXEC_SQL.EXECUTE уже выбирается первая строка) и вместо цикла while сделал:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
  loop
    create_record;
		 
    EXEC_SQL.column_value(cursorID, 1, :b_otp_prop.name_prop);
    exec_sql.column_value(cursorID, 2, :b_otp_prop.val);
    EXEC_SQL.column_value(cursorID, 3, :b_otp_prop.n_lgt);
    exec_sql.column_value(cursorID, 4, :b_otp_prop.k_lgt);
		
    EXIT WHEN EXEC_SQL.FETCH_ROWS(cursorID) = 0;
  end loop;



Все строки появились.
Но это было вчера. А сегодня (на ночь и Forms Builder и Weblogic оставались запущенными, если это важно) форма стала вылетать со строки
Код: plsql
1.
sqlstr := 'select... 

в блок EXCEPTION с ошибкой, что ничего не выбрано (а что вообще может быть выбрано, если там только присвоение переменной текста запроса?). Закрыл Forms Builder , перестартовал Weblogic Server , снова запустил форму и... появилась пустая строка впереди. Вернулся снова к циклу while - всё стало работать как надо.

Скажите, пожалуйста, если кто знает, с чем подобное поведение может быть связано и как такую ситуацию предупредить? От чего может зависеть то, как EXEC_SQL.FETCH_ROWS выбирает строки? Может кто знает в каких ещё местах стоит ждать подобного подвоха?

Если бы было что-то связано с локальной машиной, тогда бы при перекомпилировании формы на сервере у пользователя было бы всё хорошо. Но в том то и дело, что и при запуске локально и при запуске с сервера программа ведёт себя одинаково.

Forms [64-битное] Версия 11.1.2.2.0
Oracle9i Enterprise Edition Release 9.2.0.8.0

Не связано ли это с тем, что версия Oracle старая?
...
Рейтинг: 0 / 0
Странное поведение EXEC_SQL в Forms 11G
    #38790476
Note 1626368.1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Duddha,

Зачем тут EXEC_SQL? не проще ли сделать блок b_otp_prop базовым и менять query datasource name?

По теме: в 11-ых Forms-ах есть такой баг First Row Not Fetched Using EXEC_SQL.EXECUTE - может твой случай.
...
Рейтинг: 0 / 0
Странное поведение EXEC_SQL в Forms 11G
    #38790572
Duddha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Note 1626368.1,

Вопрос "зачем" пока не обсуждается - сопровождаю переданную мне форму. Сам уже понимаю, что без внесения изменений не обойдётся. Пока только надо добиться работоспособности формы с внесенными изменениями.

По поводу ссылки - нет доступа к support.oracle.com (поддержка просрочена, пока, к сожалению, не продлевают). Можешь скинуть, что там пишут?
...
Рейтинг: 0 / 0
Странное поведение EXEC_SQL в Forms 11G
    #38791054
Note 1626368.1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DuddhaМожешь скинуть, что там пишут?Для этого надо быть не таким "скрытм"
...
Рейтинг: 0 / 0
Странное поведение EXEC_SQL в Forms 11G
    #38791342
Фотография mRdUKE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Duddha,

First Row Not Fetched Using EXEC_SQL.EXECUTE (Doc ID 1626368.1)

Applies to:
Oracle Forms - Version 11.1.1.6.0 to 11.1.2.2.0 [Release 11g]
Information in this document applies to any platform.
Symptoms


When obtaining a set of records with exec_sql.execute the first row is silently not provided (the resultset misses a row).
When using exec_sql.execute_and_fetch then things are fine (all rows are present in the recordset, the same cursor being used in both cases)

Changes

Upgraded Forms from Release 10gR2 to 11gR1 versions 11.1.1.6+ or to 11gR2 (11.1.2.0 to 11.1.2.2).
Cause

This is caused by Bug 16677514 EXEC_SQL.EXECUTE FETCH THE FIRST ROW that is announced fixed in future Forms release 12.1
This bug is caused by the newline character in front of the SELECT keyword in the SQL statement, preventing from treating it as a SELECT query. The fix of bug 11660455 included in 11.1.2.x and 11.1.1.6+ decided upon various cases where a statement with the word SELECT was to be treated as a SELECT query but was not checking for newline.


Solution

Either:

- Remove the newline character in front of the SELECT keyword in the SQL statement

or

- If available for your platform, apply Patch 16677514. If not, please contact Oracle Support.


обещают "пофиксить" в 12ой, ждите :)

..а вообще конечно лучше перепешите без exec_sql /
...
Рейтинг: 0 / 0
Странное поведение EXEC_SQL в Forms 11G
    #38791400
Duddha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Note 1626368.1 ,
Прошу прощения - не заметил галочки о скрытии e-mail ;)


mRdUKE ,
Спасибо за статью.
Собирался попробовать с EXECUTE_AND_FETCH , да всё равно вряд ли бы догадался, что дело в переносе строки. Изначально запрос был записан так:
Код: plsql
1.
2.
3.
sqlstr := '
           select name, value, null n_lgt, null k_lgt 
           from ... 



Проверил - при таком варианте EXECUTE пропускает первую строку. Если SELECT написать сразу после открывающей кавычки, тогда всё в порядке. EXECUTE_AND_FETCH отрабатывает нормально в обоих случаях.

Всем спасибо.

P.S. 12-ку ждать не буду, перепишу без EXEC_SQL, но там, как выяснилось, ещё много мест, где стоит переписать :)
...
Рейтинг: 0 / 0
Странное поведение EXEC_SQL в Forms 11G
    #38791402
Duddha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mRdUKE ,

Отдельное спасибо за файлик
...
Рейтинг: 0 / 0
Странное поведение EXEC_SQL в Forms 11G
    #38792562
Duddha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mRdUKE ,

Можно попросить тебя об одолжении?
Передал админу патч, но там readme прописано авторEnsure the patch for bug 17930316 of Linux (64-Bit ) has already been applied before you proceed with the current patch У нас этого патча нет. Можешь прислать его, если не сложно?

Заранее спасибо
...
Рейтинг: 0 / 0
Странное поведение EXEC_SQL в Forms 11G
    #38793089
Фотография mRdUKE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Duddha,

Пожалуйста.
...
Рейтинг: 0 / 0
Странное поведение EXEC_SQL в Forms 11G
    #38793215
Duddha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mRdUKE ,

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


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