powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Определить передан ли параметр на самом деле
19 сообщений из 19, страница 1 из 1
Определить передан ли параметр на самом деле
    #39564226
PARAM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!

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

Может быть профи знают какой - то тайный код, который позволит это сделать?


Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
create or replace procedure tst(p1 varchar2 := '', p2 integer := '') is
begin
    dbms_output.put_line('PARS: '||p1||' - '||p2);

    if p1 передан then -- Как установить, что передан, а не дефолт?
         действие;
    end if;
end;

----------------------------------
set serveroutput on size unlimited;
begin
    tst;
end;
...
Рейтинг: 0 / 0
Определить передан ли параметр на самом деле
    #39564229
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PARAMМожет быть профи знают какой - то тайный код, который позволит это сделать?overload vs default
...
Рейтинг: 0 / 0
Определить передан ли параметр на самом деле
    #39564231
PARAM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ElicPARAMМожет быть профи знают какой - то тайный код, который позволит это сделать?overload vs default

Да не хотелось бы перегрузкой делать (если вы это имели ввиду). Может переданные параметры помещаются в какой массив, как в js, например?
...
Рейтинг: 0 / 0
Определить передан ли параметр на самом деле
    #39564235
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PARAMМожет переданные параметры помещаются в какой массив, как в js, например?Чудес не бывает. Но ты сам можешь строить своё API на основе массивов (брррр…).
...
Рейтинг: 0 / 0
Определить передан ли параметр на самом деле
    #39564242
PARAM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ElicPARAMМожет переданные параметры помещаются в какой массив, как в js, например?Чудес не бывает. Но ты сам можешь строить своё API на основе массивов (брррр…).

Жаль, что чудес не бывает ))) И массив - действительно брр...

Ситуация отягощается еще и тем, что для текста невозможно разделить null и пустую строку (((
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
create or replace procedure tst(p1 varchar2 := '', p2 integer := -1) is
begin
    dbms_output.put_line('PARS: '||p1||' - '||p2);
    if p1 != '' then
        dbms_output.put_line('1');
    end if; 
end;

----------------------------------
set serveroutput on size unlimited;
begin
    tst(null, null);
end;



Так можно было бы отличить переданный null от дефолтного значения (пустой строки).
...
Рейтинг: 0 / 0
Определить передан ли параметр на самом деле
    #39564251
avanyugin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PARAM,

Можно завернуть в пакет две процедуры с одинаковыми именем и разными аргументами...
...
Рейтинг: 0 / 0
Определить передан ли параметр на самом деле
    #39564253
PARAM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Единственное, что пришло в мой воспаленный мозг, это:

1. Все параметры сделать строковыми
2. Назначить им дефолтное значение - '%'
3. Проверять на соответствие этому символу и его наличие принимать за признак "не передан"
4. Надеяться на чудо )))

Жаль, что в Oracle нет библиотеки именно для обработки переданных параметров...
...
Рейтинг: 0 / 0
Определить передан ли параметр на самом деле
    #39564254
PARAM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
avanyuginPARAM,

Можно завернуть в пакет две процедуры с одинаковыми именем и разными аргументами...

Можно, но это будет перегрузка. А зачем нам перегрузка, нам перегрузка не нужна )))
...
Рейтинг: 0 / 0
Определить передан ли параметр на самом деле
    #39564257
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PARAMЖаль, что в Oracle нет библиотеки именно для обработки переданных параметров...А в каком ЯП есть инструмент, без перегрузки позволяющий понять, что аргумент при вызове "не передан"/"не указан" или "передано значение по умолчанию"?
...
Рейтинг: 0 / 0
Определить передан ли параметр на самом деле
    #39564264
PARAM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AmKadPARAMЖаль, что в Oracle нет библиотеки именно для обработки переданных параметров...А в каком ЯП есть инструмент, без перегрузки позволяющий понять, что аргумент при вызове "не передан"/"не указан" или "передано значение по умолчанию"?

В JS формируется массив переданных параметров, насколько помню. По нему можно определить какие параметры были переданы и отличить от дефолтных.
...
Рейтинг: 0 / 0
Определить передан ли параметр на самом деле
    #39564274
Ikir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PARAM,

Странный подход: сначала устроить себе геморрой, а потом искать методы его лечения.
...
Рейтинг: 0 / 0
Определить передан ли параметр на самом деле
    #39564305
Фотография Foxter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IkirPARAM,

Странный подход: сначала устроить себе геморрой, а потом искать методы его лечения.

В каком смысле?
...
Рейтинг: 0 / 0
Определить передан ли параметр на самом деле
    #39564333
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IkirСтранный подход: сначала устроить себе геморрой, а потом искать методы его лечения.Вакцины/лекарства от некоторых бактерий так изобретались.
...
Рейтинг: 0 / 0
Определить передан ли параметр на самом деле
    #39564350
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FoxterВ каком смысле?Видимо это было такое замечание, что, мол, придумали в оракле отождествить пустую строку с null-ом, а ораклисты мучаются в попытке отличить одно от другого.
...
Рейтинг: 0 / 0
Определить передан ли параметр на самом деле
    #39564374
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PARAMПонимаю, что можно использовать заведомо невероятные дефолтные значения
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
create or replace procedure dropme_wtf_paranoia(p_par_phobia varchar2 := pkg_const.DEFAULT_VARCHAR2) is
  l_par_phobia varchar2(30) := '';
begin
  --setting defaults
  l_par_phobia := case when p_par_phobia = pkg_const.DEFAULT_VARCHAR2 then pkg_const.DEFAULT_PHOBIA else p_par_phobia end;
.....
end;
/


где параноидальные базовые константы никак не связаны с предметной областью приложения.

Если пользователь настолько туп, что передаёт базовую параноидальную константу, то считать его роботом и не реагировать дополнительно.
...
Рейтинг: 0 / 0
Определить передан ли параметр на самом деле
    #39564398
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
envнастолько туп Я бы сказал "изобретателен".
...
Рейтинг: 0 / 0
Определить передан ли параметр на самом деле
    #39564512
Ikir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FoxterВ каком смысле?

В том смысле, что, если вам патологически необходимо отделить переданные параметры и дефолтные, то зачем присваивать дефолтные значения в объявлении процедуры? Присвойте их после обработки входных параметров.
...
Рейтинг: 0 / 0
Определить передан ли параметр на самом деле
    #39564525
pls-306
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ikir Присвойте их после обработки входных параметров.Для этого придется определять, что пользователь не передал обязательный параметр. Внутри процедуры сделать этого не получится.
...
Рейтинг: 0 / 0
Определить передан ли параметр на самом деле
    #39564533
dba123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тогда проще, имхо, использовать функцию
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
create or replace  function default_f(p_name varchar2) return varchar2
is
begin
    dbms_output.put_line('Inside default_f:'||p_name);
    return null;
end default_f;
/

create or replace  function default_f(p_name varchar2) return pls_integer
is
begin
    dbms_output.put_line('Inside default_f:'||p_name);
    return null;
end default_f;
/

create or replace procedure tst(
  p1 varchar2 := default_f($$PLSQL_UNIT_TYPE||':'||$$PLSQL_UNIT||':'||'P1'||':'||$$plsql_line)
, p2 integer  := default_f($$PLSQL_UNIT_TYPE||':'||$$PLSQL_UNIT||':'||'P2'||':'||$$plsql_line))
is
begin
    dbms_output.put_line('PARS: '||p1||' , '||p2);
end;
/

----------------------------------
--set serveroutput on size unlimited;
begin
    tst(null, null);
    tst(null, 1);
    tst(p2 => 2);
    tst(p1 => '1');
end;
/

PARS:  ,
PARS:  , 1
Inside default_f:PROCEDURE:TST:P1:2
PARS:  , 2
Inside default_f:PROCEDURE:TST:P2:3
PARS: 1 ,
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Определить передан ли параметр на самом деле
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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