powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Неужели в ASE 12 нет пользовательских функций?
11 сообщений из 11, страница 1 из 1
Неужели в ASE 12 нет пользовательских функций?
    #32237056
Andrey Max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неужели в ASE 12 нет пользовательских функций?
...
Рейтинг: 0 / 0
Неужели в ASE 12 нет пользовательских функций?
    #32237076
Фотография DenisVK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Помоемому нет, но что мешает пользоваться хранимыми процедурами с выходными параметрами?
...
Рейтинг: 0 / 0
Неужели в ASE 12 нет пользовательских функций?
    #32237239
В версии 12.5 такая возможность появилась, но как-то через задницу.
Функции надо писать на Java
Для этого нужно приобрести лицензию на поддержку Java в в СУБД ( от 960 $ )
...
Рейтинг: 0 / 0
Неужели в ASE 12 нет пользовательских функций?
    #32484722
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>что мешает пользоваться хранимыми процедурами с выходными параметрами?
1) Нельзя исполнить что-нибудь типа
select sp_execute('update statistics ' + so.name)
from sysobjects so
where so.type= 'U'

2) Нельзя использовать для генерации IDENTITY.

И еще десяток применений.
...
Рейтинг: 0 / 0
Неужели в ASE 12 нет пользовательских функций?
    #32505335
Фотография Badger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть хорошая программа DBArtisan -www.embarcadero.com/downloads/download.html
В ней скрипт update statistics для всех таблиц делается нажатием двух клавиш. :) Там же его можно и исполнить. Правда лучше найти DBArtisan 5.4 т.к на www.lomalka.ru для нее есть регистрация, a без нее только месяц работает.
Код: plaintext
 Нельзя использовать для генерации IDENTITY. 

IDENTITY сам создает следующий уникальный номер поля, причем тут функции?
А если нужно получить его рукам то процедуре Select @id = IsNull (Max (id), 0) + 1 FROM table получает тот же результат. Какие еще десяток применений? :)
...
Рейтинг: 0 / 0
Неужели в ASE 12 нет пользовательских функций?
    #32507030
Mladov Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет.
Я, например, написал следующую ХП, которая здорово помогает при update all statistic и прочих reorg rebuild, которые надо применять ко всем объектам базы определенного типа (чаще всего 'U') для ASE 12.0:

/******************** sp_dba_table_exec *************************/
--drop proc dbo.sp_dba_table_exec

create procedure dbo.sp_dba_table_exec
@command varchar(255)=null,
@type varchar(5)=null,
@time int=null
/*
@command - команда, которую надо выполнять
@type - тип объектов, к которым применять
@time - 1-выводить текущее время (нужна ХП sp_dba_datetime)
*/
as
begin
if ltrim(rtrim(isnull(@command,'')))=''
begin
raiserror 40000 'Parameter <@command> do not specify!'
return
end

if ltrim(rtrim(isnull(@type,'')))=''
begin
raiserror 40000 'Parameter <@type> do not specify!'
return
end

select @time=isnull(@time,0)

select name
into #tabs
from sysobjects
where type=@type
order by name

declare @tab_name varchar(50)

declare com_cursor cursor for
select name from #tabs
for read only

open com_cursor

fetch com_cursor into @tab_name
while @@sqlstatus=0
begin
exec(@command+' '+@tab_name)

if @time=1
exec sp_dba_datetime

fetch com_cursor into @tab_name
end

close com_cursor
deallocate cursor com_cursor

drop table #tabs

end

go

grant exec on dbo.sp_dba_table_exec to public

go

/******************** sp_dba_datetime *************************/
create procedure dbo.sp_dba_datetime
as
begin
declare @date_time varchar(22)
select @date_time=(convert(varchar(11), getdate(), 105)+' '+convert(varchar(10), getdate(), 108))
print '********************'
print @date_time
print '********************'
end

go

grant exec on dbo.sp_dba_datetime to public

go
...
Рейтинг: 0 / 0
Неужели в ASE 12 нет пользовательских функций?
    #32507352
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насчет IDENTITY.
Представьте себе БД, которая участвует в репликации. Всего в схеме 100 сайтов. Репликация полная, во все направления, за исключением некоторых сводных таблиц и некоторых сервисных процедур, которые по смыслу больше похожи на вьюхи (в том плане, что ничего в БД не делают).

Как вы предлагаете обеспечивать уникальность IDENTITY в рамках одной таблицы, если запись может быть сгенерена на любом из сотни сайтов и может оттуда прилететь куда угодно (то есть, она появится везде)? Мсье значет что-то отличное от set identity_insert on/off и ручное заполнение IDENTITY для такого случая? А раз так, то возникает вопрос с генерацией ID. Совсем не реплицировать (=генерить) ID нельзя, так как отношение master/detail и взаимосвязь документов должны сохраняться независимо от сайта, на котором создана запись и на котором к ней добавлены дети.

Еще применение -

любая проверка бизнеслогики, возвращающая всегда TRUE/FALSE (можно ли модифицировать утвержденный документ, можно ли генерить проводки,...),

возвращение какого-нибудь курса валюты на дату (если учесть, что курс может быть задан не для самой валюты, а для ее родительской, и не на эту дату, а на произвольную максимальную меньшую требуемой, причем это зависит от настроек системы, четкий курс брать или нет).
...
Рейтинг: 0 / 0
Неужели в ASE 12 нет пользовательских функций?
    #32507356
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И кстати насчет DBArtisan.
групповой update all statistics там есть, а вот групповой смены схемы блокировки таблиц там нет. Так что наличие DBArtisan и чего-то в нем - вовсе не аргумент, что функции не нужны.
...
Рейтинг: 0 / 0
Неужели в ASE 12 нет пользовательских функций?
    #32507769
Фотография Badger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
Мсье значет что-то отличное от set identity_insert on/off и ручное 
заполнение IDENTITY для такого случая? А раз так, то возникает вопрос с 
генерацией ID. Совсем не реплицировать (=генерить) ID нельзя, так как 
отношение master/detail и взаимосвязь документов должны сохраняться 
независимо от сайта, на котором создана запись и на котором к ней 
добавлены дети.

:)
Мсье знает, что некоторые разработчики, когда начинают проект, видят не
далее поставленной задачи (1 сайт), а потом начинают на зеркало пенять :) В
этой ситуации использовать IDENTITY только проблему наживешь, и вы это
лучше меня знаете. А решение - пронумеруйте сайты умножайте по формуле
ID / 1000 * 1000 + 1000 + N сайта, примерно так:
SELECT @new_id = IsNull (Max (id), 1) / 1000 * 1000 + 1000 + 21 FROM table

Код: plaintext
1.
2.
3.
возвращение какого-нибудь курса валюты на дату (если учесть, что 
курс может быть задан не для самой валюты, а для ее родительской, и не на 
эту дату, а на произвольную максимальную меньшую требуемой, причем это 
зависит от настроек системы, четкий курс брать или нет).

Используйте в хранимых процедурах временные таблицы - пару, тройку.
CREATE TABLE #name_temp (
....... )
За несколько действий Вы можете сделать любую выборку. Было бы желание :)

Код: plaintext
а вот групповой смены схемы блокировки таблиц
Как это с помощью функций решается? :))
...
Рейтинг: 0 / 0
Неужели в ASE 12 нет пользовательских функций?
    #32508851
Mladov Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
И кстати насчет DBArtisan.
групповой update all statistics там есть, а вот групповой смены схемы блокировки таблиц там нет. Так что наличие DBArtisan и чего-то в нем - вовсе не аргумент, что функции не нужны.

См. выше пример ХП, выполняющей групповые действия с таблицами.
Ее немного переделать и можно будет и это сделать.
Добавить параметр @command2 и в тексте делать не
exec(@command+' '+@tab_name)
а
exec(@command+' '+@tab_name+' '+@command2)

После переделки
exec dbo.sp_dba_table_exec 'alter table','U',0,'lock datapages'
и всего делов-то... 8))

И для генерации ID-шников ХП можно использовать...
Хоть и не так изящно, как бы, например функцию, но тоже вполне симпатишно... 8)
...
Рейтинг: 0 / 0
Неужели в ASE 12 нет пользовательских функций?
    #32509171
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторА решение - пронумеруйте сайты умножайте по формуле
Так примерно и делается, на основании номера сайта, но это только на клиенте (слава богу, что это унифицировано, то есть, программист может и не знать, когда пишет insert или update, что значение ID сгенерится руками), ибо в такой постановке нельзя исполнить insert .. select . А переписывать сотни процедур, которые вставляют данные, при установке/снятии репликации - это не серьезно. Снятие признака identity с поля ничего принципиально не решает, все равно надо генерить руками значение, зато требует приседаний при установке/снятии репликации.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Неужели в ASE 12 нет пользовательских функций?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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