в версии Atlantis 5.5.24 реализована поддержка Dual.insert into pick(wlist, crec)
select 1, #comp(1) from DUAL
union all select 1, #comp(2) from DUAL
union all select 1, #comp(23) from DUAL;
Прямой SQL
Модераторы: m0p3e, edward_K, Модераторы
-
- Сообщения: 13
- Зарегистрирован: 20 мар 2013, 17:41
Re: Прямой SQL
-
- Местный житель
- Сообщения: 2896
- Зарегистрирован: 24 июн 2005, 12:12
- Откуда: Иркутская область
Re: Прямой SQL
В саппорте в dsql пишу три запроса, в которых используюется одинаковая константа.
Можно как то объявить переменную типа declare @ts = 'text' и потом уже использовать @ts в этих трёх запросах?
Можно как то объявить переменную типа declare @ts = 'text' и потом уже использовать @ts в этих трёх запросах?
Re: Прямой SQL
В таких случаях пишу запрос не в Суппорте, а на SQL Server.
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: Прямой SQL
1. #define w visage i.e.
2.
#declare name (список параметров)
...
#end
3. Если на випе то можно руками собрать любое выражение по критериям
2.
#declare name (список параметров)
...
#end
3. Если на випе то можно руками собрать любое выражение по критериям
-
- Местный житель
- Сообщения: 2896
- Зарегистрирован: 24 июн 2005, 12:12
- Откуда: Иркутская область
Re: Прямой SQL
саппорт проглотит дефайны или диклэар? Запрос в модуле SQL саппорта пишется.
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: Прямой SQL
Support да, в обычных запросах использую постоянно. На dsql правда не юзал, но какая разница?
Re: Прямой SQL
Как на DSQL написать конструкцию типа
?
Функция
ругается на cast: "Ожидалось целое число".
Код: Выделить всё
dbo.toatldate(convert(datetime, substring(t$katparty.f$name, 1, 10), 103))
Функция
Код: Выделить всё
#date(cast(substring(katparty.name, 1, 2) as word), ...
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: Прямой SQL
судя по всему у вас в наименовании уже сидит дата.
Вопрос собственно в чем - а зачем преобразовывать в дату? да еще и через word?
Date2Str вот есть. Если нужно прям в запросе что то сравнивать, то можно наоборот дату привести в строку с маской YYYYMMDD и сравнивать с вашим полем. Ну или попробовать Cast|convert сразу в date. В сапорте тренируйтесь. #date все таки для констант, а не для полей.
Вопрос собственно в чем - а зачем преобразовывать в дату? да еще и через word?
Date2Str вот есть. Если нужно прям в запросе что то сравнивать, то можно наоборот дату привести в строку с маской YYYYMMDD и сравнивать с вашим полем. Ну или попробовать Cast|convert сразу в date. В сапорте тренируйтесь. #date все таки для констант, а не для полей.
Re: Прямой SQL
Для сравнения, вестимо.edward_K писал(а):зачем преобразовывать в дату?
Ошибка преобразования значения varchar "01/10/2006" в тип данных intedward_K писал(а):попробовать Cast сразу в date
Вот это хорошая идея!edward_K писал(а):дату привести в строку с маской YYYYMMDD и сравнивать
-
- Местный житель
- Сообщения: 552
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Челябинск
- Контактная информация:
Re: Прямой SQL
Если сравнить параметр типа даты с полем типа даты, так без преобразования можно:
Код: Выделить всё
var dbeg, dend: date;
...
SQLAddStr(strHandle, ' where basedoc.ddoc >= ? and basedoc.ddoc <= ?');
sqlPrepare(stmt, strHandle);
sqlBindParam(stmt, 1, dbeg);
sqlBindParam(stmt, 2, dend);
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: Прямой SQL
возможно ваше число не в том формате. Можно попробовать привести к нужному заменив / на чего нибудь.
Вам бы CONVERT с 3 параметром = 103, но он в доке не прописан - так что в ТП. А пока приведите к строке.
Вам бы CONVERT с 3 параметром = 103, но он в доке не прописан - так что в ТП. А пока приведите к строке.
-
- Местный житель
- Сообщения: 589
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Воронеж ОАО Верофарм. Воронеж
Re: Прямой SQL
Народ, а вот относительно FRM
Я сделал временную таблицу
...
Это срабатывает, таблицу в Oracle в своей схеме вижу.
Далее пробую залить в нее данные
а вот этот код уже не заливает данные в таблицу. В чем может быть загвоздка? Еще раз напомню, делаю это в FRM.
Я сделал временную таблицу
...
Код: Выделить всё
stmt := sqlAllocStmt;
sqlDropTmpTable('tbOracleData');
sqlAddStr(StmtString, 'table tbOracleData');
sqlAddStr(StmtString, '(');
sqlAddStr(StmtString, ' tNsap: String,');
sqlAddStr(StmtString, ' tviddv: String,');
sqlAddStr(StmtString, ' tzavod: string,');
sqlAddStr(StmtString, ' tsklad: String,');
sqlAddStr(StmtString, ' tparty: String,');
sqlAddStr(StmtString, ' tKsap: String,');
sqlAddStr(StmtString, ' tbarkod: String,');
sqlAddStr(StmtString, ' td56: String,');
sqlAddStr(StmtString, ' ted: String,');
sqlAddStr(StmtString, ' tkol: double');
sqlAddStr(StmtString, ');');
sqlCreateTmpTable(StmtString, ctmDynamicIndex);
sqlFreeStmt(stmt);
Далее пробую залить в нее данные
Код: Выделить всё
Message(TVMain.tmain.tNsap+' '+TVMain.tmain.tviddv+' '+TVMain.tmain.tzavod,0); // данные есть
stmt := sqlAllocStmt;
sqlAddStr(StmtString, 'INSERT INTO tbOracleData');
sqlAddStr(StmtString, '(');
sqlAddStr(StmtString, ' tNsap, tviddv, tzavod, tsklad, tparty, tksap, tbarkod, td56, ted, tkol');
sqlAddStr(StmtString, ')');
sqlAddStr(StmtString, 'VALUES');
sqlAddStr(StmtString, '(');
sqlAddStr(StmtString, ''''+ TVMain.tmain.tNsap + ''',');
sqlAddStr(StmtString, ''''+ TVMain.tmain.tviddv + ''',');
sqlAddStr(StmtString, ''''+ TVMain.tmain.tzavod + ''',');
sqlAddStr(StmtString, ''''+ TVMain.tmain.tsklad + ''',');
sqlAddStr(StmtString, ''''+ TVMain.tmain.tparty + ''',');
sqlAddStr(StmtString, ''''+ TVMain.tmain.tksap+ ''',');
sqlAddStr(StmtString, ''''+ TVMain.tmain.tbarkod+ ''',');
sqlAddStr(StmtString, ''''+ TVMain.tmain.td56+ ''',');
sqlAddStr(StmtString, ''''+ TVMain.tmain.ted+ ''',');
sqlAddStr(StmtString, ''''+ TVMain.tmain.tkol+ '''');
sqlAddStr(StmtString, ')');
sqlPrepare ( stmt, StmtString ); // текущий вариант
Message( sqlExecute ( stmt ),0); // возвращает 0
// sqlExecDirect(StmtString); пробовал и так
sqlFreeStmt(stmt);
Re: Прямой SQL
savov
Похоже, дело вот в этих последовательностях: ''''
Похоже, дело вот в этих последовательностях: ''''
-
- Местный житель
- Сообщения: 1844
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
Re: Прямой SQL
RAJAH писал(а):Как на DSQL написать конструкцию типа?Код: Выделить всё
dbo.toatldate(convert(datetime, substring(t$katparty.f$name, 1, 10), 103))
Функцияругается на cast: "Ожидалось целое число".Код: Выделить всё
#date(cast(substring(katparty.name, 1, 2) as word), ...
Поизвращаться можно попробовать и без строкового преобразования
Код: Выделить всё
sql
select name
from KATPARTY
inner join
(
select dsopr from katsopr where nsopr='11441122' // накладнуха такая именно от 14/10/2010 выписана , если перебить дату накладной например 15/10/2010 то в результат ничего не вернеться
)t1 on Cast(Substring(KATPARTY.name,1,2) as integer)+Cast(Substring(KATPARTY.name,4,2) as integer)*256+Cast(Substring(KATPARTY.name,7,4) as integer)*65536=t1.dsopr
where name='14/10/2010qwerty'
;
-
- Местный житель
- Сообщения: 589
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Воронеж ОАО Верофарм. Воронеж
Re: Прямой SQL
Rajan, не совсем понял мысль...RAJAH писал(а):savov
Похоже, дело вот в этих последовательностях: ''''
вот так в vip все прекрасно
Код: Выделить всё
sqlAddStr(StmtString, 'INSERT INTO tblSalesNotaAuk');
sqlAddStr(StmtString, '(');
sqlAddStr(StmtString, ' knrec, datob, name, summa, NSklad, invero, country, rpl, vozvrat');
sqlAddStr(StmtString, ')');
sqlAddStr(StmtString, 'VALUES');
sqlAddStr(StmtString, '(');
sqlAddStr(StmtString, ''''+ String(tblSalesNotaAuk.knrec) + ''',');
sqlAddStr(StmtString, ''''+ GetDateAsPascalLongint(tblSalesNotaAuk.datob) + ''',');
sqlAddStr(StmtString, ''''+ tblSalesNotaAuk.name + ''',');
sqlAddStr(StmtString, ''''+ tblSalesNotaAuk.sum + ''',');
sqlAddStr(StmtString, ''''+ String(tblSalesNotaAuk.nSklad) + ''',');
sqlAddStr(StmtString, ''''+ tblSalesNotaAuk.invero + ''',');
sqlAddStr(StmtString, ''''+ tblSalesNotaAuk.country + ''',');
sqlAddStr(StmtString, ''''+ tblSalesNotaAuk.rpl + ''',');
sqlAddStr(StmtString, ''''+ tblSalesNotaAuk.vozvrat + '''');
sqlAddStr(StmtString, ')');