Как сделать чтобы в Oracle запрос был с связанными переменны
ODBC
Модератор: Andrew™
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Как сделать чтобы в Oracle запрос был с связанными переменны
Как сделать через PROP:SQL чтобы в Oracle запрос был со связанными переменными.
tanatol
Re: Как сделать чтобы в Oracle запрос был с связанными перем
вопрос не очень понятен, может требуется следующее:tanatol писал(а):Как сделать через PROP:SQL чтобы в Oracle запрос был со связанными переменными.
Код: Выделить всё
I LONG
CODE
I = 20
FILE{PROP:SQL} = 'SELECT Field1,Field2 from myTable where Field3=' & I
Andrew™
tanatol
-
- Ветеран
- Сообщения: 311
- Зарегистрирован: 08 Июль 2005, 22:04
По-видимому, это проблема не только оракла. Использование кларион-переменных в SQL-запросах вопрос вообще мутный. В доке пшик - т.е. написано очень мало. Может быть Андрей Мялин выложит на форум несколько фрагментов заведомо работающего кода с краткими комментариями. Я использую для этих целей ламерский приемчик - создаю служебную таблицу, в которой описываю нужные переменнные, данные в нее заталкиваю с помощью клариона (set, next ...), а затем считываю эти данные внутри SQL-запроса. Так же и в обратную сторну для передачи результатов в кларион-переменные. Грубо конечно, но зато работает.
lsgsoftware
Это как в цикле?tanatol писал(а):В Oracle тогда будет курсор вида:'SELECT Field1,Field2 from myTable where Field3=20 , а надо :SELECT Field1,Field2 from myTable where Field3=:b1 . Чтобы можно было использовать этот курсор для всех значений в цикле!
Это уже не один запрос, а несколько, т к на момент открытия КУРСОРА будет взято определённое значение :B1, получается что в твоём случае опять работает следующая конструкция
Код: Выделить всё
LOOP I# = 1 TO 100
FILE{PROP:SQL} = 'SELEC Field1,Field2 from myTABLE where Field3=' & I#
NEXT(FILE)
END
всё зависит от задачи и LOOP можно превратить в BETWEEN или IN конструкцию, тады будет один курсор
Код: Выделить всё
FILE{PROP:SQL} = FILE{PROP:SQL} = 'SELEC Field1,Field2 from myTABLE where Field3 BETWEEN ' & i# & ' AND ' & J#
Код: Выделить всё
FILE{PROP:SQL} = FILE{PROP:SQL} = 'SELEC Field1,Field2 from myTABLE where Field3 IN( ' & i# & ',' & J# & ')'
Andrew™
это на тему биндования переменных, да, в FILE,DRIVER сложновато их юзать через PROP:SQL, вот как это выглядит у меня:lsgsoftware писал(а):По-видимому, это проблема не только оракла. Использование кларион-переменных в SQL-запросах вопрос вообще мутный. В доке пшик - т.е. написано очень мало. Может быть Андрей Мялин выложит на форум несколько фрагментов заведомо работающего кода с краткими комментариями. Я использую для этих целей ламерский приемчик - создаю служебную таблицу, в которой описываю нужные переменнные, данные в нее заталкиваю с помощью клариона (set, next ...), а затем считываю эти данные внутри SQL-запроса. Так же и в обратную сторну для передачи результатов в кларион-переменные. Грубо конечно, но зато работает.
Код: Выделить всё
sql MAVSelect
I LONG
CODE
sql.Init(1,1) ! хотим одну запись прочитать
sql.BindFields(myTable) ! читаем все поля записи файла из DCT
LOOP I = 1 TO 100
sql.Where(myTable.Field3,I)
IF NOT sql.Run() AND NOT sql.Fetch()
! прочитали успешно
ELSE
MAVSHOWERROR
END
sql.Reset()
END
Код: Выделить всё
select Field1,Field2,Field3 from myTable where Field3=?
Код: Выделить всё
sql.BindParameter(myTable.Field3,1)
sql.BindParameter(myTable.Field3,10)
sql.Where(sql.field(myTable.Field3) & ' in(?,?)')
Код: Выделить всё
select ... from myTable where Field3 in (select Field3 from #TempTable)
Andrew™
ВСПОМНИЛ КАК ТАКОЙ ЗАПРОС ВОСПРОИЗВЕСТИ В CLARIONtanatol писал(а):В Oracle тогда будет курсор вида:'SELECT Field1,Field2 from myTable where Field3=20 , а надо :SELECT Field1,Field2 from myTable where Field3=:b1 . Чтобы можно было использовать этот курсор для всех значений в цикле!
Код: Выделить всё
I LONG
sql VIEW(myTable)
PROJECT(FILE:Field1)
PROJECT(FILE:Field2)
END
CODE
PUSHBIND
BIND('I',I)
BIND(FILE:RECORD)
LOOP I = 1 TO 100
sql{PROP:Filter} ='FILE:FIELD3=I'
open(sql)
IF NOT ERRORCODE()
LOOP
NEXT(sql)
IF ERRORCODE() THEN BREAK.
END
CLOSE(sql)
END
END
POPBIND
Код: Выделить всё
SELECT Field1,Field2 from myTable where Field3=:b1
Andrew™
Цикл у меня не такой простой : идет по кларионовскому файлу. И запрос к Ораклу не к одной таблице, а более сложный с использованием нескольких таблиц, а таблица из словаря - это просто подложка для результата. Где в последнем примере задать запрос ( PROP:SQL ) ? А то чтобы не плодить кучу курсоров , приходится использовать процедуру, реализующую этот сложный запрос.
tanatol
в последнем примере не надо юзать PROP:SQL, а надо юзать PROP:Filter, DRIVER сам его преобразует в SQL запросtanatol писал(а):Цикл у меня не такой простой : идет по кларионовскому файлу. И запрос к Ораклу не к одной таблице, а более сложный с использованием нескольких таблиц, а таблица из словаря - это просто подложка для результата. Где в последнем примере задать запрос ( PROP:SQL ) ? А то чтобы не плодить кучу курсоров , приходится использовать процедуру, реализующую этот сложный запрос.
Andrew™
tanatol
Andrew™
tanatol
можно и не прописывать таблицы A и B в DCT, а создать на сервере требуемую SQL View - по сути это скомпилированный SQL запрос, в DCT только её и продекларировать и по ней и работатьtanatol писал(а):Спасибо за ответы. Придется в кларионовском словаре прописывать таблицы A и B, затем их join-ть в View. Одной таблицой-подложкой для различных запросов с разными таблицами не обойтись, чтобы можно в Оракле иметь куросры со связанными переменными.
Andrew™
Вернуться в «SQL, Oracle, ...»
Перейти
- CW
- ↳ CLARION for Windows
- ↳ CLARION for Internet
- ↳ Clarion.NET
- Эксклюзив
- ↳ Приват
- CLARION и...
- ↳ Reports
- ↳ Железо
- ↳ Готовые программы, шаблоны, библиотеки...
- ↳ cJSON
- ↳ LibCurl
- ↳ MAV
- ↳ SQL, Oracle, ...
- ↳ Multi-программирование(Pascal/Delphi, и т.д.)
- ↳ WinDev
- DOS
- ↳ CLARION for DOS
- Разное
- ↳ Новости
- ↳ English
- ↳ Ресурсы
- ↳ Работа
- ↳ Обо всем ...
- ↳ Обсуждение этого Форума (типа, Гостевая книга)