powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Проблема модификации процедуры (Sybase 12.5, Window 2000)
8 сообщений из 8, страница 1 из 1
Проблема модификации процедуры (Sybase 12.5, Window 2000)
    #36726501
golol_ol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Господа, вот процедура которую я написал на 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
Проблема модификации процедуры (Sybase 12.5, Window 2000)
    #36726767
Фотография Dmitry.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ошибка
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
Проблема модификации процедуры (Sybase 12.5, Window 2000)
    #36726789
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще один пишет процедуры на целой фирме...
Не существует базы под названием 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
Проблема модификации процедуры (Sybase 12.5, Window 2000)
    #36727065
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Проблема модификации процедуры (Sybase 12.5, Window 2000)
    #36727077
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Проблема модификации процедуры (Sybase 12.5, Window 2000)
    #36728237
golol_ol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Господа, большое спасибо всем кто ответил на мой вопрос.
Воспользовался советом господина White owl.
Хорошо, что мир не без добрых людей.
...
Рейтинг: 0 / 0
Проблема модификации процедуры (Sybase 12.5, Window 2000)
    #36728278
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl wrote:

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

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

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


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