powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / VFP + Oracle
11 сообщений из 11, страница 1 из 1
VFP + Oracle
    #37471609
pivo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте уважаемые

запрос на Oracle выборка головы счета
где cSql = "SELECT ... FROM ... WHERE ....."
= SQLEXEC(qq, (cSQL) ,"s_n_main1")
все работает

Далее пытаюсь связать новую выборку из Oracle с курсором FOXa
cSql = "select s_n.vist, s_n.zatr, s_n.otp from schema.s_n where s_n.kod_sch in (TRANSFORM(s_n_main1.cKod)) "
или
cSql = "select s_n.vist, s_n.zatr, s_n.otp from schema.s_n where s_n.kod_sch = (TRANSFORM(s_n_main1.cKod)) "
= SQLEXEC(qq, (cSQL) ,"s_n1")
где
s_n_main1.cKod - код счета в голове счета (кол-во от 10 до 10000 вариант переменной не проходит)
s_n.kod_sch - код счета в теле счета

Не работает.
Возможно у кого-то есть варианты?
...
Рейтинг: 0 / 0
VFP + Oracle
    #37471700
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pivocSql = "select s_n.vist, s_n.zatr, s_n.otp from schema.s_n where s_n.kod_sch in (TRANSFORM(s_n_main1.cKod))Вот смотрите. Вы послали на сервер запрос, туда приходит именно такой текст, как вы и написали:
Код: plaintext
select s_n.vist, s_n.zatr, s_n.otp from schema.s_n where s_n.kod_sch in (TRANSFORM(s_n_main1.cKod))
А теперь скажите, откуда Ораклу знать, что это за зверь такой (выделено)? Оракл же не видит фоксовых курсоров...

Пробуйте так
Код: plaintext
1.
lcCode=s_n_main1.cKod
cSql = "select s_n.vist, s_n.zatr, s_n.otp from schema.s_n where s_n.kod_sch in (TRANSFORM(?lcCode))
или так
Код: plaintext
cSql = textmerge("select s_n.vist, s_n.zatr, s_n.otp from schema.s_n where s_n.kod_sch in (TRANSFORM(<< s_n_main1.cKod >>)))

Но оба этих варианта подставляют, естественно, только одно значение кода из текущей записи курсора s_n_main1. Если вам нужен джойн таблицы на сервере со своим фоксовым курсором, это уже совсем другая задача. Тогда пишите, что вам надо, а не только свои варианты решения.
...
Рейтинг: 0 / 0
VFP + Oracle
    #37472196
pivo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за участие.
Нужен именно вариант решения данной задачи.
...
Рейтинг: 0 / 0
VFP + Oracle
    #37472442
1270.0.1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pivo,

SQL язык сервера СУБД Oracle не имеет функции TRANSFORM

вот так будет работать:
Код: plaintext
1.
lcCode=s_n_main1.cKod
cSql = "select s_n.vist, s_n.zatr, s_n.otp from schema.s_n where s_n.kod_sch in ( ?TRANSFORM(m.lcCode) )

или даже так:
Код: plaintext
1.
lcCode=s_n_main1.cKod
cSql = "select s_n.vist, s_n.zatr, s_n.otp from schema.s_n where s_n.kod_sch in ( ?m.lcCode )
...
Рейтинг: 0 / 0
VFP + Oracle
    #37472483
pivo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо
Но это одна запись,
а хотелось бы получить все записи
...
Рейтинг: 0 / 0
VFP + Oracle
    #37473007
1270.0.1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pivo,

если значений пара десятков:
Код: plaintext
1.
2.
3.
4.
5.
lcCode1=s_n_main1.cKod
skip
lcCode2=s_n_main1.cKod
skip
lcCode3=s_n_main1.cKod
cSql="select s_n.vist, s_n.zatr, s_n.otp from schema.s_n where s_n.kod_sch in (?m.lcCode1,?m.lcCode2,?m.lcCode3)"

если больше двух десятков и меньше 1000, можно так:
Код: plaintext
1.
2.
3.
4.
5.
lcCode=tran(s_n_main1.cKod)
skip
lcCode=lcCode+","+tran(s_n_main1.cKod)
skip
cCode=lcCode+","+tran(s_n_main1.cKod)
cSql="select s_n.vist, s_n.zatr, s_n.otp from schema.s_n where s_n.kod_sch in ( " + cCode + " )"
...
Рейтинг: 0 / 0
VFP + Oracle
    #37473216
pivo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1270.0.1

какой длинны может быть ( " + cCode + " )"
или другими словами сколько параметров может быть в IN (.................) selecta
...
Рейтинг: 0 / 0
VFP + Oracle
    #37473243
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pivo1270.0.1

какой длинны может быть ( " + cCode + " )"
или другими словами сколько параметров может быть в IN (.................) selecta
SQLEXEC() имеет ограничение на размер запроса в символах, в запросе к MS-SQL можно за раз примерно 4000 символов передать. Не скажу чье это ограничение - фокса или драйвера MS-SQL, если второе то у драйвера оракла может быть другое ограничение.

Если у тебя большой список планируется, то лучше проверь как отработает максимально длинный запрос.
...
Рейтинг: 0 / 0
VFP + Oracle
    #37473572
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pivoэто одна запись,
а хотелось бы получить все записиТо есть вам надо сджойнить ваш курсор с таблицей на оракловом сервере? Это либо через ИН, как написали выше, либо делать временную таблицу на сервере, лить туда что надо из вашего курсора, потом джойн этой таблицы с нужной.
...
Рейтинг: 0 / 0
VFP + Oracle
    #37473704
1270.0.1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pivo1270.0.1

какой длины может быть ( " + cCode + " )"
или другими словами сколько параметров может быть в IN (.................) selecta

размер переменной в vfoxpro ограничен размером оперативной памяти win32-приложения,
т.е. наскочить на это ограничение можно только специально, в порядке тестирования,
кстати .net отваливается при тестировании много раньше и по другим причинам...

а вот количество параметров в SQL ORACLE -- IN (.....) ограничено соображениями производительности
и вашим здравым смыслом, т.е. ни чем не ограничено... (если вы физически крепче DBA ORACLE)
...
Рейтинг: 0 / 0
VFP + Oracle
    #37475070
pivo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / VFP + Oracle
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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