Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
yemets63 Member Откуда: Самара Сообщений: 1394 |
как изобразить конструкцию в MS SQL, как в Oracle отправить переменную begin my_procedure(myid); end; и потом в текущей сессии, пока она открыта получать ответ select myid from my_function в оракл всё лежит в BODY |
19 ноя 19, 13:47 [22019595] Ответить | Цитировать Сообщить модератору |
Yasha123 Member Откуда: Сообщений: 1955 |
output parameters ? |
19 ноя 19, 13:58 [22019609] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31783 |
|
||||
19 ноя 19, 14:15 [22019620] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47052 |
CONTEXT_INFO ?? |
19 ноя 19, 14:29 [22019647] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
yemets63, звучит как контекст, но при эотм и как DECLARE @variable |
19 ноя 19, 14:33 [22019651] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8350 |
yemets63, Вы с какой целью интересуетесь? Для отладки существуют PRINT @var или RAISERROR(@var,10,1); |
19 ноя 19, 18:39 [22019993] Ответить | Цитировать Сообщить модератору |
yemets63 Member Откуда: Самара Сообщений: 1394 |
прошу прощения, я вернулся в топик, и так в оракле есть пакетные переменные, достаточно удобные для работы с грудой переменных, которые просто ускоряют всё и всея. в Oracle есть описание и есть тело, а как это всё выглядит в MS SQL, прилагаю пример текста из Oracle, просто присвоение значений пакетным переменным и получение, понятно делает и больше, просто для примера. create or replace package BatchVarOra is /*****************************************************************/ PrjID number; -- ProjectID UserID number; -- UserID PCIP varchar2(80); -- PCNameIPAdresse /*****************************************************************/ function Get_UserID return number; function Get_PCIP return Varchar2; ---------------------------------------------- ---------------------------------------------- ---------------------------------------------- procedure Set_UserID(MD number); procedure Set_PCIP(MD Varchar2); ---------------------------------------------- /*****************************************************************/ --WNDS = Write Not Data Set --RNDS = Read Not Data Set --WNPS = Write Not Package State --RNPS = Read Not Package State pragma restrict_references (Get_UzerID,WNDS, WNPS); pragma restrict_references (Get_PCIP,WNDS, WNPS); ---------------------------------------------- ---------------------------------------------- pragma restrict_references (Set_UserID ,WNDS, RNDS, RNPS); pragma restrict_references (Set_PCIP ,WNDS, RNDS, RNPS); ---------------------------------------------- ---------------------------------------------- /*****************************************************************/ end BatchVarOra; create or replace package body BatchVarOra is /-----------------------------------------------------------------/ function Get_UserID return number is begin return(UserID); end; /*****************************************************************/ function Get_PCIP return Varchar2 is begin return(PCIP_id); end; /-----------------------------------------------------------------/ procedure Set_UserID(MD number) is begin User_ID := MD; end; /*****************************************************************/ procedure Set_PCIP(MD Varchar2) is begin PCIP := MD; end; /*****************************************************************/ end BatchVarOra; ну а в запросах, присвоение begin BatchVarOra.set_userid(1515151); end; и использование select * from where куча_условий and user_id=BatchVarOra=get_userid |
5 дек 19, 00:35 [22032641] Ответить | Цитировать Сообщить модератору |
felix_ff Member Откуда: Moscow Сообщений: 1698 |
пакетные переменные ТС'у нужны. когда в коде он может задать связанный список переменных и их значений, что бы потом в достаточно простой форме обращаться к значениям в сиквеле ближайшим аналогом является SESSION_CONTEXT, НО: 1) он только с 2016, 2) присвоение значений осуществяется через хранимую процедуру что не очень лаконично выглядит в плане кода, 3) чтение из конкеста возвращает sql_variant, поэтому необходимо явное приведение к типу 4) ограничен по размеру в 1 мегабайт на сессию (ранее аналог был context_info у него размер хранения был еще меньше 128 байт) присвоение: EXEC sp_set_session_context 'my_var_1', 'this is test string'; EXEC sp_set_session_context 'my_var_2', 1000; чтение: SELECT * FROM tab WHERE [id] = CAST(SESSION_CONTEXT(N'my_var_2') AS INT) AND [name] = CAST(SESSION_CONTEXT('my_var_1') AS VARCHAR(20)); из возможных альтернатив можно поиграться с табличными типами с парой процедур (запись/чтение) из хардкорного варианта: нарисовать CLR UDT с мутаторными методами. yemets63, а чем вас обычные переменные не устраивают? или не хочется каждый раз объявление писать? :) declare @i int, @j int; set @i = 10; set @j = 20 select * from tab where [id] = @i and [id2] = @j; Сообщение было отредактировано: 5 дек 19, 02:09 |
5 дек 19, 02:05 [22032663] Ответить | Цитировать Сообщить модератору |
Gerros Member Откуда: Харьков Сообщений: 508 |
yemets63, в вызывающем коде создать временную таблицу, и заполнить её, например, одной строкой, в которой для каждой переменной есть своя колонка. в запросах брать данные из этой таблицы. |
5 дек 19, 05:26 [22032686] Ответить | Цитировать Сообщить модератору |
yemets63 Member Откуда: Самара Сообщений: 1394 |
felix_ff, ко мне пришла база, большая достаточно, и ее тормоза заключаются в части запросов и триггеров, которые выполняются не по конкреттной группе условий, а по всей таблице, в итоге, если в оракл у меня подобное летает за миллион записей, то здесь тысяча еле еле ползает. а с базой мне этой работать предстоит долго, и что бы нервы не тратить, нужно в порядок привести всё. параллельно такая же проблема с MySQL, но это уже другой форум |
5 дек 19, 11:22 [22032906] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8350 |
yemets63, системы pl-sql и t-sql имеют парадигмы обработки данных, ни в чём не схожие. Методами PL-SQL здесь вы производительности не получите. Т.е. PL потребляет г-но код вполне успешно, т.к. он в первую очередь PL, во вторую SQL (или даже в третью). Здесь требуется использовать реляционное мышление (понимание работы с множествами данных), а не процедурное (пошаговая обработка). |
5 дек 19, 14:43 [22033210] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31783 |
Re: как изобразить конструкцию в SQL. В текущей сесси отправить значение в переменную и ... [new] yemets63-у нужно либо изучить сиквел, либо взять готового специалиста. Программированием на сиквеле с подходами оракла ничего хорошего не получить. |
||||
5 дек 19, 14:54 [22033228] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |