Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Проблема модификации процедуры (Sybase 12.5, Window 2000) / 8 сообщений из 8, страница 1 из 1
06.07.2010, 19:27
    #36726501
golol_ol
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема модификации процедуры (Sybase 12.5, Window 2000)
Господа, вот процедура которую я написал на Sybase:

CREATE PROCEDURE dbo.fm_1031
AS
BEGIN
CREATE TABLE #t_da (da int)
INSERT INTO #t_da (da)values(20100701)
SELECT #t_da.da FROM #t_da
END

Делаю проверку с помощью SQL Advantage:
exec fm_1031

Результат:
da
---------
20100701

Всё работает!!

Модифицирую процедуру (добавляю ещё одну строку (стоку данных в таблицу))
CREATE PROCEDURE dbo.fm_1031
AS
BEGIN
CREATE TABLE #t_da (da int)
INSERT INTO #t_da (da)values(20100701)
INSERT INTO #t_da (da)values(20100702)
SELECT #t_da.da FROM #t_da
END

Сохраняю процедуру.
Sybase Central ругается:
The 'CREATE TABLE' command is not allowed within a multi-statement transaction in the 'tempdb' database.
#t_da not found. Specify owner.objectname or use sp_help to check whether the object exists (sp_help may produce lots of output).

Создать процедуру получилось, а вот модифицировать нет.
Как быть?
Помогите!!
...
Рейтинг: 0 / 0
06.07.2010, 23:10
    #36726767
Dmitry.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема модификации процедуры (Sybase 12.5, Window 2000)
ошибка
The 'CREATE TABLE' command is not allowed within a multi-statement transaction in the 'tempdb' database.

означает что идет попытка создать таблицу (во время компиляции процедуры) внутри транзакции
а в базе tempdb у тебя это запрещено

через централ этот запрет можно отключить

детальнее здесь
http://manuals.sybase.com/onlinebooks/group-as/asg1250e/svrtsg/@Generic__BookTextView/34899
--
зы: возьми другое средство разработки (не централ), которое не работает в транзакционном режиме.
...
Рейтинг: 0 / 0
06.07.2010, 23:37
    #36726789
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема модификации процедуры (Sybase 12.5, Window 2000)
И еще один пишет процедуры на целой фирме...
Не существует базы под названием Sybase. НЕ СУЩЕСТВУЕТ!

Что значит "модифицирую процедуру" и "сохраняю процедуру"? Как именно вы это делаете? С каким инструментом работаете?

Правильный метод написания:
1) Используешь шаблон типа:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
use mydb
go
if exsist (select object_id("myprocedure"))
    drop procedure myprocedure
go
create myprocedure
as
-- some code
go
grant execture on myprocedure to somegroup 
go

2) На основе этого шаблона для каждой процедуры делаешь отдельный файл с именем совпадающим с именем процедуры и расширением .sql

3) Настраиваешь себе на это расширение вот такой батничек:
Код: plaintext
1.
2.
3.
4.
@echo off
isql -Sserver -Uuser -Ppassword -i% 1  >result.txt || ( more result.txt & pause & exit )
find "Msg " result.txt >nul && ( more result.txt & pause )
del /Q /F result.txt  2 >nul
настраиваешь в батничке название сервера, имя и пароль для юзера - владельца процедур.

4) Создание и обновление процедур будет заключаться в обновлении текстового файла в любом редактор (хоть в notepad) с последующим "запуском" .sql файла через батничек.


Если будете делать так, то проблем с multi-statement transaction не будет.
Как грязное решение, "здесь и сейчас" для неизвестного инструмента с ручным или мышастым управлением: закрывайте транзакцию (rollback или commit) после создания процедуры.
...
Рейтинг: 0 / 0
07.07.2010, 09:41
    #36727065
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема модификации процедуры (Sybase 12.5, Window 2000)
golol_ol wrote:

> Сохраняю процедуру.
> Sybase Central ругается:
> The 'CREATE TABLE' command is not allowed within a multi-statement
> transaction in the 'tempdb' database.
> #t_da not found. Specify owner.objectname or use sp_help to check
> whether the object exists (sp_help may produce lots of output).
>
> Создать процедуру получилось, а вот модифицировать нет.

Эта процедура тут ни при чём. И вообще процедуры тут ни при чём.
У тебя где-то транзакция незавершённая осталась.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
07.07.2010, 09:45
    #36727077
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема модификации процедуры (Sybase 12.5, Window 2000)
Dmitry. wrote:

> The 'CREATE TABLE' command is not allowed within a multi-statement
> transaction in the 'tempdb' database.
>
> означает что идет попытка создать таблицу (во время компиляции
> процедуры) внутри транзакции

Во время компиляции процедуры никакие таблицы не создаются.
Он эту процедуру ВЫПОЛНЯЕТ. В начатой, но незавершённой транзакции.
Но сам не знает, что транзакцию он стартовал.

Автору: переконнекться к серверу, и сделай всё заново (исполни
процедуру) -- получится.

Или напиши в соединении

while @@trancount > 0
rollback
go

и потом выполни.
Но где у тебя транзакция не закрывается тебе всё равно ПРИДЁТСЯ искать.


> а в базе tempdb у тебя это запрещено
> через централ этот запрет можно отключить
> детальнее здесь
> http://manuals.sybase.com/onlinebooks/group-as/asg1250e/svrtsg/@Generic__BookTextView/34899

НЕ НАДО это отключать. Будет очень-очень плохо потом.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
07.07.2010, 15:36
    #36728237
golol_ol
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема модификации процедуры (Sybase 12.5, Window 2000)
Господа, большое спасибо всем кто ответил на мой вопрос.
Воспользовался советом господина White owl.
Хорошо, что мир не без добрых людей.
...
Рейтинг: 0 / 0
07.07.2010, 15:46
    #36728278
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема модификации процедуры (Sybase 12.5, Window 2000)
White Owl wrote:

> Если будете делать так, то проблем с multi-statement transaction не будет.
> Как грязное решение, "здесь и сейчас" для неизвестного инструмента с
> ручным или мышастым управлением: закрывайте транзакцию (rollback или
> commit) после создания процедуры.

а причём тут транзакции вообще ?
А create procedure вообще DDL, он транзакций не должен по идее открывать.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
07.07.2010, 17:48
    #36728684
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема модификации процедуры (Sybase 12.5, Window 2000)
MasterZivа причём тут транзакции вообще ?
А create procedure вообще DDL, он транзакций не должен по идее открывать.
Тут не "транзакция", а "multi-statement transaction". Разницу видишь?
Если говорить на более-менее универсальном языке, то DDL должна быть в отдельном командном пакете. То что пакеты почему-то называются "multi-statement transaction" оставим на совести тех кто писал сообщения об ошибках.

А ручное закрытие транзакции обычно тянет за собой и закрытие пакета. Не обязательно конечно, но обычно... Это достаточно уверено срабатывает почти во всех ГУИ-консолях при односессионной работе.
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Проблема модификации процедуры (Sybase 12.5, Window 2000) / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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