powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / как создать временную таблицу из PB ?!
40 сообщений из 40, показаны все 2 страниц
как создать временную таблицу из PB ?!
    #33384679
rhs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rhs
Гость
Коллеги, помогите !

PB 8 + MS SQL 2000 через OLE DB

В приложении используются временные таблицы.

Чтобы dw painter мог видеть эти таблицы, пытаюсь из ISQL создавать эти самые временные таблицы командой CREATE TABLE #t1( id int).
Но временные таблицы НЕ СОЗАЮТСЯ!

Сначала думал это глюк какой. Но потом выяснил, что в OLE DB драйвере для MSSQL 2000 используется механизм выполнения запросов через PREPARE.
А этот механизм использует выполнение запроса в хранимой процедуре.
И в BOLе так и сказано, что временные объекты надо создавать без PREPARE, а напрямую.

Но как заставить PB делать это напрямую?

Причем когда в приложении выполняется EXECUTE IMMEDIATE с тем же CREATE TABLE #t1... , то в profilerе видно, что никаких PREPARE нету, идет прямое выполнение команд, и все работает!

Посоветуйте, как создать временную таблицу из PB ?!
...
Рейтинг: 0 / 0
как создать временную таблицу из PB ?!
    #33384995
Фотография savosin_sergey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробуй две решётки:
Код: plaintext
execute create table ##a_table_for_a_big_deal
...
Рейтинг: 0 / 0
как создать временную таблицу из PB ?!
    #33385053
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
savosin_sergeyпопробуй две решётки:
Код: plaintext
execute create table ##a_table_for_a_big_deal

Это глобальные таблицы, не то - они видны всем сессиям.
...
Рейтинг: 0 / 0
как создать временную таблицу из PB ?!
    #33385056
rhs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rhs
Гость
две решётки проходит, но при этом создается ГЛОБАЛЬНАЯ временная таблица, которая видна другим пользователям.
Вся радость локальных временных таблиц в том что там формируется выборка только для текущей сессии.
...
Рейтинг: 0 / 0
как создать временную таблицу из PB ?!
    #33385082
bumsy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно сделать так прямо в sql для dw :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
IF (SELECT object_id('tempdb..#TabMerge')) IS NULL
	CREATE TABLE #TabMerge
	(id DEC( 18 ) IDENTITY( 1 , 1 ) NOT NULL,
	num DEC( 18 ) null)
ELSE
	TRUNCATE TABLE #TabMerge

EXEC sp_fill_TabMerge :d1, :d2

SELECT 
	num,
FROM #TabMerge
WHERE
	num >  1000 

В данном случае sp_fill_TabMerge - хранимая процедура на сервере, которая заполняет данными времянку #TabMerge.
...
Рейтинг: 0 / 0
как создать временную таблицу из PB ?!
    #33385145
rhs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rhs
Гость
2 bumsy

Это круто!!!

Не знал что так можно
...
Рейтинг: 0 / 0
как создать временную таблицу из PB ?!
    #33385296
bumsy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Правда если сохранить dw c таким sql (пример выше), а потом еще раз войти в редактор sql для этого dw, то код будет отформатирован powerbuilder'ом по его внутренним каким-то правилам, а также добавятся пустые строки. (в 6-ке и 9-ке это происходит).
P.S. Говорят, что такой sql надо править через edit source.
...
Рейтинг: 0 / 0
как создать временную таблицу из PB ?!
    #33385398
rhs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rhs
Гость
2 bumsy

В PB 6 действительно работает.
В PB 8 стал проверять, что то не получается, до конца проверить не успел

А какая у Вас версия PB, СУБД и какой интерфейс используете ?
...
Рейтинг: 0 / 0
как создать временную таблицу из PB ?!
    #33385656
Andyn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rhsКоллеги, помогите !

В приложении используются временные таблицы.

Чтобы dw painter мог видеть эти таблицы, пытаюсь из ISQL создавать эти самые временные таблицы командой CREATE TABLE #t1( id int).
Но временные таблицы НЕ СОЗАЮТСЯ!

Чтобы dw painter мог видеть эти таблицы (локальные для каждой сессии), их нужно создавать из ISQL в Database painter PowerBuilder'а, т.к. коннект у него и DW painter'а общий. А в приложении писать например так, как предложил bumsy или через execute immediate. У нас именно такая схема и работает с Sybase ASE.
...
Рейтинг: 0 / 0
как создать временную таблицу из PB ?!
    #33386430
rhs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rhs
Гость
2 Andyn

Дык, так и делаю.

В PB 6 все получается.

А в PB8 когда создаю в ISQL в Database painter PowerBuilder'а таблица в базе
не создается, и dw ее не видит.
Причем если использовать интерфейс MSS SQL Server 6.x, то все работает, а если SQLOLEDB, то не работает.
...
Рейтинг: 0 / 0
как создать временную таблицу из PB ?!
    #33387515
rcryo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автордве решётки проходит, но при этом создается ГЛОБАЛЬНАЯ временная таблица, которая видна другим пользователям.
Вся радость локальных временных таблиц в том что там формируется выборка только для текущей сессии.

Вся радость глобальных временных таблиц, что они видны всем пользователям, но содержат данные только текущей сессии. Их можно создать один раз вместе с базой и пользоваться всю жизнь, хоть в паинтере PB, хоть в приложении.
Это для ASA, неужели в MS SQL по другому?
...
Рейтинг: 0 / 0
как создать временную таблицу из PB ?!
    #33387563
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конечно по другому, где MSSQL, а где ASA

В MSSQL если одна сессия создала глобальную времянку, то другая сессия не может ее создать - она же видна всем. Так что нужно проверять, создана ли она уже. И главное - если сессия, которая ее создала, дисконектиться, то такая таблица автоматом удаляется, обламывая прочие сессии. Конечно можно описать глобальную таблицу на автоматическое создание, только не как у ASA в метаструктуре, а через заднее место в TempDB. Но данные будут все равно у сессий общие, так что толку от такой таблички все равно никакого.
...
Рейтинг: 0 / 0
как создать временную таблицу из PB ?!
    #33387578
bumsy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторА какая у Вас версия PB, СУБД и какой интерфейс используете ?
9.0.3 8511, MS SQL 2000, интерфейс MSS и OLE DB.
...
Рейтинг: 0 / 0
как создать временную таблицу из PB ?!
    #33391811
rhs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rhs
Гость
2 bumsy

Слушай, а dw c таким sql вы создаете через драйвер OLEDB или может через MSS ?

У меня на синтаксис sql не ругается, но список столбцов в dw получается пустой.
...
Рейтинг: 0 / 0
как создать временную таблицу из PB ?!
    #33392256
rhs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rhs
Гость
Нашел описание проблемы на сайте Sybase.com

Строка поиска “create temp table ms”

Это текст найденной ссылки:

Solved Cases (#10998131)-PowerBuilder 0800-PC Windows NT (Solved Cases)
In Powerbuilder 8.0.4 when using the OLEDB driver to connect to MS SQL Server 2000, insert fails on temp tables which are created using the #temp syntax. The inserts work fine when the temp tables are created using the ##table syntax. This problem does n
Category: Support and Trouble Shooting Date: Mar 30, 2004


Но эта ссылка закрыта!
Я не могу в нее залезть!!
Надо иметь какие-то специальные права доступа!!! Типа иметь договор на техническую поддержку.

Товарищи! У кого есть договор с Sybase?
Посмотрите, пожалуйста, чего там пишут
...
Рейтинг: 0 / 0
как создать временную таблицу из PB ?!
    #33395497
Фотография savosin_sergey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUSКонечно по другому, где MSSQL, а где ASA

В MSSQL если одна сессия создала глобальную времянку, то другая сессия не может ее создать - она же видна всем. Так что нужно проверять, создана ли она уже. И главное - если сессия, которая ее создала, дисконектиться, то такая таблица автоматом удаляется, обламывая прочие сессии. Конечно можно описать глобальную таблицу на автоматическое создание, только не как у ASA в метаструктуре, а через заднее место в TempDB. Но данные будут все равно у сессий общие, так что толку от такой таблички все равно никакого.

если требуется таблица, с которой будут работать несколько коннектов (msSqlServer), то смысл ваще делять "времянку"? проще сделать обычную таблицу, выделив столбец для @@spid -- с помощью него "отфильтровывать" данные для нужного соединения, при завершении работы -- очищать свои данные.
...
Рейтинг: 0 / 0
как создать временную таблицу из PB ?!
    #33397297
bumsy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rhsСлушай, а dw c таким sql вы создаете через драйвер OLEDB или может через MSS ?

У меня на синтаксис sql не ругается, но список столбцов в dw получается пустой.

Через MSS - все работает. А вот через OLE DB действительно такая же ситуация - dw пустое.
...
Рейтинг: 0 / 0
как создать временную таблицу из PB ?!
    #33397709
rhs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rhs
Гость
savosin_sergey
если требуется таблица, с которой будут работать несколько коннектов (msSqlServer), то смысл ваще делять "времянку"? проще сделать обычную таблицу, выделив столбец для @@spid -- с помощью него "отфильтровывать" данные для нужного соединения, при завершении работы -- очищать свои данные.

Дык, как раз требуется таблица, с которой будет работать только один коннект.
...
Рейтинг: 0 / 0
как создать временную таблицу из PB ?!
    #33397777
Фотография savosin_sergey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я имел ввиду возможность того, что отчёт (или где используется временная таблица?) могу запустить два и более пользователя -- или только один! если только один -- то спокойно работай хоть с двумя клетками, хоть с обычной таблицей (только придётся её очищать после выполнения отчёта)

. и вообще:
авторЧтобы dw painter мог видеть эти таблицы, пытаюсь из ISQL создавать эти самые временные таблицы командой CREATE TABLE #t1( id int).
Но временные таблицы НЕ СОЗАЮТСЯ!
может сделать отчёт на обычной таблице, а потом (когда отчёт работает) везде (в edit source, например) поставить клетку в рабочей "временной" таблице?

. Честно, сам я не использовал временные таблице в такой связке (dw +create table #a_table), но попробуйте
...
Рейтинг: 0 / 0
как создать временную таблицу из PB ?!
    #33397954
rhs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rhs
Гость
2 savosin_sergey

Спасибо, что откликнулись.

Да, временные таблицы используются для создания отчетов.

В принципе, можно использовать постоянную таблицу, но
- не очень удобно фильтровать строки по @@spid.
- совсем неудобно, если ее надо проиндексировать.
- если она большая, и ее используют многие пользователи, то видимо будут блокировки.
- главное, надо переписывать значительную часть приложения, которая работала с временными таблицами через MSS.

Вариант с подстановкой символа # к имени таблицы не пробовал, но, чую, это будет большой геморрой. Ведь временная таблица, прежде чем попасть в отчет, создается и наполняется из скрипта. т.е. при изменении скрипта надо вычистить все #, отладить, сохранить, открыть в edit source, добавить #. И опять же надо переписывать приложение!
...
Рейтинг: 0 / 0
как создать временную таблицу из PB ?!
    #33398641
Фотография savosin_sergey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а чем не нравится mss-драйвер? если не секрет ;-)
...
Рейтинг: 0 / 0
как создать временную таблицу из PB ?!
    #33398807
Moiseeff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Зачем мучиться?
В DW можно указать в качестве "data source" хранимую процедуру, в которой будет создаваться, заполняться и "возвращаться" локальная временная таблица.
...
Рейтинг: 0 / 0
как создать временную таблицу из PB ?!
    #33398811
Moiseeff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
savosin_sergeyа чем не нравится mss-драйвер? если не секрет ;-)MSS native driver использует DB-Library .dll функционал, которого не обновлялся с SQL Server 6.5
P.S. В "десятке" MSS уже нет.
...
Рейтинг: 0 / 0
как создать временную таблицу из PB ?!
    #33399069
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просто высказывание:
Чем временная таблица для одного пользователя отличается от dw или datastore в программе
...
Рейтинг: 0 / 0
как создать временную таблицу из PB ?!
    #33399133
Moiseeff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
spas2001Просто высказывание:
Чем временная таблица для одного пользователя отличается от dw или datastore в программе
Заполнение временной таблицы с помощью хранимых процедур на сервере займёт гораздо меньше времени чем заполнение dw или datastore в программе.
...
Рейтинг: 0 / 0
как создать временную таблицу из PB ?!
    #33399152
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Далеко не факт
Проверено
...
Рейтинг: 0 / 0
как создать временную таблицу из PB ?!
    #33399330
zuzu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Moiseeff spas2001Просто высказывание:
Чем временная таблица для одного пользователя отличается от dw или datastore в программе
Заполнение временной таблицы с помощью хранимых процедур на сервере займёт гораздо меньше времени чем заполнение dw или datastore в программе.это зависит от того где последующие операции будут делатся: на сервере или на клиенте (имеется в виду разные проверки).
а насчет времени - это зависит от проблемы ...
...
Рейтинг: 0 / 0
как создать временную таблицу из PB ?!
    #33399427
Фотография spas2001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Полностью согласен
Серверные ресурсы тоже не бесконечны
...
Рейтинг: 0 / 0
как создать временную таблицу из PB ?!
    #33399561
Фотография Ivan195
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Moiseeff
Заполнение временной таблицы с помощью хранимых процедур на сервере займёт гораздо меньше времени чем заполнение dw или datastore в программе.

а интересно.... если юзеров 10-20 одновременно запустят какой-нибудь отчетец считать?
по моему сервер загинаться начнет если все это сам начнет обсчитывать
...
Рейтинг: 0 / 0
как создать временную таблицу из PB ?!
    #33399584
Фотография Ivan195
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хотя.... обновлять потом ПО если изменения какие-нибудь компах так на 100.... то лучше конечно все на процедурах в базе делать
...
Рейтинг: 0 / 0
как создать временную таблицу из PB ?!
    #33400827
Moiseeff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ivan195 Moiseeff
Заполнение временной таблицы с помощью хранимых процедур на сервере займёт гораздо меньше времени чем заполнение dw или datastore в программе.

а интересно.... если юзеров 10-20 одновременно запустят какой-нибудь отчетец считать?
по моему сервер загинаться начнет если все это сам начнет обсчитывать
Сервер не загнётся. Он для того и нужен, чтобы процедурки выполнять.
...
Рейтинг: 0 / 0
как создать временную таблицу из PB ?!
    #33400861
Фотография Ivan195
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Moiseeff
Сервер не загнётся. Он для того и нужен, чтобы процедурки выполнять.
вопрос спорный.... какой сервер конечно... а вопервых какой админ его настроил :)
...
Рейтинг: 0 / 0
как создать временную таблицу из PB ?!
    #33400962
Moiseeff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ivan195 Moiseeff
Сервер не загнётся. Он для того и нужен, чтобы процедурки выполнять.
вопрос спорный.... какой сервер конечно... а вопервых какой админ его настроил :)
Чаще всего виноваты неоптимизированные sql команды.
Простое изменение текста процедуры (на больших объёмах данных, когда база в оперативку не помещается) может увеличить производительность на порядок.
...
Рейтинг: 0 / 0
как создать временную таблицу из PB ?!
    #33401096
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Moiseeff spas2001Просто высказывание:
Чем временная таблица для одного пользователя отличается от dw или datastore в программе
Заполнение временной таблицы с помощью хранимых процедур на сервере займёт гораздо меньше времени чем заполнение dw или datastore в программе.
...если данные для заполнения берутся с сервера. А если с клиента?
...
Рейтинг: 0 / 0
как создать временную таблицу из PB ?!
    #33401820
Moiseeff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Филипп Moiseeff spas2001Просто высказывание:
Чем временная таблица для одного пользователя отличается от dw или datastore в программе
Заполнение временной таблицы с помощью хранимых процедур на сервере займёт гораздо меньше времени чем заполнение dw или datastore в программе.
...если данные для заполнения берутся с сервера. А если с клиента?Оптимально обрабатывать данные там где они хранятся.
...
Рейтинг: 0 / 0
как создать временную таблицу из PB ?!
    #33401831
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Moiseeff Филипп Moiseeff spas2001Просто высказывание:
Чем временная таблица для одного пользователя отличается от dw или datastore в программе
Заполнение временной таблицы с помощью хранимых процедур на сервере займёт гораздо меньше времени чем заполнение dw или datastore в программе.
...если данные для заполнения берутся с сервера. А если с клиента?Оптимально обрабатывать данные там где они хранятся.
А ещё оптимально хорошо питаться, много спать и не болеть. И дальше что?
...
Рейтинг: 0 / 0
как создать временную таблицу из PB ?!
    #33402971
rhs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rhs
Гость
Заполнение временной таблицы представляет собой многошаговую процедуру когда в цикле на основании многих параметров с клиента формируются динамические sql по заполнению таблицы.

Засунуть такой скрипт в процедуру, наверно, можно, но только отлаживать его будет не очень просто.

Далее сам отчет берет за основу сформированную временную таблицу, цепляет к ней join-ы, делает группировки, которые затруднительно сделать в dw, и получается отчет.

Не хочется переделывать приложение из-за кривого драйвера.

Неужели эти грабли только мне достались? Никто не работает с MSSQL через OLEDB? Или не используют временные таблицы?
...
Рейтинг: 0 / 0
как создать временную таблицу из PB ?!
    #33403154
Moiseeff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мы используем OLE DB и хранимые процедуры.
...
Рейтинг: 0 / 0
как создать временную таблицу из PB ?!
    #33403621
R-V-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 rhs

> Неужели эти грабли только мне достались ?
> Никто не работает с MSSQL через OLEDB ?

Ты именно с PB 8 работаешь ? У меня на PB 10 следующее

create table #tmp(id int);
insert into #tmp (id) values (1);

нормально отработало через ADO.NET, а через OLE DB обругалось "Invalid object name '#tmp'". Правда ADO.NET в восьмерке нету, он только в десятке появился.
...
Рейтинг: 0 / 0
как создать временную таблицу из PB ?!
    #33407766
rhs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
rhs
Гость
2 R-V-K

Видимо, надо будет переходить на 10 версию и работать через ado.net.

В такой конфигурации проблема, похоже, не решается.

Спасибо всем.
...
Рейтинг: 0 / 0
40 сообщений из 40, показаны все 2 страниц
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / как создать временную таблицу из PB ?!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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