Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Procedure (Cursor) / 20 сообщений из 20, страница 1 из 1
20.12.2021, 12:41
    #40121617
AleksRous
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Procedure (Cursor)
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
CREATE OR REPLACE PROCEDURE  TEST_RPOC (p_numb NUMBER , p_out OUT SYS_REFCURSOR )

AS 

v_count NUMBER;

BEGIN

SELECT 1 INTO v_count FROM DUAL;

IF v_count = 1

THEN

OPEN p_out FOR

WITH temp AS (SELECT 200 AS AMOUNT FROM DUAL
              UNION
              SELECT 300 FROM DUAL
              UNION
              SELECT 200 FROM DUAL
              UNION
              SELECT 200 FROM DUAL
              )
              
              
SELECT * FROM temp WHERE AMOUNT = p_numb;

END IF;


END;
            



Помогите новичку, перевести PL/SQL на T-SQL

Заранее благодарен
...
Рейтинг: 0 / 0
20.12.2021, 12:55
    #40121621
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Procedure (Cursor)
Да там просто, почти один к одному.
Вы сами пробовали?
...
Рейтинг: 0 / 0
20.12.2021, 13:02
    #40121625
AleksRous
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Procedure (Cursor)
Ролг Хупин
Да там просто, почти один к одному.
Вы сами пробовали?




Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
CREATE PROCEDURE  TEST_RPOC (@p_numb INT )

AS 

DECLARE @p_out CURSOR
DECLARE @v_count INT

BEGIN

SET @v_count = (SELECT  1)

IF @v_count = 1

OPEN @p_out 

WITH temp AS (SELECT 200 AS AMOUNT
              UNION
              SELECT 300
              UNION
              SELECT 200
              UNION
              SELECT 200
              )
              
SELECT * FROM temp WHERE AMOUNT = @p_numb  ;
 

END;
           




Что не так ?
...
Рейтинг: 0 / 0
20.12.2021, 13:25
    #40121637
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Procedure (Cursor)
AleksRous,

Вы ожидаете, что кто-то процитирует справку по DEСLARE CURSOR или у Вас другие затруднения?
...
Рейтинг: 0 / 0
20.12.2021, 13:25
    #40121638
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Procedure (Cursor)
AleksRous
Ролг Хупин
Да там просто, почти один к одному.
Вы сами пробовали?




Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
CREATE PROCEDURE  TEST_RPOC (@p_numb INT )

AS 

DECLARE @p_out CURSOR
DECLARE @v_count INT

BEGIN

SET @v_count = (SELECT  1)

IF @v_count = 1

OPEN @p_out 

WITH temp AS (SELECT 200 AS AMOUNT
              UNION
              SELECT 300
              UNION
              SELECT 200
              UNION
              SELECT 200
              )
              
SELECT * FROM temp WHERE AMOUNT = @p_numb  ;
 

END;
           




Что не так ?



т.е. вы совсем далеки от SQL Server и от T-SQL в частности?
зачем вам вот это вот всё?
...
Рейтинг: 0 / 0
20.12.2021, 13:33
    #40121639
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Procedure (Cursor)
это не тот курсор , в MSSQL нет такого понятия , как SYS_REFCURSOR из PL/SQL

вам надо просто вернуть ваш select из ХП ,там никакой курсор не требуется
...
Рейтинг: 0 / 0
20.12.2021, 13:48
    #40121646
AleksRous
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Procedure (Cursor)
Тогда как в бакэнд вернуть выборку(select) с параметрами(@) через процедуру или фукнцию ?
...
Рейтинг: 0 / 0
20.12.2021, 13:50
    #40121647
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Procedure (Cursor)
что конкретно вы хотите вернуть из ХП? пример есть? у вас не получается передать параметры в ХП?
...
Рейтинг: 0 / 0
20.12.2021, 13:51
    #40121649
AleksRous
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Procedure (Cursor)
На простом примере если можно будет объясните чайнику, пжт
...
Рейтинг: 0 / 0
20.12.2021, 13:54
    #40121653
AleksRous
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Procedure (Cursor)
Konst_One
что конкретно вы хотите вернуть из ХП? пример есть? у вас не получается передать параметры в ХП?



Конкретно, выборку прописанную в ХП как я описал выше в примере
...
Рейтинг: 0 / 0
20.12.2021, 13:56
    #40121656
Gerasimenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Procedure (Cursor)
AleksRous
Тогда как в бакэнд вернуть выборку(select) с параметрами(@) через процедуру или фукнцию ?

Похоже Вам нужна табличная функция. В справке все есть.
...
Рейтинг: 0 / 0
20.12.2021, 13:58
    #40121657
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Procedure (Cursor)
создаём процедуру с параметром, которая делает выборку из таблички Table1 с фильтрацией по полю ID по переданному значению через параметр @id:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
CREATE PROCEDURE dbo.TestProc
	@id int
AS
Begin
SET NOCOUNT ON;

SELECT Field1, Field2 FROM Table1 WHERE ID = @id;

End
GO

exec dbo.TestProc 1;
...
Рейтинг: 0 / 0
20.12.2021, 13:58
    #40121658
AleksRous
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Procedure (Cursor)
Допустим, бакэнд разработчик не хочет прописывать выборку в своем коде (JAVA, C# ... etc), а хочет получить выборку в ХП со вложенными параметрами PROCEDURE (PARAM_1 NUMBER , PARAM_2 NVARCHAR , P_CUR SYS_REFCURSOR )...
...
Рейтинг: 0 / 0
20.12.2021, 14:04
    #40121665
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Procedure (Cursor)
только не вижу смысла в этой ХП, зачем там вообще UNION?
Может расскажите, что реально вы хотите получить на вашем бэкенде?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
CREATE PROCEDURE dbo.TestProc
	@id int
AS
Begin
SET NOCOUNT ON;
           
SELECT AMOUNT FROM 
             (SELECT 200 AS AMOUNT
              UNION
              SELECT 300
              UNION
              SELECT 200
              UNION
              SELECT 200
              ) as temp WHERE AMOUNT = @id;

End
GO

exec dbo.TestProc 200;
...
Рейтинг: 0 / 0
20.12.2021, 14:09
    #40121667
AleksRous
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Procedure (Cursor)
Konst_One
только не вижу смысла в этой ХП, зачем там вообще UNION?
Может расскажите, что реально вы хотите получить на вашем бэкенде?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
CREATE PROCEDURE dbo.TestProc
	@id int
AS
Begin
SET NOCOUNT ON;
           
SELECT AMOUNT FROM 
             (SELECT 200 AS AMOUNT
              UNION
              SELECT 300
              UNION
              SELECT 200
              UNION
              SELECT 200
              ) as temp WHERE AMOUNT = @id;

End
GO

exec dbo.TestProc 200;




Union просто пример , там простая выборка select которою со всеми столбцами нужно передать в одном параметре бэкенду.

В pl/sql это можно сделать как я описал выше, назначаем параметр как допустим (P_CUR SYS_REFCURSOR)

Далее все по тексту

OPEN P_CUR FOR

SELECT ...

CLOSE P_CUR
...
Рейтинг: 0 / 0
20.12.2021, 14:09
    #40121668
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Procedure (Cursor)
вы что-то явно не договариваете.
если вам нужно возвращать всегда разные параметры и в разном количестве, то вам скорее всего нужно передавать их в виде одного параметра xml/json и в ХП уже из них строить некий запрос


если простой вариант нужен, то так
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
CREATE OR REPLACE PROCEDURE dbo.TestProc
    @param1 int,
    @param2 int
AS
Begin
SET NOCOUNT ON;
           
SELECT @param1 AS [param1], @param2 as [param2]

End
GO

exec dbo.TestProc 200, 500;
...
Рейтинг: 0 / 0
20.12.2021, 14:11
    #40121670
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Procedure (Cursor)
если вам нужен возвращаемый параметр в виде таблицы, то смотрите табличные типы, но я думаю, что это не очень хороший вариант. проще вам переписать ваш бэкенд
...
Рейтинг: 0 / 0
20.12.2021, 14:26
    #40121678
AleksRous
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Procedure (Cursor)
Я понял вас спс
...
Рейтинг: 0 / 0
20.12.2021, 14:28
    #40121680
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Procedure (Cursor)
ещё посмотрите тут:
В. Создание функции с табличным значением из нескольких инструкций
https://docs.microsoft.com/ru-ru/sql/t-sql/statements/create-function-transact-sql?view=sql-server-ver15

может вам такой вариант подойдёт
...
Рейтинг: 0 / 0
20.12.2021, 14:47
    #40121689
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Procedure (Cursor)
AleksRous
Я понял вас спс


да не за што
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Procedure (Cursor) / 20 сообщений из 20, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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