Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Функция в SELECT  [new]
Tasha_1205
Member

Откуда: Пермь
Сообщений: 222
автор
FUNCTION UPD_PARAM_F(
cd_qx NUMBER,
cd_tx NUMBER
)
RETURN NUMBER
IS
s NUMBER;
BEGIN
SELECT TO_NUMBER (text)
INTO s
FROM abc.qtrace
WHERE cd_t = cd_tx
AND cd_q = cd_qx;

igoreha.upd_params (1, s);
RETURN (s);
END;


где
igoreha.upd_params (1, s) это

автор
PROCEDURE UPD_PARAMS
( cdp IN number,
val IN number)
IS
BEGIN
update igoreha.params set value=val where cd_p=cdp;
END;


вызываю ее в селекте

автор
select igoreha.UPD_PARAM_F(825,63697) from dual



выдает Invalid column name

пошаго все отлично
9 июн 07, 11:05    [4251332]     Ответить | Цитировать Сообщить модератору
 Re: Функция в SELECT  [new]
NightGhost
Member

Откуда:
Сообщений: 629
igoreha - это название схемы?
9 июн 07, 11:12    [4251371]     Ответить | Цитировать Сообщить модератору
 Re: Доступ к MySQL через Ole интерфейс  [new]
Tasha_1205
Member

Откуда: Пермь
Сообщений: 222
lf
9 июн 07, 11:13    [4251377]     Ответить | Цитировать Сообщить модератору
 Re: Доступ к MySQL через Ole интерфейс  [new]
Tasha_1205
Member

Откуда: Пермь
Сообщений: 222
Да
9 июн 07, 11:13    [4251380]     Ответить | Цитировать Сообщить модератору
 Re: Функция в SELECT  [new]
NightGhost
Member

Откуда:
Сообщений: 629
Вероятно проблемма с уровенем чистоты функции для использования в SQL

для возможности вызова функции треба что бы выполнялось
WNDS.
9 июн 07, 11:18    [4251412]     Ответить | Цитировать Сообщить модератору
 Re: Доступ к MySQL через Ole интерфейс  [new]
Tasha_1205
Member

Откуда: Пермь
Сообщений: 222
Извиняюсь, но я что то ни чего не поняла
9 июн 07, 11:20    [4251431]     Ответить | Цитировать Сообщить модератору
 Re: Функция в SELECT  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
Tasha_1205
пошаго все отлично
Как-как?

С грантами-то все хорошо?

Кстати мягко говоря, не хорошо вызывать функцию, делающую DML, в селекте. Можете нарваться, даже если верси япропустит...
9 июн 07, 11:22    [4251439]     Ответить | Цитировать Сообщить модератору
 Re: Функция в SELECT  [new]
Proteus
Member

Откуда:
Сообщений: 1348
Что ты не поняла?

Все же элементарно... :)
Нельзя использовать в запросе функции которые изменяют данные в БД.
9 июн 07, 11:24    [4251446]     Ответить | Цитировать Сообщить модератору
 Re: Доступ к MySQL через Ole интерфейс  [new]
Tasha_1205
Member

Откуда: Пермь
Сообщений: 222
с грантами все хорошо
9 июн 07, 11:24    [4251449]     Ответить | Цитировать Сообщить модератору
 Re: Доступ к MySQL через Ole интерфейс  [new]
Tasha_1205
Member

Откуда: Пермь
Сообщений: 222
Теперь понятно
9 июн 07, 11:26    [4251462]     Ответить | Цитировать Сообщить модератору
 Re: Функция в SELECT  [new]
NightGhost
Member

Откуда:
Сообщений: 629
Тем не менее можно вызвать процедуру или функцию
с автономной транзакцией и тода данные заносить можно.
проверил.
но ошибка возникает несколько другая
11:26:13 ORA-14551: cannot perform a DML operation inside a query

Процедуры и функции находяться в той же схеме откуда вызываются?
9 июн 07, 11:28    [4251476]     Ответить | Цитировать Сообщить модератору
 Re: Функция в SELECT  [new]
Tasha_1205
Member

Откуда: Пермь
Сообщений: 222
и что же мне их по разным схемам разнести нужно?
9 июн 07, 11:30    [4251484]     Ответить | Цитировать Сообщить модератору
 Re: Функция в SELECT  [new]
NightGhost
Member

Откуда:
Сообщений: 629
Вот так все работает

PROCEDURE ADD_LOG (
    pModule in varchar2,
    pMessage in varchar2,
    pAddData in clob default null)
IS
    pragma autonomous_transaction;
BEGIN
    insert into s$log (
        module, time_key, message, add_data)
    values (
            substr(pModule, 1, 128), sysdate, substr(pMessage, 1, 4000), pAddData);
    commit;
END;

FUNCTION TEST_F
  ( param1 IN number, 
    param2 IN number)
  RETURN number IS

BEGIN 
    ADD_LOG('TEST_F', 'профвыа');
    RETURN param1 + param2;

END;

select TEST_F(1, 2) from dual
9 июн 07, 11:32    [4251500]     Ответить | Цитировать Сообщить модератору
 Re: Функция в SELECT  [new]
aiki-tsunami
Member

Откуда: Melbourne
Сообщений: 101
Jannny
не хорошо вызывать функцию, делающую DML, в селекте. Можете нарваться


даже если и разнесете по разным схемам
9 июн 07, 11:35    [4251516]     Ответить | Цитировать Сообщить модератору
 Re: Доступ к MySQL через Ole интерфейс  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
Tasha_1205
с грантами все хорошо
не верю...
9 июн 07, 11:59    [4251631]     Ответить | Цитировать Сообщить модератору
 Re: Функция в SELECT  [new]
mcureenab
Member

Откуда: Murmansk
Сообщений: 5928
Tasha_1205
и что же мне их по разным схемам разнести нужно?


Не нужно. Всё равно работать не будет.

PS. Совет. Избегай явного указания схемы объекта в коде. Настанет день, когда понадобится развернуть БД в другой схеме. Придётся дорабатывать. На крайний случай, пользуйся синонимами.
9 июн 07, 15:15    [4252628]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить