powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / TableAdapter - вызов процедуры перед запросом
9 сообщений из 9, страница 1 из 1
TableAdapter - вызов процедуры перед запросом
    #34393429
Silbermann
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет. Есть строго типизированный DataSet и TableAdapter. В этом TableAdapter определен запрос. Мне нужно, чтобы при вызове этого запроса, значала бы вызывалась хранимая процедура. Причем и запрос и процедура должны быть вызваны в рамках одной сессии. Может кто сталкивался, подскажите как быть ? Спасибо.

P.S. БД - Oracle.
...
Рейтинг: 0 / 0
TableAdapter - вызов процедуры перед запросом
    #34393591
Алымов Анатолий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почему бы этой процедуре после выполнения не вернуть курсор?
...
Рейтинг: 0 / 0
TableAdapter - вызов процедуры перед запросом
    #34393647
Silbermann
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне нужно DataTable заполнить, курсором это получится сделать ?
...
Рейтинг: 0 / 0
TableAdapter - вызов процедуры перед запросом
    #34395068
Фотография Roman S. Golubin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SilbermannМне нужно DataTable заполнить, курсором это получится сделать ?
А чем, на Ваш взгляд, отличаются запрос и процедура в плане возвращения записей пользователю?


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
TableAdapter - вызов процедуры перед запросом
    #34395646
Silbermann
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос, уже, наверно, из другой оперы, но все же, не получается вернуть функцией курсор, делаю по документации, код тоже оттуда:

CREATE PACKAGE emp_actions AS
TYPE EmpRecTyp IS RECORD (emp_id INT, salary REAL);
CURSOR desc_salary RETURN EmpRecTyp;
FUNCTION nth_highest_salary (n INT) RETURN EmpRecTyp;
END emp_actions;


CREATE PACKAGE BODY emp_actions AS
CURSOR desc_salary RETURN EmpRecTyp IS
SELECT empno, sal FROM emp ORDER BY sal DESC;
FUNCTION nth_highest_salary (n INT) RETURN EmpRecTyp IS
emp_rec EmpRecTyp;
BEGIN
OPEN desc_salary;
FOR i IN 1..n LOOP
FETCH desc_salary INTO emp_rec;
END LOOP;
CLOSE desc_salary;
RETURN emp_rec;
END nth_highest_salary;
END emp_actions;

И как теперь обратиться к этой функции в запросе, чтобы вернуть таблицу данных ?
...
Рейтинг: 0 / 0
TableAdapter - вызов процедуры перед запросом
    #34399097
Silbermann
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если обращаться к ней вот так:

select emp_actions.nth_highest_salary(5) from dual

То пишет ORA-00902: invalid datatype
...
Рейтинг: 0 / 0
TableAdapter - вызов процедуры перед запросом
    #34399534
Алымов Анатолий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нужно возвращать не record, а ref cursor
...
Рейтинг: 0 / 0
TableAdapter - вызов процедуры перед запросом
    #34414984
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SilbermannЕсли обращаться к ней вот так:

select emp_actions.nth_highest_salary(5) from dual

То пишет ORA-00902: invalid datatype

так нельзя
если хочешь как таблицу использовать результат ХП, то это делается подругому, нужно объектные типы создавать и конвеекрные/табличные функции. потом в запросе использовать
table, cast


а что твоя функция должна возвращать? сейчас она возвращает одну строку, зачем цыкл (bulk collect есть, если ты хочешь верныть бульше одной строки, тебе нужно массив записей создавать, даже не записей а объектов)?

Возвращай реф курсор
...
Рейтинг: 0 / 0
TableAdapter - вызов процедуры перед запросом
    #34415032
Фотография barrabas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
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.
   'Возвращает NSNID и строку
    Public Shared Function GET_NSN_NSJ_ID_CURSOR_TMP(ByVal pNSN_NSJ_SGID As Long, _
                                                     ByRef strresult As String, _
                                                     ByVal pOracon As OracleConnection) As Long
        Dim res As Long = 1
        strresult = ""
        Dim cmd As OracleCommand = New OracleCommand("PKG_NSNNSJDIC_DMSERVICE.GET_NSN_NSJ_ID_CURSOR_TMP", _
                                                     pOracon)
        cmd.CommandType = Data.CommandType.StoredProcedure
        cmd.Parameters.Add("P_SGRPID", OracleType.Number).Direction = ParameterDirection.Input
        cmd.Parameters("P_SGRPID").Value = pNSN_NSJ_SGID
        cmd.Parameters.Add("RESULT", OracleType.Cursor).Direction = ParameterDirection.ReturnValue
        Try
            'выполняем команду
            Dim rdr As OracleDataReader = cmd.ExecuteReader
            If rdr.Read() Then
                res = CLng(rdr.Item("PK"))
                strresult = rdr.Item("NSN_NSJ").ToString()
            End If

            rdr.Close()
            'закрываем соединение

        Catch ex As Exception
            'если соединение открыто, то закрыть
            MsgBox(ex.Message.ToString)
            res = 1
            strresult = ""
        End Try
        Return res
    End Function

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
пакет 

   TYPE U_CURSOR IS REF CURSOR;
....
   FUNCTION GET_NSN_NSJ_ID_CURSOR_TMP (P_SGRPID NUMBER)
      RETURN U_CURSOR
   IS
      P_CURSOR    U_CURSOR;


....
     OPEN P_CURSOR FOR
         SELECT ID PK, V_NSN_NSJ NSN_NSJ
           FROM DUAL;
      RETURN P_CURSOR;
...

что то типа этого
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / TableAdapter - вызов процедуры перед запросом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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