Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / как создать временную таблицу из PB ?! / 25 сообщений из 40, страница 1 из 2
17.11.2005, 16:25
    #33384679
rhs
rhs
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как создать временную таблицу из PB ?!
Коллеги, помогите !

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

Это глобальные таблицы, не то - они видны всем сессиям.
...
Рейтинг: 0 / 0
17.11.2005, 17:58
    #33385056
rhs
rhs
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как создать временную таблицу из PB ?!
две решётки проходит, но при этом создается ГЛОБАЛЬНАЯ временная таблица, которая видна другим пользователям.
Вся радость локальных временных таблиц в том что там формируется выборка только для текущей сессии.
...
Рейтинг: 0 / 0
17.11.2005, 18:05
    #33385082
bumsy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как создать временную таблицу из PB ?!
Можно сделать так прямо в 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
17.11.2005, 18:34
    #33385145
rhs
rhs
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как создать временную таблицу из PB ?!
2 bumsy

Это круто!!!

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

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

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

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

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

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

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

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

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

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

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

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

У меня на синтаксис sql не ругается, но список столбцов в dw получается пустой.
...
Рейтинг: 0 / 0
22.11.2005, 13:12
    #33392256
rhs
rhs
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как создать временную таблицу из PB ?!
Нашел описание проблемы на сайте 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
23.11.2005, 17:47
    #33395497
savosin_sergey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как создать временную таблицу из PB ?!
ASCRUSКонечно по другому, где MSSQL, а где ASA

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

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

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

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

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

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

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

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

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

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

Вариант с подстановкой символа # к имени таблицы не пробовал, но, чую, это будет большой геморрой. Ведь временная таблица, прежде чем попасть в отчет, создается и наполняется из скрипта. т.е. при изменении скрипта надо вычистить все #, отладить, сохранить, открыть в edit source, добавить #. И опять же надо переписывать приложение!
...
Рейтинг: 0 / 0
24.11.2005, 20:45
    #33398641
savosin_sergey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как создать временную таблицу из PB ?!
а чем не нравится mss-драйвер? если не секрет ;-)
...
Рейтинг: 0 / 0
25.11.2005, 00:58
    #33398807
Moiseeff
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как создать временную таблицу из PB ?!
Зачем мучиться?
В DW можно указать в качестве "data source" хранимую процедуру, в которой будет создаваться, заполняться и "возвращаться" локальная временная таблица.
...
Рейтинг: 0 / 0
25.11.2005, 01:08
    #33398811
Moiseeff
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как создать временную таблицу из PB ?!
savosin_sergeyа чем не нравится mss-драйвер? если не секрет ;-)MSS native driver использует DB-Library .dll функционал, которого не обновлялся с SQL Server 6.5
P.S. В "десятке" MSS уже нет.
...
Рейтинг: 0 / 0
25.11.2005, 09:29
    #33399069
spas2001
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как создать временную таблицу из PB ?!
Просто высказывание:
Чем временная таблица для одного пользователя отличается от dw или datastore в программе
...
Рейтинг: 0 / 0
25.11.2005, 09:57
    #33399133
Moiseeff
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как создать временную таблицу из PB ?!
spas2001Просто высказывание:
Чем временная таблица для одного пользователя отличается от dw или datastore в программе
Заполнение временной таблицы с помощью хранимых процедур на сервере займёт гораздо меньше времени чем заполнение dw или datastore в программе.
...
Рейтинг: 0 / 0
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / как создать временную таблицу из PB ?! / 25 сообщений из 40, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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