powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Procedure (Cursor)
20 сообщений из 20, страница 1 из 1
Procedure (Cursor)
    #40121617
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.
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
Procedure (Cursor)
    #40121621
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да там просто, почти один к одному.
Вы сами пробовали?
...
Рейтинг: 0 / 0
Procedure (Cursor)
    #40121625
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;
           




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

Вы ожидаете, что кто-то процитирует справку по DEСLARE CURSOR или у Вас другие затруднения?
...
Рейтинг: 0 / 0
Procedure (Cursor)
    #40121638
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Procedure (Cursor)
    #40121639
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это не тот курсор , в MSSQL нет такого понятия , как SYS_REFCURSOR из PL/SQL

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



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

Похоже Вам нужна табличная функция. В справке все есть.
...
Рейтинг: 0 / 0
Procedure (Cursor)
    #40121657
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
создаём процедуру с параметром, которая делает выборку из таблички 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
Procedure (Cursor)
    #40121658
AleksRous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Допустим, бакэнд разработчик не хочет прописывать выборку в своем коде (JAVA, C# ... etc), а хочет получить выборку в ХП со вложенными параметрами PROCEDURE (PARAM_1 NUMBER , PARAM_2 NVARCHAR , P_CUR SYS_REFCURSOR )...
...
Рейтинг: 0 / 0
Procedure (Cursor)
    #40121665
Фотография 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;
...
Рейтинг: 0 / 0
Procedure (Cursor)
    #40121667
AleksRous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Procedure (Cursor)
    #40121668
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вы что-то явно не договариваете.
если вам нужно возвращать всегда разные параметры и в разном количестве, то вам скорее всего нужно передавать их в виде одного параметра 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
Procedure (Cursor)
    #40121670
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если вам нужен возвращаемый параметр в виде таблицы, то смотрите табличные типы, но я думаю, что это не очень хороший вариант. проще вам переписать ваш бэкенд
...
Рейтинг: 0 / 0
Procedure (Cursor)
    #40121678
AleksRous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я понял вас спс
...
Рейтинг: 0 / 0
Procedure (Cursor)
    #40121680
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ещё посмотрите тут:
В. Создание функции с табличным значением из нескольких инструкций
https://docs.microsoft.com/ru-ru/sql/t-sql/statements/create-function-transact-sql?view=sql-server-ver15

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


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


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