Главная страница
    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.037 c
1-1164903061
CaSH_
2006-11-30 19:11
2007.01.28
TreeView при выделении строки иконка меняется (продолжение 2)


2-1167928170
Vovan #2
2007-01-04 19:29
2007.01.28
Чем отличаются GlobalAlloc от VirtualAlloc? И про PChar.


2-1168510225
azl
2007-01-11 13:10
2007.01.28
TreeView


11-1147040827
DevilDevil
2006-05-08 02:27
2007.01.28
JpegObj - требует obj файлы


15-1167641289
vidiv
2007-01-01 11:48
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский