Страница 1 из 4

Oracle 7.3 + Clarion 10.12104 SQL запрос

Добавлено: 20 Июнь 2017, 9:49
SeeK
Доброго здоровья всем !

Жизнь повернулась так, что нужно вернуться в молодость :)

Исходные данные:
- База Oracle 7.3;
- Clarion 10.12104 (из FTP);
- Драйвер Oracle;

Генерирую бровс по одной таблице (для начала), запускаю и получаю ошибку:

"Error: (ORA-00933: SQL command not properly ended (-933))"

Транслирую и вижу запрос:

"SELECT A.RN, A."AUTHID", A.IDENT, A.COMPANY, A."DATE_FROM", A."DATE_TO", A.ACCOUNT FROM PARUS.ACCTURNS A ORDER BY A.RN NULLS FIRST"

И зачем мне этот "NULLS FIRST" ???
Собственно вопрос, есть ли возможность управлять SQL-запросом, а ещё лучше, где его вставить вручную при нативной генерации бровса ?

Заранее благодарен,
Степан.

Oracle 7.3 + Clarion 10.12104 SQL запрос

Добавлено: 20 Июнь 2017, 10:32
kreator
Степан, во-первых, если используете стандартный броуз, вручную генерить нет смысла. Во-вторых, проблема в "order by" - посмотрите индекс по которому броуз. "NULLS FIRST" это оракловая конструкция? Поменяйте индекс. Посмотрите, что в словаре по этой таблице написано. Был у меня опыт работы с Ораклом (совсем чуть-чуть), проблем не было, но и "NULLS FIRST" не помню.
Есть ещё подозрение. Может в "Actions" броуза на закладке "SQL Advanced" эта хрень прописано (не знаю зачем, но вдруг)?

Oracle 7.3 + Clarion 10.12104 SQL запрос

Добавлено: 20 Июнь 2017, 11:22
SeeK
"SQL Advanced" - пусто.
RN - Primary key.
PL/SQL Developer с "NULLS FIRST" тоже ошибку выдает, без него всё в порядке. Тупо убираю NULLS FIRST и всё работает.
NULLS FIRST/LAST используется для указания, где при сортировке должны быть значения NULL — в начале или в конце

Oracle 7.3 + Clarion 10.12104 SQL запрос

Добавлено: 20 Июнь 2017, 11:34
Дед Пахом
Посмотрите, как сгенерилось описание таблицы (FILE DRIVER('Oracle', bla-bla)...), может какие хинты драйвера Оракла добавились.

Oracle 7.3 + Clarion 10.12104 SQL запрос

Добавлено: 20 Июнь 2017, 11:49
SeeK
Вроде ничего криминального:

ACCTURNS FILE,DRIVER('Oracle'),PRE(ACC3),BINDABLE,THREAD,EXTERNAL('')
C_ACCTURNS_PK KEY(ACC3:RN),PRIMARY
I_ACCTURNS_IDENT KEY(ACC3:IDENT),DUP
Record RECORD,PRE()
RN PDECIMAL(15)
AUTHID CSTRING(31)
IDENT PDECIMAL(15)

...

Oracle 7.3 + Clarion 10.12104 SQL запрос

Добавлено: 20 Июнь 2017, 12:59
SeeK
Когда в File-Browsing List Box ставлю No Key, вот тогда работает и генерит "SELECT A.RN, A."AUTHID", A.IDENT, A.COMPANY, A."DATE_FROM", A."DATE_TO", A.ACCOUNT FROM PARUS.ACCTURNS A" без ORDER BY. Но это не совсем то.
Видать только палцАми. :(

Oracle 7.3 + Clarion 10.12104 SQL запрос

Добавлено: 20 Июнь 2017, 14:05
kreator
Меня смущает тип поля RN - pdecimal. Наверно, не криминал. В Оракле какой тип? Поменяйте в словаре для теста на LONG.

Oracle 7.3 + Clarion 10.12104 SQL запрос

Добавлено: 20 Июнь 2017, 14:24
SeeK
RN в Oracle описан как NUMBER. При импорте в словарь Clarion - pdecimal. Меняю на LONG ситуация аналогична.
Только когда убираю ключ, соответственно исчезает из запроса ORDER BY NULLS FIRST.

Oracle 7.3 + Clarion 10.12104 SQL запрос

Добавлено: 20 Июнь 2017, 14:42
Дед Пахом
SeeK писал(а): 20 Июнь 2017, 11:22PL/SQL Developer с "NULLS FIRST" тоже ошибку выдает
А почему? Вроде бы штатная конструкция?

Oracle 7.3 + Clarion 10.12104 SQL запрос

Добавлено: 20 Июнь 2017, 15:09
kreator
Ну, понятно.
Конструкции NULLS FIRST и NULLS LAST впервые появились в версии Oracle 8.1.6.

NoteBox.jpg

Personal Oracle 8.0 and higher only works with 32-bit programs.
Oracle дюже старый, может этот текст современный драйвер на автомате генерит.
Попробуйте в методе ApplyOrder после Parent Call посмотреть view{prop:SQLOrder}, view, понятно, какая там у Вас. В принципе здесь можно попробовать подсунуть нужный order by.

Oracle 7.3 + Clarion 10.12104 SQL запрос

Добавлено: 20 Июнь 2017, 15:40
SeeK
Та я в курсе, что оракл 7.3 не поддерживает конструкцию NULLS FIRST.
Вопрос изначально был, как управлять SQL запросом при нативной генерации бровса.

Kreator, огромное спасибо !!!
BRW1::View:Browse{prop:SQLOrder}='A.RN' то, что доктор прописал :)
Результат:
"SELECT A.RN, A."AUTHID", A.IDENT, A.COMPANY, A."DATE_FROM", A."DATE_TO", A.ACCOUNT FROM PARUS.ACCTURNS A ORDER BY A.RN"

Oracle 7.3 + Clarion 10.12104 SQL запрос

Добавлено: 20 Июнь 2017, 15:58
Дед Пахом
А вот это не подойдёт?
The Personal Oracle 7.1 Server behaves differently than other Oracle servers. When using Personal Oracle 7.1 you should inform Oracle Accelerator so it can tailor the generated SQL especially for Personal Oracle 7.1. For example:
DRIVER ('Oracle','/PERSONAL')
or
SEND (Myfile,'/PERSONAL')

Notes:
The /PERSONAL switch is not required for Personal Oracle 7.2 (Personal Oracle for Windows 95).
Personal Oracle 8.0 only works with 32-bit programs.

Oracle 7.3 + Clarion 10.12104 SQL запрос

Добавлено: 20 Июнь 2017, 16:14
kreator
SeeK писал(а): 20 Июнь 2017, 15:40 Kreator, огромное спасибо !!!
BRW1::View:Browse{prop:SQLOrder}='A.RN' то, что доктор прописал :)
Ожидаемо заработало. Только это временная удача. На всех экранах такой хернёй заниматься? Это во-первых. Во-вторых, почему-то Клаша не любит prop:SQLOrder. Сталкивался я с проблемами при изменении сортировки (разные закладки с разной сортировкой), перестаёт реагировать на prop:SQLOrder. Казалось бы чушь, но вот так. Подробностей не воспроизведу. И ораклового драйвера это может не касаться. У меня на ФБ проблемы.

Oracle 7.3 + Clarion 10.12104 SQL запрос

Добавлено: 20 Июнь 2017, 16:17
kreator
Дед Пахом писал(а): 20 Июнь 2017, 15:58 Personal Oracle 7.2 (Personal Oracle for Windows 95).
Вот это сильно. 7.3, наверно, недалеко ушёл. Откуда у Вас такие раритеты?

Oracle 7.3 + Clarion 10.12104 SQL запрос

Добавлено: 20 Июнь 2017, 22:38
Shur
А никого разве не смутило, что для primary key подаётся какая-то инструкция NULLS FIRST? Их [NULL'ов] там по определению быть не может.
Смотрю объявление ключа
SeeK писал(а): 20 Июнь 2017, 11:49 C_ACCTURNS_PK KEY(ACC3:RN),PRIMARY
и что-то не нахожу атрибута OPT.
Может в этом причина?