![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Открытие курсора с переменным кол-вом параметров [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. Решение обязательно запостить.