Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 как изобразить конструкцию в SQL. В текущей сесси отправить значение в переменную и ...  [new]
yemets63
Member

Откуда: Самара
Сообщений: 1229
как изобразить конструкцию в MS SQL, как в Oracle

отправить переменную

begin
    my_procedure(myid);
end;


и потом в текущей сессии, пока она открыта получать ответ

select myid from my_function


в оракл всё лежит в BODY
19 ноя 19, 13:47    [22019595]     Ответить | Цитировать Сообщить модератору
 Re: как изобразить конструкцию в SQL. В текущей сесси отправить значение в переменную и ...  [new]
Yasha123
Member

Откуда:
Сообщений: 1688
output parameters
?
19 ноя 19, 13:58    [22019609]     Ответить | Цитировать Сообщить модератору
 Re: как изобразить конструкцию в SQL. В текущей сесси отправить значение в переменную и ...  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 29756
yemets63
как изобразить конструкцию в MS SQL, как в Oracle

отправить переменную
begin
    my_procedure(myid);
end;

и потом в текущей сессии, пока она открыта получать ответ
select myid from my_function

в оракл всё лежит в BODY
По описанию непонятно, что нужно, по крайней мере тем, кто не работал с Ораклом.
19 ноя 19, 14:15    [22019620]     Ответить | Цитировать Сообщить модератору
 Re: как изобразить конструкцию в SQL. В текущей сесси отправить значение в переменную и ...  [new]
iap
Member

Откуда: Москва
Сообщений: 46906
CONTEXT_INFO ??
19 ноя 19, 14:29    [22019647]     Ответить | Цитировать Сообщить модератору
 Re: как изобразить конструкцию в SQL. В текущей сесси отправить значение в переменную и ...  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6719
yemets63,

звучит как контекст, но при эотм и как DECLARE @variable
19 ноя 19, 14:33    [22019651]     Ответить | Цитировать Сообщить модератору
 Re: как изобразить конструкцию в SQL. В текущей сесси отправить значение в переменную и ...  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7004
yemets63,

Вы с какой целью интересуетесь? Для отладки существуют PRINT @var или RAISERROR(@var,10,1);
19 ноя 19, 18:39    [22019993]     Ответить | Цитировать Сообщить модератору
 Re: как изобразить конструкцию в SQL. В текущей сесси отправить значение в переменную и ...  [new]
yemets63
Member

Откуда: Самара
Сообщений: 1229
прошу прощения, я вернулся в топик,
и так в оракле есть пакетные переменные, достаточно удобные для работы с грудой переменных, которые просто ускоряют всё и всея.

в 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
вчера, 00:35    [22032641]     Ответить | Цитировать Сообщить модератору
 Re: как изобразить конструкцию в SQL. В текущей сесси отправить значение в переменную и ...  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1082
пакетные переменные ТС'у нужны.
когда в коде он может задать связанный список переменных и их значений, что бы потом в достаточно простой форме обращаться к значениям

в сиквеле ближайшим аналогом является 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;


Сообщение было отредактировано: вчера, 02:09
вчера, 02:05    [22032663]     Ответить | Цитировать Сообщить модератору
 Re: как изобразить конструкцию в SQL. В текущей сесси отправить значение в переменную и ...  [new]
Gerros
Member

Откуда: Харьков
Сообщений: 481
yemets63,
в вызывающем коде создать временную таблицу, и заполнить её, например, одной строкой, в которой для каждой переменной есть своя колонка.
в запросах брать данные из этой таблицы.
вчера, 05:26    [22032686]     Ответить | Цитировать Сообщить модератору
 Re: как изобразить конструкцию в SQL. В текущей сесси отправить значение в переменную и ...  [new]
yemets63
Member

Откуда: Самара
Сообщений: 1229
felix_ff,

ко мне пришла база, большая достаточно, и ее тормоза заключаются в части запросов и триггеров, которые выполняются не по конкреттной группе условий, а по всей таблице, в итоге, если в оракл у меня подобное летает за миллион записей, то здесь тысяча еле еле ползает. а с базой мне этой работать предстоит долго, и что бы нервы не тратить, нужно в порядок привести всё.

параллельно такая же проблема с MySQL, но это уже другой форум
вчера, 11:22    [22032906]     Ответить | Цитировать Сообщить модератору
 Re: как изобразить конструкцию в SQL. В текущей сесси отправить значение в переменную и ...  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7004
yemets63,

системы pl-sql и t-sql имеют парадигмы обработки данных, ни в чём не схожие. Методами PL-SQL здесь вы производительности не получите. Т.е. PL потребляет г-но код вполне успешно, т.к. он в первую очередь PL, во вторую SQL (или даже в третью). Здесь требуется использовать реляционное мышление (понимание работы с множествами данных), а не процедурное (пошаговая обработка).
вчера, 14:43    [22033210]     Ответить | Цитировать Сообщить модератору
 Re: как изобразить конструкцию в SQL. В текущей сесси отправить значение в переменную и ...  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 29756
Владислав Колосов
yemets63,

системы pl-sql и t-sql имеют парадигмы обработки данных, ни в чём не схожие. Методами PL-SQL здесь вы производительности не получите. Т.е. PL потребляет г-но код вполне успешно, т.к. он в первую очередь PL, во вторую SQL (или даже в третью). Здесь требуется использовать реляционное мышление (понимание работы с множествами данных), а не процедурное (пошаговая обработка).
Угу,
Re: как изобразить конструкцию в SQL. В текущей сесси отправить значение в переменную и ... [new]
yemets63-у нужно либо изучить сиквел, либо взять готового специалиста. Программированием на сиквеле с подходами оракла ничего хорошего не получить.
вчера, 14:54    [22033228]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить