[ОТВЕТИТЬ]
Опции темы
23.04.2015 14:15  
BotMan
начитался о Library Cache Oracle, вот и решил попробовать переписать свои запросы...
 
23.04.2015 14:28  
OlegON
извини, это как-то совсем не объяснение, что ты в этом коде делаешь... на подставляемую переменную никак не тянет.
 
23.04.2015 14:32  
Mtirt
1С через Com-объект возвращает только то, о чем она знает. В основном числа, строки, еще кое-какие специфичные вещи.
Что такое DBMS.putline 1С не знает. Совсем. Поэтому и не возвращает ничего.
Но вообще, согласна с Олегом, PL/SQL тут не пришей кобыле хвост.
Хочешь передавать параметры в запросы, так и определяй их как параметры, и передавай их...
 
"Спасибо" Mtirt от:
23.04.2015 15:07  
BotMan
Цитата:
Сообщение от Mtirt
Хочешь передавать параметры в запросы, так и определяй их как параметры, и передавай их...
а можно пример, пожалуйста?
 
23.04.2015 15:24  
Mtirt
Как подключиться из SQL 1С в Oracle Супермаг

Правда это было для 8-ки и OO4O написано. На 7-ке я этого делать не пыталась.
 
"Спасибо" Mtirt от:
23.04.2015 16:21  
BotMan
я так понимаю OO4O входит в оракловский клиент, тот что от Супермага по идеи должен прокатить ?
 
24.04.2015 07:00  
Mtirt
Я ставила в свое время отдельно.
Но что стоит у вас, я не знаю.
 
25.04.2015 16:11  
BotMan
И так:
Для подключения 1с 7.7 или 8+ можно использовать как минимум два способа:
1)Через ODBC (Open DataBase Connectivity)
Строка подключения:
Код:
«DRIVER={Microsoft ODBC for Oracle};UID=scott; PWD=Tiger; SERVER=ИмяБазы» 
или
«Provider=MSDAORA;Password=tiger;User ID=scott;Data Source=ИмяБазы;Persist Security Info=True»
Плюсы: простота работы, входит в ОС Windows.
Минусы: не поддерживает многие расширения Оракл.
Не стоит гонять через это соединение обработки, которые сверяют сотни ID и других значений.(читаем Library Cache Oracle).
Если отсылать пару запросов за день в Оракл, ничего страшного не произойдет. Например: отчет в котором из переменных только дата.

2)Через OO4O (Oracle Objects for OLE) требует установки из Oracle client компоненту
Код:
Oracle Objects for OLE
Строка соединения (1с 7.7):
Код:
«Соединение=СоздатьОбъект("OracleInProcServer.XOraSession");    
Ora=Соединение.OpenDatabase("ИмяБазы","scott/tiger",0);»
Рекомендуемое соединение к Оракл для написания приложений, которые постоянно обращаются к базе данных.

Пример 7.7:
задаем переменную, в которую будет передаваться состояние нашего подключения.
Код:
перем ora;      // лучше прописать в глобальном модуле и экспортировать, а тут закомментировать.
подключаемся к Базе Данных.
Код:
функция открытьБД()
Попытка 		
Соединение=СоздатьОбъект("OracleInProcServer.XOraSession");    
Ora=Соединение.OpenDatabase("ИмяБазы","Scott/triger",0); // (ИмяБазы должно присутствовать в TNSname.ora)
исключение 
	сообщить("не удалось подключиться");
конецпопытки;
конецфункции
создаем функцию, которая будет принимать текст запроса и параметры в запрос.

Код:
Функция Подключение(текстзапроса, параметр) 
	
если пустоезначение(Ora)=1  тогда  //если = 1 тогда создать подключение(создать сессию к ораклу), если уже подключено - использовать старое подключение!
	открытьБД();       
конецесли;	

параметр.ВыбратьСтроки(); 
Пока параметр.ПолучитьСтроку()=1 Цикл
Ora.Parameters.Remove(параметр.name); 
Ora.Parameters.Add(параметр.name,параметр.bar,1);
КонецЦикла;

НаборЗаписей=Ora.CreateDynaset(ТекстЗапроса,0);
                 
возврат   НаборЗаписей;
Ora.close();

КонецФункции


Код:
процедура Сформировать()

параметр = создатьобъект("таблицазначений");
параметр.очистить();
параметр.новаяколонка("bar","Строка");
параметр.новаяколонка("name","Строка");

текстзапроса = "Select ID from goods where barcode = :barcode";

параметр.новаястрока();
параметр.bar = "1234567896541";
параметр.name = "barcode";

запрос = подключение(текстзапроса, параметр); // передаем в функцию текст запроса и таблицу значений.
параметр.удалитьстроки();

запрос.movefist();

Пока запрос.EOF()=0 цикл
сообщить(запрос.Fields("ID").Value);
запрос.movenext();
конеццикла;


конецпроцедуры
все.
 
"Спасибо" BotMan от:
25.04.2015 17:16  
BotMan
поправил косячек:
Код:
Функция Подключение(текстзапроса, параметр) 
	
если пустоезначение(Ora)=1  тогда  //если = 1 тогда создать подключение(создать сессию к ораклу), если уже подключено - использовать старое подключение!
	открытьБД();       
конецесли;

для ы=0 по Ora.Parameters.count-1 цикл 
	Ora.Parameters.Remove(параметр.name);
конеццикла;
	

параметр.ВыбратьСтроки(); 
Пока параметр.ПолучитьСтроку()=1 Цикл
Ora.Parameters.Remove(параметр.name); 
Ora.Parameters.Add(параметр.name,параметр.bar,1);
КонецЦикла;

НаборЗаписей=Ora.CreateDynaset(ТекстЗапроса,0);
                 
возврат   НаборЗаписей;
Ora.close();

КонецФункции
 
27.04.2015 15:07  
BotMan
Код:
Функция Подключение(текстзапроса, параметр) 
	
если пустоезначение(Ora)=1  тогда  //если = 1 тогда создать подключение(создать сессию к ораклу), если уже подключено - использовать старое подключение!
	открытьБД();       
конецесли;

для ы=0 по Ora.Parameters.count-1 цикл 
Ora.Parameters.Remove(параметр.name);
конеццикла;
	

параметр.ВыбратьСтроки(); 
Пока параметр.ПолучитьСтроку()=1 Цикл
Ora.Parameters.Remove(параметр.name);
Ora.Parameters.Add(параметр.name,параметр.bar,1);
КонецЦикла;

НаборЗаписей=Ora.CreateDynaset(ТекстЗапроса,0);
                 
возврат   НаборЗаписей;
Ora.close();

КонецФункции
все таки лучше оставить как было 8)
 
 


Опции темы



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

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