Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2007.01.28;
Скачать: [xml.tar.bz2];

Вниз

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

 
Сатир   (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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.044 c
11-1144662651
Godness
2006-04-10 13:50
2007.01.28
Почему не меняется стиль формы?


15-1167850639
Kolan
2007-01-03 21:57
2007.01.28
Не пойму почему код работает :)


15-1168103024
Nic
2007-01-06 20:03
2007.01.28
Turbo Delphi страсть как хочется :)


15-1167919316
1111
2007-01-04 17:01
2007.01.28
AutoCAD


2-1168432358
sapsi
2007-01-10 15:32
2007.01.28
Компонент для автоматического изменения размера формы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский