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

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



Regards

Maxim
...
Рейтинг: 0 / 0
21.11.2016, 15:30
    #39351160
Lary Denis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция length
А то был на собеседовании, не сообразил что ответить.
...
Рейтинг: 0 / 0
21.11.2016, 15:41
    #39351172
Lary Denis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция length
А вот это мне вообще мозг сломало
Код: 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
21.11.2016, 16:14
    #39351212
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция length
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
21.11.2016, 16:41
    #39351241
--Eugene--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция length
Я только не пойму зачем надо было делать LOGICAL NON-NULL VALUE? Зачем NON?
Разве не проще было сделать проверку предиката с учетом пустых значений? Ну или хотя бы в дополнение..
...
Рейтинг: 0 / 0
21.11.2016, 16:58
    #39351258
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция length
--Eugene--Я только не пойму зачем надо было делать LOGICAL NON-NULL VALUE? Зачем NON?Ее сделали для внутреннего употребления, вылезала в эксплейне на not in или что-то вроде того. Потом, видимо кто-то задействовал в в applications и решили опубликовать.
...
Рейтинг: 0 / 0
21.11.2016, 18:12
    #39351333
booby
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция length
2 -2-,
автор вылезала в эксплейне
вылезала обычно тогда, когда возникает concatenation в плане
2 --Eugene--
авторЗачем NON?
вот как раз за этим.
lnnvl на второй ветке должен отсечь все то, что уже попало в первую, не уничтожая то, из второй, что не попало в первую ветку.

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

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

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

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

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

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

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

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

А как же предикат, определенный на множестве предикатов?
Четыре!
...
Рейтинг: 0 / 0
24.11.2016, 21:44
    #39354114
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция length
-2-А как же предикат, определенный на множестве предикатов?
Четыре!
Не верю :)
...
Рейтинг: 0 / 0
24.11.2016, 23:20
    #39354161
booby
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция length
-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
25.11.2016, 02:04
    #39354207
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция length
Lary DenisА то был на собеседовании, не сообразил что ответить.

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

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


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