Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.01.28;
Скачать: CL | DM;

Вниз

Открытие курсора с переменным кол-вом параметров   Найти похожие ветки 

 
Сатир   (2006-11-01 13:04) [0]

Как можно реализовать сабж?
На данный момент параметры передаются в виде 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;
Но данный метод позволяет передавать только до десяти параметров.
Можно ли обойти это ограничение? Если да, то как?


 
ANB ©   (2006-11-01 13:58) [1]

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


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


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

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


 
evvcom ©   (2006-11-01 14:40) [3]

Variable binding


 
Petr V. Abramov ©   (2006-11-01 18:58) [4]

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


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

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

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


 
k2 ©   (2006-11-02 18:11) [6]

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


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

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

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


 
ANB ©   (2006-11-07 11:25) [8]


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

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


 
k2 ©   (2006-11-07 15:34) [9]

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

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



Страницы: 1 вся ветка

Текущий архив: 2007.01.28;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.042 c
15-1167733252
Slider007
2007-01-02 13:20
2007.01.28
С днем рождения ! 2 января


15-1168260263
iXT
2007-01-08 15:44
2007.01.28
Продам в хорошие руки!


15-1168525384
Prohodil Mimo
2007-01-11 17:23
2007.01.28
Есть ли какой редактор для MySQL ?


2-1168713511
Garacio
2007-01-13 21:38
2007.01.28
Часть названия файла


2-1168602839
DelphiLexx
2007-01-12 14:53
2007.01.28
Как в Memo выделять некоторые строки другим цветом