[ОТВЕТИТЬ]
31.03.2010 10:30
Vlad_German
 
Добрый день. Может немного не по теме вопрос. Есть база в Oracle9i Release 9.2.0.8.0. Есть 1С 8.1. Пытаемся по ADO получить данные через MS OLE DB provider for Oracle. Строка соединения
СтрСоединения = "Provider=MSDAORA.1;Data Source=" + Спис.Получить(0) + ";User ID="+ Спис.Получить(3) + ";Password=" + Спис.Получить(4)+";Persist Security Info=true";
Соединение проходит. Дальше открываем подключение и даем команду на получение данных в рекордсет
СоединениеSQL = Новый COMObject("ADODB.Command");
СоединениеSQL.ActiveConnection = Подключение;
СоединениеSQL.CommandType = 1;
СоединениеSQL.CommandText = "SELECT * FROM SUPERMAG.DATA_POST where DATA_DOC>= "+ Формат(ДатаНачала,"ДФ=yyyy-MM-dd")+"T00:00:00+03:00";
И при выполнении команды
ЗаписиSQL = Новый ComObject("ADODB.RecordSet");
ЗаписиSQL = СоединениеSQL.Execute();
На последней строке вылетаем с ошибкой ORA-00933 команда к ораклу в собранном виде получается такая
SELECT * FROM SUPERMAG.DATA_POST where DATA_DOC>= 2010-03-31T00:00:00+03:00
SQL плюс ее отрабатывает без ошибок. Никто ни писал импорт через ADO? Второй день синтаксис подобрать не можем.
31.03.2010 10:48
OlegON
 
пишите принудительное приведение типа данных, в этом случае, судя по всему, to_date.
Цитата:
desc SUPERMAG.DATA_POST
в плюсе сделай
31.03.2010 11:00
Vlad_German
 
Это во вью которая DATA_POST мне нужно DATA_DOC сделать примерно таким: decode(SMDOCUMENTS.CREATEDAT,TO_DATE('99990101 00:00','YYYYMMDD HH24:MI'),NULL,SMDOCUMENTS.CREATEDAT) Data_Doc?
31.03.2010 11:06
OlegON
 
какой-то ты бред написал... desc сделай, будет видно какой запрос надо
31.03.2010 11:07
Mtirt
 
А просто "To_date(DATA_DOC, 'DD.MM.YYYY H24:Mi:SS')>=To_date("+Формат(ДатаНачала,"ДФ=yyyy-MM-dd")+" 00:00:00+03:00"+" 'DD.MM.YYYY H24:Mi:SS')"
31.03.2010 11:15
Vlad_German
 
1 SELECT * FROM SUPERMAG.DATA_POST where DATA_DOC>= 2010-03-31T00:00:00+03:00 desc data_post
2* run
sP2-0552: Переменная привязки "00" не описана.
sQL>

Это я уже видел, насколько я понимаю неправильный формат времени? Особо не пинайте я всю жизнь на MS SQL сижу.
31.03.2010 11:29
Vlad_German
 
Цитата:
Mtirt А просто "To_date(DATA_DOC, 'DD.MM.YYYY H24:Mi:SS')>=To_date("+Формат(ДатаНачала,"ДФ=yyyy-MM-dd")+" 00:00:00+03:00"+" 'DD.MM.YYYY H24:Mi:SS')"
если так то ORA-00907: отсутствует правая скобка
полная строка запроса: SELECT * FROM SUPERMAG.DATA_POST where To_date(DATA_DOC, 'DD.MM.YYYY H24:Mi:SS')>= To_date(31-03-2010 00:00:00+03:00 'DD.MM.YYYY H24:Mi:SS')
31.03.2010 11:34
Mtirt
 
вторая часть так: To_date('31.03.2010 00:00:00', 'DD.MM.YYYY H24:Mi:SS')
31.03.2010 11:43
Vlad_German
 
SELECT * FROM SUPERMAG.DATA_POST where To_date(DATA_DOC, 'DD.MM.YYYY H24:Mi:SS')>= To_date(31-03-2010 00:00:00 'DD.MM.YYYY H24:Mi:SS')
И все равно ORA-00907
31.03.2010 11:47
Mtirt
 
Кавычки специально пропустил?
И запятую...
31.03.2010 11:59
Vlad_German
 
Извиняюсь сообщение неправильно вывел
СоединениеSQL.CommandText = "SELECT * FROM SUPERMAG.DATA_POST where To_date(DATA_DOC, 'DD.MM.YYYY H24:Mi:SS')>= To_date('"+Формат(ДатаНачала,"ДФ=dd-MM-yyyy")+"', 00:00:00 'DD.MM.YYYY H24:Mi:SS')" ;

SELECT * FROM SUPERMAG.DATA_POST where To_date(DATA_DOC, 'DD.MM.YYYY H24:Mi:SS')>= To_date('31-03-2010', 00:00:00 'DD.MM.YYYY H24:Mi:SS')
Вехняя строка 1С, нижняя собранный запрос. Плюс ругается что переменная привязки "00" не описана
31.03.2010 12:02
Vlad_German
 
Цитата:
Mtirt Кавычки специально пропустил?
И запятую...
Спасибо все понял. Тормозим. Вопрос закрыт.
31.03.2010 14:39
Mtirt
 
Давай вернемся к 1С-ке.
to_date(Формат (Датаначала, "ДФ=dd.mm.yyyy чч:мм:сс"), 'DD.MM.YYYY H24:Mi:SS')
Так будет работать?
31.03.2010 15:27
Vlad_German
 
Да работает, все работает. А вашу шутку про H24 я оценил. Правда пришлось вдумчиво прочитать 20 постов на SQL.ru. Для истории вот правильная строка СоединениеSQL.CommandText = "SELECT * FROM SUPERMAG.DATA_POST where DATA_DOC>= To_date('"+Формат(ДатаНачала,"ДФ=dd.MM.yyyy")+" 00:00:00"+"', 'DD.MM.YYYY HH24:MI:SS')" ;
31.03.2010 15:32
Mtirt
 
Извините, опечатка...

А зачем прибавлять так время?
Нельзя средствами 1С получить дату время в нужном формате?
Или это 7-ка?
31.03.2010 15:41
Vlad_German
 
Наверно может и не нужно. Оптимизация кода еще впереди. У нас просто идет переход на 8 с 7 и мы еще всего не освоили. Вообще то мне нужно именно начало дня для полной уверенности и независимости от форматов времени на пользовательских машинах.
31.03.2010 15:51
Mtirt
 
Формат(НачалоДня(ДатаНачала)), для гарантии...
09.01.2014 04:09
frangu
 
Здарова, ребята! Помогите, пожалуйста, с триггером.
Насколько я понял, оракл ругается на переменные. Но почему - не знаю.

create or replace package dolgi_pkgP is
procedure closemonth;
end dolgi_pkgP;



create or replace package BODY dolgi_pkgP is

procedure closemonth
( m in potop.meseac%type,
g in potop.god%type) is
begin

select max(god) from potop into g;

select max(meseac) from potop a into m
where a.god = g;

insert into potop
(select adres_id, lgoty_id, tarif+1, total-fact_sum, 0, meseacgod.fun_meseac(m), meseacgod.fun_god(m,g), null, null, null
from potop
where meseac=m and god=g);

end closemonth;

end dolgi_pkgP;
10.01.2014 00:35
frangu
 
Я исправил уже там ошибки которые были.
Теперь другая ошибка.

[1]: ORA-24344: success with compilation error
[1]: 13/10 PL/SQL: ORA-00936: missing expression
[1]: 12/2 PL/SQL: SQL Statement ignored


create or replace package BODY dolgi_pkgP is

procedure closemonth
( m in potop.meseac%type,
g in potop.god%type) is
begin

select max(god) from potop into g;

select max(meseac) from potop a into m
where a.god = g;

insert into potop
(select adres_id, lgoty_id, tarif+1, total-fact_sum, 0, meseacgod.fun_meseac(m), meseacgod.fun_god(m,g), null, null, null
from potop
where meseac=m and god=g);

end closemonth;

end dolgi_pkgP;
10.01.2014 08:45
OlegON
 
Код:
select adres_id, lgoty_id, tarif+1, total-fact_sum, 0, meseacgod.fun_meseac(m), meseacgod.fun_god(m,g), null, null, null
from potop
where meseac=m and god=g;
неплохо бы тег CODE использовать.
выполни строку выше, работает она у тебя или нет? У меня выделенное вопросы вызывает, это что?
11.01.2014 23:27
frangu
 
Твой код не выполняется, потому что m и g это параметры в пакете. Вне пакета их нельзя использовать( пока пакет неисправен).

Выделенное является параметрами в пакете. Вот сам пакет.

create or replace package meseacgod is
function fun_meseac
( f_meseac in potop.meseac%type)
return potop.meseac%type;

function fun_god
(f_god in potop.god%type,
f_meseac in potop.meseac%type)
return potop.god%type;
end meseacgod;
/

create or replace package body meseacgod is

function fun_meseac ( f_meseac in potop.meseac%type)
return potop.meseac%type
is

begin
if f_meseac = 12 then
return 1;
else
return f_meseac+1;
end if;
end fun_meseac;

function fun_god (f_god in potop.god%type,
f_meseac in potop.meseac%type)
return potop.god%type
is

begin
if f_meseac = 12 then
return f_god+1;
else
return f_god;
end if;
end fun_god;

end meseacgod;
12.01.2014 01:40
frangu
 
Я замутил пакет. Можете сказать, m и g у меня локальные переменные?

create or replace package BODY dolgi_pkgP is

procedure closemonth is
g number(4);
m number(2);

begin

select max(god)into g from potop;
select max(meseac) into m from potop a where a.god = g;

insert into potop(adres_id, lgoty_id, tarif, dolgi, potreblenie, meseac, god, itogo_meseac, total, fact_sum, potop_id)
select adres_id, lgoty_id, tarif+1, total-fact_sum, 0, meseacgod.fun_meseac(m), meseacgod.fun_god(m,g), null, null, null, potop_id.NEXTVAL
from potop
where meseac=m and god=g;

end closemonth;

end dolgi_pkgP;
12.01.2014 09:14
OlegON
 
Мечешься и перебираешь варианты, не пытаясь разобраться в сути и не показывая нам ошибки, а без этого трудно сказать - в голове никто не компилит. В данном случае - да, локальные для процедуры closemonth, но раньше они в процедуру, вроде, передавались, а теперь просто объявляются. Каша какая-то.
Опции темы


Часовой пояс GMT +3, время: 21:07.

 

Форум сделан на основе vBulletin®
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd. Перевод: zCarot и OlegON
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.