powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Функция length
25 сообщений из 143, страница 1 из 6
Функция length
    #39351151
Lary Denis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пупсики, бывает ли случай, когда функция length возвращает значение 0 (ноль)?
...
Рейтинг: 0 / 0
Функция length
    #39351153
Фотография AlexFF__|
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lary DenisПупсики, бывает ли случай, когда функция length возвращает значение 0 (ноль)?
Бывает
...
Рейтинг: 0 / 0
Функция length
    #39351155
Lary Denis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexFF__|, не подскажешь, в каких случаях?
...
Рейтинг: 0 / 0
Функция length
    #39351158
Фотография AlexFF__|
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lary DenisAlexFF__|, не подскажешь, в каких случаях?
LOB локатор
...
Рейтинг: 0 / 0
Функция length
    #39351159
Maxim Demenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lary Denis,

Код: plsql
1.
length(empty_clob())



Regards

Maxim
...
Рейтинг: 0 / 0
Функция length
    #39351160
Lary Denis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А то был на собеседовании, не сообразил что ответить.
...
Рейтинг: 0 / 0
Функция length
    #39351172
Lary Denis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот это мне вообще мозг сломало
Код: 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.
select
    lnnvl(dummy = 'X'),
    lnnvl(dummy = 'Y')
from dual
where lnnvl(dummy = 'Y');

LNNVL(DUMMY='X') LNNVL(DUMMY='Y')
---------------- ----------------


1 строка выбрана.


План выполнения
----------------------------------------------------------
Plan hash value: 272002086

--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |     1 |     2 |     2   (0)| 00:00:01 |
|*  1 |  TABLE ACCESS FULL| DUAL |     1 |     2 |     2   (0)| 00:00:01 |
--------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter(LNNVL("DUMMY"='Y'))

Note
-----
   - automatic DOP: Computed Degree of Parallelism is 1 because of parallel threshold
...
Рейтинг: 0 / 0
Функция length
    #39351212
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lary DenisА вот это мне вообще мозг сломало

Код: plsql
1.
2.
3.
4.
5.
select
    lnnvl(dummy = 'X'),
    lnnvl(dummy = 'Y')
from dual
where lnnvl(dummy = 'Y');




Насчет LNNVL , так это та привыкай к курению доки. Сначала не затягиваясь, а затем глядишь и во вкус войдешь. Хотя тут Oracle сам себе мозг сломал. LNNVL возвращает BOOLEAN от которого у SQL несварение и дока вобщем-то и говорит (правда can а не must) "LNNVL provides a concise way to evaluate a condition when one or both operands of the condition may be null. The function can be used in the WHERE clause of a query, or as the WHEN condition in a searched CASE expression ". Однако SQL хавает LNNVL но толком переварить не может. SQL преобразует тип результатa LNNVL в NUMBER а вот TRUE/FALSE не в 1/0 как хотелось бы, a в NULL.

Код: 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.
SQL> create or replace
  2    view v1
  3      as
  4        select  lnnvl(dummy = 'X') x,
  5                lnnvl(dummy = 'Y') y
  6          from  dual
  7  /

View created.

SQL> select  *
  2    from  v1
  3  /

         X          Y
---------- ----------


SQL> desc v1
 Name                                      Null?    Type
 ----------------------------------------- -------- --------
 X                                                  NUMBER
 Y                                                  NUMBER

SQL> 



SY.
...
Рейтинг: 0 / 0
Функция length
    #39351241
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я только не пойму зачем надо было делать LOGICAL NON-NULL VALUE? Зачем NON?
Разве не проще было сделать проверку предиката с учетом пустых значений? Ну или хотя бы в дополнение..
...
Рейтинг: 0 / 0
Функция length
    #39351258
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--Eugene--Я только не пойму зачем надо было делать LOGICAL NON-NULL VALUE? Зачем NON?Ее сделали для внутреннего употребления, вылезала в эксплейне на not in или что-то вроде того. Потом, видимо кто-то задействовал в в applications и решили опубликовать.
...
Рейтинг: 0 / 0
Функция length
    #39351333
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 -2-,
автор вылезала в эксплейне
вылезала обычно тогда, когда возникает concatenation в плане
2 --Eugene--
авторЗачем NON?
вот как раз за этим.
lnnvl на второй ветке должен отсечь все то, что уже попало в первую, не уничтожая то, из второй, что не попало в первую ветку.

во первых, если lnnvl допустит для какой-то строки null и ее не было в первой части образуемого union,
то эта строка будет просто потеряна. Не имеет права lnnvl давать null - он мир разрушит при дакой способности.

Во вторых, без правильного lnnvl правильный concatenation, работающий как union all, без дополнительного distict,
получить нельзя.
...
Рейтинг: 0 / 0
Функция length
    #39351341
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby,

получить нельзя - в смысле затруднительно автоматически получить из текста конкретного запроса.
Там где можно и оптимизатор обучен это делать, он сделает это не используя lnnvl
...
Рейтинг: 0 / 0
Функция length
    #39351346
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby,

да моё возмущение не про это.
оно про то, что ради проверки предиката с учетом пустых значений приходится логически менять предикат на обратный.
ie: [a is not null or b is not null or a = b] == [lnnvl(a != b)]
...
Рейтинг: 0 / 0
Функция length
    #39351365
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--Eugene--,

во первых, вы ошибаетесь
[lnnvl(a != b)] = (a = b OR a Is Null OR b Is Null)
во вторых, на обратное логическое значение во второй части юниона
меняется именно потому, что прямое сработало в первой.
Только оно должно быть специальное обратное, такое, которое преобразует false в true,
а unknown тоже в true.

PS
Если возмущает - презирай его.
Это правильно в том отношении, что ошибок от непонимания, что творишь - не наделаешь.
...
Рейтинг: 0 / 0
Функция length
    #39351398
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--Eugene--,

прошу прощения, запечатался..
конечно же IS NULL
...
Рейтинг: 0 / 0
Функция length
    #39353877
Lary Denis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пупсики, вопрос с того же собеседования. Попросили перечислить предикаты, в плане данного запроса:

Код: plsql
1.
2.
3.
4.
5.
select *
from dual
where lnnvl(dummy = 'Y')
and   nullif(dummy, 'Y') = 'S'
and   decode(dummy, 'X', 'S') = 'S';



Я опять облажался. Назвал только 2 из 3х. Сказали, что такой разработчик им не подходит.


Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
План выполнения
----------------------------------------------------------
Plan hash value: 272002086

--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |     1 |     2 |     2   (0)| 00:00:01 |
|*  1 |  TABLE ACCESS FULL| DUAL |     1 |     2 |     2   (0)| 00:00:01 |
--------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter(
             DECODE("DUMMY",'X','S')='S' AND 
             CASE "DUMMY" WHEN 'Y'  THEN NULL ELSE "DUMMY" END ='S' AND 
             LNNVL("DUMMY"='Y')
             )


...
Рейтинг: 0 / 0
Функция length
    #39353903
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Судя по вопросам, в этой конторе специализируются на выборках из dual
...
Рейтинг: 0 / 0
Функция length
    #39354026
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Предикатов:
0 - так как в документации предикат упоминается в контексте джоина, который здесь отсутствует.
1 - так как в глоссарии "where condition".
1 - так как в википедии предикат определяется как функция, возвращающая логический результат
...
6 - так как в википедии предикат определяется как функция, возвращающая логический результат, но за функцию также считаем операции (см. sys.standard).
...
Рейтинг: 0 / 0
Функция length
    #39354037
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Функция length
    #39354040
Жость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous http://mathhelpplanet.com/static.php?p=logika-predikatov Дочитал до середины, потом умер
...
Рейтинг: 0 / 0
Функция length
    #39354046
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Жостьandrey_anonymous http://mathhelpplanet.com/static.php?p=logika-predikatov Дочитал до середины, потом умер
Тем не менее, если рассматривать предикат в математическом смысле - как предложение, превращающееся в истинное или ложное утверждение при подстановке конкретных элементов множества, то предикатов будет ровно три:
Код: plsql
1.
2.
3.
1. lnnvl(dummy = 'Y')
2. nullif(dummy, 'Y') = 'S'
3. decode(dummy, 'X', 'S') = 'S'


которые на представленном множестве M из одного элемента 'X' превращаются в утверждения:
Код: plsql
1.
2.
3.
1. lnnvl('X' = 'Y') => 'X' <> 'Y' - истинно
2. nullif('X', 'Y') = 'S'  => 'X' = 'S' - ложно
3. decode('X', 'X', 'S') = 'S' => 'S' = 'S' - истинно


При этом на множестве M предикаты 1 и 3 - равносильны и тождественно истинны, а предикат 2 - тождественно ложен.
:)
...
Рейтинг: 0 / 0
Функция length
    #39354109
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousпредикатов будет ровно три:
Код: plsql
1.
2.
3.
1. lnnvl(dummy = 'Y')
2. nullif(dummy, 'Y') = 'S'
3. decode(dummy, 'X', 'S') = 'S'

А как же предикат, определенный на множестве предикатов?
Четыре!
...
Рейтинг: 0 / 0
Функция length
    #39354114
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-А как же предикат, определенный на множестве предикатов?
Четыре!
Не верю :)
...
Рейтинг: 0 / 0
Функция length
    #39354161
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-...
0 - так как ....
1 - так как ...
1 - так как ...
...
6 - так как в википедии предикат определяется как функция, возвращающая логический результат, но за функцию также считаем операции (см. sys.standard).

я бы сказал 1, но их здесь не меньше пяти и не больше 21, с разумным ожиданием в районе 9,
так так конкретно здесь 1 это 3(атома) и 2(двухместных символа),
Итак:
- предикат здесь один - фильтрующий - исходный - он же единственный один:
AND(AND(lnnvl(dummy = 'Y'),nullif(dummy, 'Y') = 'S'),decode(dummy, 'X', 'S') )

, но
- состоящий из трех предикатных атомов и двух двухместных предикатных символов AND
- на которых образуются следующие предикаты

исходный - он же единственный один:
AND(AND(lnnvl(dummy = 'Y'),nullif(dummy, 'Y') = 'S'),decode(dummy, 'X', 'S') )

считаем предикаты:
1й lnnvl(dummy = 'Y') - A - атом
2й nullif(dummy, 'Y') = 'S' - B - атом
3й decode(dummy, 'X', 'S') = 'S' - C - атом
4й AND(lnnvl(dummy = 'Y'),nullif(dummy, 'Y') = 'S')
5й AND(lnnvl(dummy = 'Y'), decode(dummy, 'X', 'S') = 'S')
6й AND(nullif(dummy, 'Y') = 'S', decode(dummy, 'X', 'S') = 'S'
------
4й, 5й и 6й коммутативны и атомы могут быть переставлены (+3)
------
7й AND(AND(lnnvl(dummy = 'Y'),nullif(dummy, 'Y') = 'S'),decode(dummy, 'X', 'S') = 'S')
7й дает базовую конструкцию исследуемого фильтрующего предиката - AND(AND(A,B),C)
в зависимости от деталей
(ну, количества принятых на грудь перед собеседованием грамм, например)
в этом месте ставится точка или продолжается:
8)- AND(AND(C,A),B)
9) AND(AND(B,C),A)
7й, 8й и 9й - каждый - может быть записан 4мя способами (3*4=12) + 6+3 = 21
...
Рейтинг: 0 / 0
Функция length
    #39354207
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lary DenisА то был на собеседовании, не сообразил что ответить.

Какую только хренотень ораклисты у других ораклистов ни спрашивают...

Я бы и не додумался спрашивать про какую-то функцию, про которую можно
прочитать в документации...
...
Рейтинг: 0 / 0
25 сообщений из 143, страница 1 из 6
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Функция length
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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