powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / in out параметр функции
20 сообщений из 20, страница 1 из 1
in out параметр функции
    #33733310
1vadik1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чето я не понимаю с этими параметрами:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE OR REPLACE FUNCTION t_func(val IN OUT INTEGER) RETURN NUMBER IS
tmpVar NUMBER;
BEGIN
   tmpVar :=  0 ;
   RETURN tmpVar;
END t_func;

select t_func( 1 ) from dual;
ORA- 06572 : Function string has out arguments 
В доке :
An IN OUT parameter passes initial values to the subprogram being called, and returns updated values to the caller.
...
Рейтинг: 0 / 0
in out параметр функции
    #33733320
Фотография Alexey Polovinkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Переменную хочет....
...
Рейтинг: 0 / 0
in out параметр функции
    #33733341
Фотография dmidek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1vadik1Чето я не понимаю с этими параметрами:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE OR REPLACE FUNCTION t_func(val IN OUT INTEGER) RETURN NUMBER IS
tmpVar NUMBER;
BEGIN
   tmpVar :=  0 ;
   RETURN tmpVar;
END t_func;

select t_func( 1 ) from dual;
ORA- 06572 : Function string has out arguments 
В доке :
An IN OUT parameter passes initial values to the subprogram being called, and returns updated values to the caller.

OUT естественно в топку.
Вы возвращаете значение из функции по оператору RETURN...
...
Рейтинг: 0 / 0
in out параметр функции
    #33733344
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если функция вызывается из sql, то м.б. только IN параметры (а иначе куда будет OUT ? :) )
...
Рейтинг: 0 / 0
in out параметр функции
    #33733352
1vadik1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ok
...
Рейтинг: 0 / 0
in out параметр функции
    #33733474
Фотография Alexey Polovinkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
CREATE OR REPLACE FUNCTION dummy_fnc(p_dummy_par IN OUT NUMBER)
  RETURN NUMBER IS
  l_dummy_var NUMBER;
BEGIN
  l_dummy_var := p_dummy_par * - 1 ;

  RETURN l_dummy_var;
END dummy_fnc;

alexey@devrkc>;exec :x := dummy_fnc( 1 );
BEGIN :x := dummy_fnc( 1 ); END;

                      *
ERROR at line  1 :
ORA- 06550 : line  1 , column  23 :
PLS- 00363 : expression '1' cannot be used as an assignment target
ORA- 06550 : line  1 , column  7 :
PL/SQL: Statement ignored
...
Рейтинг: 0 / 0
in out параметр функции
    #33733490
Sleepy_PIP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Polovinkin
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
CREATE OR REPLACE FUNCTION dummy_fnc(p_dummy_par IN OUT NUMBER)
  RETURN NUMBER IS
  l_dummy_var NUMBER;
BEGIN
  l_dummy_var := p_dummy_par * - 1 ;

  RETURN l_dummy_var;
END dummy_fnc;

alexey@devrkc>;exec :x := dummy_fnc( 1 );
BEGIN :x := dummy_fnc( 1 ); END;

                      *
ERROR at line  1 :
ORA- 06550 : line  1 , column  23 :
PLS- 00363 : expression '1' cannot be used as an assignment target
ORA- 06550 : line  1 , column  7 :
PL/SQL: Statement ignored


да нельзя использовать IN/OUT с вызовом ф./процедуры если в ее In/Out параметрах стоит то, чему нельзя присвоить значение , как описанно в процедуре/функции. точка. и не важно что вы его не меняеете.
...
Рейтинг: 0 / 0
in out параметр функции
    #33733501
Фотография dmidek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Polovinkin
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
CREATE OR REPLACE FUNCTION dummy_fnc(p_dummy_par IN OUT NUMBER)
  RETURN NUMBER IS
  l_dummy_var NUMBER;
BEGIN
  l_dummy_var := p_dummy_par * - 1 ;

  RETURN l_dummy_var;
END dummy_fnc;

alexey@devrkc>;exec :x := dummy_fnc( 1 );
BEGIN :x := dummy_fnc( 1 ); END;

                      *
ERROR at line  1 :
ORA- 06550 : line  1 , column  23 :
PLS- 00363 : expression '1' cannot be used as an assignment target
ORA- 06550 : line  1 , column  7 :
PL/SQL: Statement ignored


Да , это ясно, но не все так трагично.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
CREATE OR REPLACE FUNCTION scott.dummy_fnc(p_dummy_par IN OUT NUMBER)
  RETURN NUMBER IS
  l_dummy_var NUMBER;
BEGIN
  l_dummy_var := p_dummy_par * - 1 ;
  p_dummy_par := p_dummy_par +  10 ;
  RETURN l_dummy_var;
END dummy_fnc;
/
declare
v_out NUMBER;
v_in_out NUMBER :=  1 ;
begin
v_out := scott.dummy_fnc(v_in_out);
dbms_output.put_line('v_out '||v_out);
dbms_output.put_line('v_in_out '||v_in_out);
end;
/
v_out - 1 
v_in_out  11 

ИМХО надо знать, но не надо делать ...
...
Рейтинг: 0 / 0
in out параметр функции
    #33733527
Фотография Alexey Polovinkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собственно я и хотел показать что нельзя использовать константу в качестве параметра обозначеного как IN OUT
...
Рейтинг: 0 / 0
in out параметр функции
    #33733548
Sleepy_PIP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да вроде все четко и давно описано, нет? ...
...
Рейтинг: 0 / 0
in out параметр функции
    #33733702
Фотография Alexey Polovinkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sleepy_PIPда вроде все четко и давно описано, нет? ...

Солидарен ...
...
Рейтинг: 0 / 0
in out параметр функции
    #34516389
Фотография Просто
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня тоже вопрос на эту тему. Была функция в пакете без out параметра. Теперь понадобилось его туда добавить. При вызовах этой функции из того же пакета всё работает нормально, а когда я её вызываю из другого пакета, выдаёт упомянутую ошибку. Функция одинаково объявлена и в теле пакета и в его спецификации. Правда, при вызове из другого пакета функция используется в разделе where sql-запроса, чего нет при вызовах из того же пакета. Оба пакета в одной и той же схеме. Oracle9i Enterprise Edition Release 9.2.0.5.0 под Win 2003 Server.
Что нужно исправить, чтобы это работало?
...
Рейтинг: 0 / 0
in out параметр функции
    #34516403
Jannny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Простофункция используется в разделе where sql-запроса, чего нет при вызовах из того же пакета.
Что нужно исправить, чтобы это работало?Нельзя в SQLе использовать такие функции. Перекройте функцию одноименной, только без out-параметра.
...
Рейтинг: 0 / 0
in out параметр функции
    #34516419
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПростоУ меня тоже вопрос на эту тему. Была функция в пакете без out параметра. Теперь понадобилось его туда добавить. При вызовах этой функции из того же пакета всё работает нормально, а когда я её вызываю из другого пакета, выдаёт упомянутую ошибку. Функция одинаково объявлена и в теле пакета и в его спецификации. Правда, при вызове из другого пакета функция используется в разделе where sql-запроса, чего нет при вызовах из того же пакета. Оба пакета в одной и той же схеме. Oracle9i Enterprise Edition Release 9.2.0.5.0 под Win 2003 Server.
Что нужно исправить, чтобы это работало?

дык уже сказано
http://www.sql.ru/forum/actualthread.aspx?tid=294457#2675570

Ключевая фраза именно эта
Правда, при вызове из другого пакета функция используется в разделе where sql-запроса, чего нет при вызовах из того же пакета.

Сделай 2 функции, одна из которых используется в PL/SQL (тогда можно иметь OUT-параметр), а другая используется в SQL (тогда без OUT)
...
Рейтинг: 0 / 0
in out параметр функции
    #34516434
Фотография Просто
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JannnyНельзя в SQLе использовать такие функции. Перекройте функцию одноименной, только без out-параметра.

Так и сделал. Спасибо за помощь.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
in out параметр функции
    #38334608
зеленый админ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey Polovinkin Sleepy_PIPда вроде все четко и давно описано, нет? ...

Солидарен ...

Извините, конечно, за +7 лет, но вопрос не как к вам, как к окружающим сейчас. А все ли описано???
Итак, есть что-то типа
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
create or replace
PACKAGE BODY      my_package AS
...
PROCEDURE my_proc(p_smth_in IN NUMBER, p_out_message  OUT VARCHAR2) AS
...
p_out_message  := ...
...
dbms_output.put_line(p_out_message);


в оракле. И

Код: sql
1.
2.
3.
SET @SQL = 'call my_package.my_proc(' + CONVERT(VARCHAR(250),@id) + ' , ?)';

EXEC (@Sql, @result OUTPUT) AT my_ORA_Linked_Server;



в MSSQL. Код работает, работает долго в ответственном участке проги.

Ну то, что @result вернет через dbms_output.put_line я в єто еще поверю, но вот не вижу никаких теоретических причин создавать собственную переменную на месте '?'. Подскажите, где посмотреть.
...
Рейтинг: 0 / 0
in out параметр функции
    #38335807
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зеленый админ,

если работает , значит переменную для возврата значения, прозрачно для вас, создает (и использует) ваш клиент.
...
Рейтинг: 0 / 0
in out параметр функции
    #38340287
зеленый админ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orawish,

да, действительно, дело в клиенте. В данном случае link-сервер там:
http://sql-sudhir.blogspot.com/2009/10/how-to-use-exec-at-linked-server.html
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
in out параметр функции
    #39909637
clipper1995
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1vadik1
Чето я не понимаю с этими параметрами:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE OR REPLACE FUNCTION t_func(val IN OUT INTEGER) RETURN NUMBER IS
tmpVar NUMBER;
BEGIN
   tmpVar := 0;
   RETURN tmpVar;
END t_func;

select t_func(1) from dual;
ORA-06572: Function string has out arguments 


В доке :
An IN OUT parameter passes initial values to the subprogram being called, and returns updated values to the caller.


Рекомендуется параметры OUT и IN OUT только в процедурах. Функции должны возвращать всю свою информацию исключительно командой RETURN.
Функции с параметрами OUT и IN OUT не могут вызываться из команд SQL, поэтому лучше сразу делать функции по вышеописанной рекомендации.
...
Рейтинг: 0 / 0
in out параметр функции
    #39909672
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
clipper1995
Функции с параметрами OUT и IN OUT не могут вызываться из команд SQL
похоже, вам и процедуры не следует писать по той же причине
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / in out параметр функции
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]