|
Как вызвать хранимую ФУНКЦИЮ Oracle на C#
|
|||
---|---|---|---|
#18+
Подскажите пожалуйста как вызвать хранимую функцию, с процедурами все в порядке, а вот с функцией что-то не получается... делаю так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.07.2006, 09:51 |
|
Как вызвать хранимую ФУНКЦИЮ Oracle на C#
|
|||
---|---|---|---|
#18+
Извиняюсь в прведенном тексте ошибка вместо: Код: plaintext 1.
нужно читать: Код: plaintext 1.
пропустил ":"... ... |
|||
:
Нравится:
Не нравится:
|
|||
24.07.2006, 10:27 |
|
Как вызвать хранимую ФУНКЦИЮ Oracle на C#
|
|||
---|---|---|---|
#18+
Чтобы не создавать нову тему с таким же названием, решил задать свой вопрос сдесь. Есть хранимая функция: Код: plaintext 1. 2. 3. 4.
Как ее вызвать из С#? Я делаю так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Код: plaintext
Если не объявить второй параметр (ReturnValue), то ошибка такая: Код: plaintext 1. 2. 3.
Как правильно вызвать процедуру? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2008, 20:15 |
|
Как вызвать хранимую ФУНКЦИЮ Oracle на C#
|
|||
---|---|---|---|
#18+
Рискну предположить: Код: plaintext 1.
Имя параметра стало с двоеточием ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2008, 20:19 |
|
Как вызвать хранимую ФУНКЦИЮ Oracle на C#
|
|||
---|---|---|---|
#18+
Вообще-то если функция удовлетворяет следующим условиям: 1) входные параметры с модой IN 2) не содержит dml и ddl; 3) содержит dml, но завернутый в автономную транзакцию; 4) в параллельном режиме или при удаленном доступе не читает/изменяет переменные пакета; 5) в случае, противном п.3 не изменяет переменные пакета, если упротребляется во WHERE или GROUP BY; 6) функция не ссылается на другую функцию и вьюху, нарушающие пп.1-4 то функцию можно тупо вызывать из запроса: Код: plaintext
Первым делом мы испортим самолёты. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2008, 09:22 |
|
Как вызвать хранимую ФУНКЦИЮ Oracle на C#
|
|||
---|---|---|---|
#18+
Igor Vitaliev Код: plaintext
хм... а где параметры? Код: plaintext
Яростный МечРискну предположить: Код: plaintext 1.
да, двоеточие, но только не в параметрах, а в самом запросе. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2008, 09:56 |
|
Как вызвать хранимую ФУНКЦИЮ Oracle на C#
|
|||
---|---|---|---|
#18+
вдогонку... а не легче процедуру выполнять так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
_______________ "Если человек не знает, куда он плывет, для него нет благоприятных ветров". Сенека ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2008, 10:05 |
|
Как вызвать хранимую ФУНКЦИЮ Oracle на C#
|
|||
---|---|---|---|
#18+
Спасибо всем отозвавшимся. Все, что написано выше, может и имеет право на жизнь, но моя проблема в другом. Мне нужно вызвать хранимую функцию , а не процедуру. Мой код чудесно работает, если я вызываю процедуру, беда только с функцией. Очевидно, есть какой-то нюанс с объявлением параметра, отвечающего за возвращаемый результат. Предположения не помогли: параметры можно объявлять как с ":", так и без него; перечислять все параметры в CommandText не нужно, на то он и имеет тип "CommandType.StoredProcedure"; а что касается вызова ф-ции как sql'я Код: plaintext
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2008, 11:40 |
|
Как вызвать хранимую ФУНКЦИЮ Oracle на C#
|
|||
---|---|---|---|
#18+
Igor VitalievНо ведь так не интересно, я хочу, чтобы система сама генерировала такой скрипт, как делает с хранимой процедурой. Хранимая процедура ничего не возвращает, ей нужна лишь пустая PL/SQL обертка, функция жевозвращает - и для нее в этой обертке нужно прописывать переменную, в которую идет возврат. Поскольку OracleCommand не доросла до возможностей ИИ, и не может распарсить dll функции, дабы определить, какую переменную объявить, это должны сделать вы сами. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2008, 11:55 |
|
Как вызвать хранимую ФУНКЦИЮ Oracle на C#
|
|||
---|---|---|---|
#18+
ЪйПоскольку OracleCommand не доросла до возможностей ИИ Неправда ваша, похоже, что доросла :) Эксперимент показал, что все работает, если поменять местами строки с указанием параметров, т.е. параметр, отвечающий за результат, должен идти первым: Код: plaintext 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2008, 12:05 |
|
Как вызвать хранимую ФУНКЦИЮ Oracle на C#
|
|||
---|---|---|---|
#18+
Igor VitalievНеправда ваша, похоже, что доросла :) Эксперимент показал, что все работает, если поменять местами строки с указанием параметров, т.е. параметр, отвечающий за результат, должен идти первым: Код: plaintext 1. 2. 3. 4. 5.
Ну и сравните этот код с предыдущим, взятым в процедурные скобки PL/SQL - фактически, анонимный блок. А здесь у вас прямой вызов. И при котором вы опять же указываете, куда возвращать результат. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2008, 12:13 |
|
Как вызвать хранимую ФУНКЦИЮ Oracle на C#
|
|||
---|---|---|---|
#18+
ЪйА здесь у вас прямой вызов. И при котором вы опять же указываете, куда возвращать результат. Ну так это мне и нужно было :) Вся проблема была в том, чтобы догадаться, что параметр-результат должен итди первым в списке параметров. Хотя я все больше склоняюсь к мысли, что лучше использовать анонимный PL/SQL блок. Лучше один раз написать руками, чем полагаться неизвестно на что. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2008, 12:18 |
|
Как вызвать хранимую ФУНКЦИЮ Oracle на C#
|
|||
---|---|---|---|
#18+
Igor VitalievВся проблема была в том, чтобы догадаться, что параметр-результат должен итди первым в списке параметров. вы издеваетесь? зачем так извращаться, что то там выгадывать, где и что должно идти, если можно просто прописать параметры в запросе, указав кто входной, а кто наоборот? ЗЫ интересно, что будет с тем программистом, кто когда-нибудь будет поддерживать ваш код, по вашему, он вначале должен методом проб всё протестировать, понят, что, "да!", первыми идут возвращаемые параметры, а уж потом входные. Жуть... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2008, 14:21 |
|
Как вызвать хранимую ФУНКЦИЮ Oracle на C#
|
|||
---|---|---|---|
#18+
WYPMAHвы издеваетесь? зачем так извращаться, что то там выгадывать, где и что должно идти, если можно просто прописать параметры в запросе, указав кто входной, а кто наоборот? ЗЫ интересно, что будет с тем программистом, кто когда-нибудь будет поддерживать ваш код, по вашему, он вначале должен методом проб всё протестировать, понят, что, "да!", первыми идут возвращаемые параметры, а уж потом входные. Жуть... Нет, не издеваюсь, я действительно тупой :) В .NET я делаю первые шаги, до сих пор всегда писал на Дельфи, а это, похоже, развращает. Пример работы с базой взял здесь: http://www.oracle.com/technology/oramag/oracle/07-jan/o17odp.html. И там никто не выписывает анонимные PL/SQL блоки, все работает и так. А ошибка, с которой я столкнулся, связана с особенностью реализации OracleCommand. Теперь я знаю, что, если явно не указывать параметры в CommandText, то они связываются по номеру, а не по названию. Так что программисту, который будет поддерживать код, гадать не прийдется, ему просто нужно знать! Знать, что можно сделать так, а можно и эдак. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2008, 16:47 |
|
|
start [/forum/topic.php?fid=20&fpage=115&tid=1402748]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
101ms |
get topic data: |
13ms |
get forum data: |
11ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
others: | 10ms |
total: | 216ms |
0 / 0 |