Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Открытие курсора с переменным кол-вом параметров [D7]


Сатир ©   (2006-11-01 13:04:00) 

Как можно реализовать сабж?
На данный момент параметры передаются в виде XML, парсятся и курсор открывается таким макаром:
If (Not p_Sql%Isopen) Then
  Begin
     If (v_Par_Count = 0) Then
        Open p_Sql For v_Sql;
     ElsIf (v_Par_Count = 1) Then
        Open p_Sql For v_Sql
           Using v_Par_List(1).Par_Value;
     ElsIf (v_Par_Count = 2) Then
        Open p_Sql For v_Sql
           Using v_Par_List(1).Par_Value, v_Par_List(2).Par_Value;
     ElsIf (v_Par_Count = 3) Then
        Open p_Sql For v_Sql
           Using v_Par_List(1).Par_Value, v_Par_List(2).Par_Value, v_Par_List(3).Par_Value;
     ElsIf (v_Par_Count = 4) Then
        Open p_Sql For v_Sql
           Using v_Par_List(1).Par_Value, v_Par_List(2).Par_Value, v_Par_List(3).Par_Value, v_Par_List(4).Par_Value;
     ElsIf (v_Par_Count = 5) Then
        Open p_Sql For v_Sql
           Using v_Par_List(1).Par_Value, v_Par_List(2).Par_Value, v_Par_List(3).Par_Value, v_Par_List(4).Par_Value,
                 v_Par_List(5).Par_Value;
     ElsIf (v_Par_Count = 6) Then
        Open p_Sql For v_Sql
           Using v_Par_List(1).Par_Value, v_Par_List(2).Par_Value, v_Par_List(3).Par_Value, v_Par_List(4).Par_Value,
                 v_Par_List(5).Par_Value, v_Par_List(6).Par_Value;
     ElsIf (v_Par_Count = 7) Then
        Open p_Sql For v_Sql
           Using v_Par_List(1).Par_Value, v_Par_List(2).Par_Value, v_Par_List(3).Par_Value, v_Par_List(4).Par_Value,
                 v_Par_List(5).Par_Value, v_Par_List(6).Par_Value, v_Par_List(7).Par_Value;
     ElsIf (v_Par_Count = 8) Then
        Open p_Sql For v_Sql
           Using v_Par_List(1).Par_Value, v_Par_List(2).Par_Value, v_Par_List(3).Par_Value, v_Par_List(4).Par_Value,
                 v_Par_List(5).Par_Value, v_Par_List(6).Par_Value, v_Par_List(7).Par_Value, v_Par_List(8).Par_Value;
     ElsIf (v_Par_Count = 9) Then
        Open p_Sql For v_Sql
           Using v_Par_List(1).Par_Value, v_Par_List(2).Par_Value, v_Par_List(3).Par_Value, v_Par_List(4).Par_Value,
                 v_Par_List(5).Par_Value, v_Par_List(6).Par_Value, v_Par_List(7).Par_Value, v_Par_List(8).Par_Value,
                 v_Par_List(9).Par_Value;
     ElsIf (v_Par_Count = 10) Then
        Open p_Sql For v_Sql
           Using v_Par_List(1).Par_Value, v_Par_List(2).Par_Value, v_Par_List(3).Par_Value, v_Par_List(4).Par_Value,
                 v_Par_List(5).Par_Value, v_Par_List(6).Par_Value, v_Par_List(7).Par_Value, v_Par_List(8).Par_Value,
                 v_Par_List(9).Par_Value, v_Par_List(10).Par_Value;
     ElsIf (v_Par_Count > 10) Then
        Raise_Application_Error(-2009, 'Количество параметров должно быть меньше 10!');
     End If;
  Exception
     When Others Then
        v_Sql_Errm := SubStr(Sqlerrm, 1, 250);
        Raise_Application_Error(-2011, 'Ошибка открытия курсора (' || v_Sql_Errm || ')!');
  End;
  End If;
Но данный метод позволяет передавать только до десяти параметров.
Можно ли обойти это ограничение? Если да, то как?


k2   (2006-11-07 15:34:00) [1]

Sergey Masloff   (05.11.06 00:18) [7]
http://www.softwarer.ru/
а ябедничать нехорошо :)

на во-вторых, в процедуру завернуть нужно


ANB   (2006-11-07 11:25:00) [2]


> как это делает Том:
> http://asktom.oracle.com/pls/ask/f?p=4950:8:::::F4950_P8_DISPLAYID:
> 1288401763279

Чего то я там только через контекст нашел. но, во первых это не совсем биндовые переменные, во вторых, чего то под моим тестовым юзером на 9-ке установка контекста работать не хочет (грит прав не хватает), хотя я DBA ему дал.


Sergey Masloff   (2006-11-05 00:18:00) [3]

k2 ©   (02.11.06 18:11) [6]
Ну вот, надо написать Тому что какой-то саша просторов (кто это) его методику извращением назвал.

У нас нечто подобное и без контекста делается но суть та же самая,  а я думал ноухау ;-)


k2   (2006-11-02 18:11:00) [4]

http://asktom.oracle.com/pls/ask/f?p=4950:8:::::F4950_P8_DISPLAYID:3027089372477
вопрос от 7.02.03 ваш случай
как это делает Том:
http://asktom.oracle.com/pls/ask/f?p=4950:8:::::F4950_P8_DISPLAYID:1288401763279


ANB   (2006-11-02 10:50:00) [5]

Обломись. Саша Просторов сказал, что с рефкурсором это не прокатит.

Sanders (18:04) :
Без юзинга вряд ли удастся. Только dbms_sql, но его не передашь на клиента. Можно конечно извращаться через sys_context итп.


Petr V. Abramov   (2006-11-01 18:58:00) [6]

Performing SQL Operations with Native
Dynamic SQL
в книжке PLSQL User's Guide and Reference


evvcom   (2006-11-01 14:40:00) [7]

Variable binding


Сатир   (2006-11-01 14:38:00) [8]


> Почитать про биндовые переменные

а где его почитать? и как эти переменные называются в оригинале?


ANB   (2006-11-01 13:58:00) [9]

Почитать про биндовые переменные. Их можно использовать в том числе и в составе динамического SQL. Решение обязательно запостить.


Наверх

Титульная страница Поиск, карта сайта Написать письмо