powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Функция length
25 сообщений из 143, страница 2 из 6
Функция length
    #39354436
Lary Denis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivКакую только хренотень ораклисты у других ораклистов ни спрашивают...
Да, черт возьми! Но вопрос усугубляется тем, что в доке нет упоминания о том, как эта функция работает с empty lob-локаторами. Есть только https://docs.oracle.com/cd/E11882_01/server.112/e41084/functions088.htm#SQLRF00658 char can be any of the data types CHAR, VARCHAR2, NCHAR, NVARCHAR2, CLOB, or NCLOB.
...
Рейтинг: 0 / 0
Функция length
    #39354469
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lary DenisНо вопрос усугубляется тем, что в доке нет упоминания о том, как эта функция работает с empty lob-локаторами.Есть: RTFM Nulls in SQL Functions (FAQ)
...
Рейтинг: 0 / 0
Функция length
    #39354489
Lary Denis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic,

Друк, прочитал статью, ссылку на которую ты дал.
Nulls in SQL FunctionsMost scalar functions return null when given a null argument. You can use the NVL function to return a value when a null occurs. For example, the expression NVL(commission_pct,0) returns 0 if commission_pct is null or the value of commission_pct if it is not null.Note:When you apply SQL functions to LOB columns, Oracle Database creates temporary LOBs during SQL and PL/SQL processing. You should ensure that temporary tablespace quota is sufficient for storing these temporary LOBs for your application.Не понял, что ты хотел этим сказать. Ты считаешь, что из этих двух предпосылок можно было бы совершенно однозначно сделать вывод, что length вернет 0 для empty-clob-ов?

Да и вообще, в контексте этого примера не понимаю второе утверждение.
Код: 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.
create table elic(id number, c clob);

Таблица создана.

Затрач.время: 00:00:00.07

insert into elic values (1, null);

1 строка создана.

Затрач.время: 00:00:00.01
insert into elic values (2, empty_clob());

1 строка создана.

Затрач.время: 00:00:00.00
insert into elic values (3, 'Hello Elic!');

1 строка создана.

Затрач.время: 00:00:00.00

commit;

Фиксация обновлений завершена.

Затрач.время: 00:00:00.01

column c format a30
select id, c, length(c) from elic;

        ID C                               LENGTH(C)
---------- ------------------------------ ----------
         1
         2                                         0
         3 Hello Elic!                            11

Затрач.время: 00:00:00.04
...
Рейтинг: 0 / 0
Функция length
    #39354545
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lary DenisДрук"Коверканье"
Lary DenisNulls in SQL FunctionsMost scalar functions return null when given a null argument.из этих двух предпосылок можно было бы совершенно однозначно сделать вывод, что length вернет 0 для empty-clob-ов?
...
Рейтинг: 0 / 0
Функция length
    #39354555
Lary Denis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic,

И все-таки
цитируя докуMost scalar functions return null when given a null argument.не тождественно нижеследующему:
All scalar functions return non-null when given a non-null argument.
...
Рейтинг: 0 / 0
Функция length
    #39354571
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boobyя бы сказалОзнакомься с книгой Введение в математическую логику
Ну это если, конечно, не хочется быть шутом... мало ли какие цели ты преследуешь.
...
Рейтинг: 0 / 0
Функция length
    #39354575
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lary Denis,

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

Возможно, у них legacy решение построенное на использовании lnnvl, знаний о length(empty_clob()) и других "хорошо" документированных возможностях СУБД.
...
Рейтинг: 0 / 0
Функция length
    #39354609
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
env,

Ага, надо было пойти еще дальше и поспрашивать
1) как collect работает с over (), хотя по доке она может быть только агрегатной
2) особенности работы ora_hash с произвольными типами включая UDF, хотя по доке во многих случаях она по доке не должна работать
3) как работает reverse на многобайтовых кодировках, хотя в доке ее вообще нет
4) детали работы полезной функции sys_op_map_nonnull
5) как вставить дату с 13-м месяцем и прочие важные детали...
...
Рейтинг: 0 / 0
Функция length
    #39354716
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lary DenisЯ опять облажался. Назвал только 2 из 3х. Сказали, что такой разработчик им не подходит.Какие-то пафосные пидоры эти твои наниматели, поднимающие ЧСВ за счет унижения кандидатов высосанными из пальца вопросами, имеющими лишь посредственное отношение к практике.
Про уровни изоляции не спрашивали, не? Если нет - я разочарован.
...
Рейтинг: 0 / 0
Функция length
    #39354736
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--Eugene--,

Уровни изоляции - критически важное базовое понятие, кооторое должен знать каждый разработчки БД.
Я почти всегда спрашиваю.
Другое дело, что в основном отвечает менее чем 1 из 5... ну это уже другая проблема.
Это даже не затрагивая вопросы согласованности вызова PL/SQL из SQL, рестарты и прочие тонкости.
...
Рейтинг: 0 / 0
Функция length
    #39354745
Lary Denis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--Eugene--Про уровни изоляции не спрашивали, не?Нет, вопросы, которые я озвучил - были первыми. Сказали раз этого не знаю, то не стоит вести дальнейшую беседу.
...
Рейтинг: 0 / 0
Функция length
    #39354995
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopУровни изоляции - критически важное базовое понятие, кооторое должен знать каждый разработчки БД.
А вот возьму и не соглашусь :)
Важное - да.
Критически - нет.
Мне вот до сих пор не доводилось в пром. решениях видеть применение уровней изоляции, отличных от RC - видимо, просто не повезло.
И большинство разрабов прекрасно с этим живут, а ежели вдруг возникнет реальная потребность в serializable или даже в RO - то сеньор подскажет.
...
Рейтинг: 0 / 0
Функция length
    #39355046
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousdbms_photoshopУровни изоляции - критически важное базовое понятие, кооторое должен знать каждый разработчки БД.
А вот возьму и не соглашусь :)
Важное - да.
Критически - нет.
Мне вот до сих пор не доводилось в пром. решениях видеть применение уровней изоляции, отличных от RC - видимо, просто не повезло.
И большинство разрабов прекрасно с этим живут, а ежели вдруг возникнет реальная потребность в serializable или даже в RO - то сеньор подскажет.
странно
я пользовал
set transaction read only;
для отчетов с несколькими селектами

.....
stax
...
Рейтинг: 0 / 0
Функция length
    #39355056
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousdbms_photoshopУровни изоляции - критически важное базовое понятие, кооторое должен знать каждый разработчки БД.
А вот возьму и не соглашусь :)
Важное - да.
Критически - нет.
Мне вот до сих пор не доводилось в пром. решениях видеть применение уровней изоляции, отличных от RC - видимо, просто не повезло.
И большинство разрабов прекрасно с этим живут, а ежели вдруг возникнет реальная потребность в serializable или даже в RO - то сеньор подскажет.Дело не только в приминении. Дело в понимании деталей реализации.
Даже Кайт начинает свою книгу с главы "Разработка успешных приложения для Oracle" где описываются исключительная важность понимания подобных моментов.
Потом идет отдельная глава про транзакции.

Для практических задач.
Это прежде всего понимание насколько серьезно отличаются решение одинаковых задач для разных СУБД.
Например, задача ограничения числа строк в Oracle и MSSQL.
Задачка
Setting Limits with Triggers
Без этого понимания появляются команды супер java/c#/etc архитекторов, которые колбасят ORM не масштабируемые "универсальные " решения и воспринимают СУБД как черный ящик.
Один раз был я на интервью в подобной конторе, у них все уже начинало дико тупить при увеличении нагрузки, но они были категорически против изменения дизайна и ожидали от нанимаемого специалиста по СУБД, что он "что-то подкрутит" и все начнет летать.

Был у меня интересный случай, много лет назад пригласили меня посмотреть на одну систему.
В биллинге один процесс постоянно лил данные в табличку, другой процесс из нее переливал и агрегировал, а затем транкейтил.
Все что, было записано в источник после старта insert select group by и до его окончания не подхватывалось самим стейтментом и бесследно удалялось.
Тогда еще у большинства были не безлимит пакеты и более 10% использованного трафика терялось.
На столько же меньше была прибыль конторы за интернет.
Систему писали бывшие спецы по MSSQL и им не приходило в голову, что данные залитые после начала стейтмента не будут увидены. Потом там все было переписано.

Критически или не критически, пусть каждый останется при своем.
Мне не очень хотелось бы работать с кодерами, которые этих вещей хотя бы для одной СУБД не понимают.

Кстати, при интервью возникают курьезные ситуации, часто человек, осознавая, что технически не тянет начинает вещать, что он был "high level architect", а кодерством занимались другие.
Ну или фантазии про грязные чтения и фантомы в Оракле иногда тоже очень впечатляют.
...
Рейтинг: 0 / 0
Функция length
    #39355061
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopandrey_anonymousА вот возьму и не соглашусь :)
Важное - да.
Критически - нет.
Дело не только в приминении. Дело в понимании деталей реализации.
Вот-вот.
Спрашиваете людей про "уровни изоляции", а услышать хотите совсем про другое, судя по "примерам из жизни" :)

Только вчера обсуждали с коллегой, какие темы обсудить с разработчиками (есть у нас что-то вроде "факультатива" для заинтересованных).
Как раз предлагалось обсудить "уровни изоляции".
Но мне удалось убедить коллегу, что обсуждать надо не "уровни изоляции", а "data concurrency and consistency".
И вот эта тема - критически важна.
Это и механизмы consistent gets, и блокировки (включая itl и пользовательские), и 1555 и многое-многое другое, даже "уровни изоляции" как маленький параграф.
Сюда же совершенно логично цепляются ретроспективные запросы, которые непосредственно с "уровнями изоляции" вообще не состыкуются, хотя по сути - еще одно проявление "деталей реализации".
...
Рейтинг: 0 / 0
Функция length
    #39355082
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous,

Спрашивая я ожидаю лишь услышать про видимость закомиченных изменений в соседней сессии на начало стейтмента или транзакции в зависимости от RC или S соответственно.
Да, уровни изоляции это лишь "маленький параграф" из области "многопользовательский доступ".
...
Рейтинг: 0 / 0
Функция length
    #39355089
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopСпрашивая я ожидаю лишь услышать про видимость закомиченных изменений в соседней сессии на начало стейтмента или транзакции в зависимости от RC или S соответственно.

...и именно это Знание я полагаю не критически важным, особенно на собеседовании - разработчик может быть вполне квалифицированным, но неиспользуемое Знание про уровни изоляции, отличные от RC, могло легко и непринужденно выветриться за годы практики :)
Вообще собеседование - штука специфическая.
Не так уж давно сам сел в лужу на вопросе "а как shared pool помогает оптимизировать запросы?", потому как мне shared pool в этом процессе никогда никак не помогал...
...
Рейтинг: 0 / 0
Функция length
    #39355105
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous,

Ладно, ладно, путь разработчик хотя бы говоря про RC не рассказывает про грязные чтения. :))
...
Рейтинг: 0 / 0
Функция length
    #39355117
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopandrey_anonymous,

Ладно, ладно, путь разработчик хотя бы говоря про RC не рассказывает про грязные чтения. :))
Гм... а я бы рассказал... есть вариантик на автономке...
Короче, я бы однозначно провалил собеседование на девелопера
...
Рейтинг: 0 / 0
Функция length
    #39355133
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousdbms_photoshopandrey_anonymous,
Ладно, ладно, путь разработчик хотя бы говоря про RC не рассказывает про грязные чтения. :))
Гм... а я бы рассказал... есть вариантик на автономке...
Код: 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.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
create table ane_tdirt as select cast('Committed rec' as varchar2(100)) a from dual;
 
Table created

declare
  rc sys_refcursor;
  cursor c is select * from ane_tdirt;
 
  procedure print_dirt is
    pragma autonomous_transaction;
    lv varchar2(20);
  begin
    dbms_output.put_line('RC reads:');
    for i in c loop
      dbms_output.put_line(i.a);
    end loop;
 
    dbms_output.new_line;
    dbms_output.put_line('Dirty reads:');
    loop
      fetch rc into lv;
     exit when rc%notfound;
      dbms_output.put_line(lv);
    end loop;
    close rc;
  end;
begin
  insert into ane_tdirt values('Uncommitted rec');
  open rc for select * from ane_tdirt;
  print_dirt;
  rollback;
end;
/
 
RC reads:
Committed rec
 
Dirty reads:
Committed rec
Uncommitted rec
 
PL/SQL procedure successfully completed

select * from ane_tdirt;
 
A
--------------------
Committed rec

drop table ane_tdirt purge;
 
Table dropped
 
SQL> 
...
Рейтинг: 0 / 0
Функция length
    #39355259
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous,


Хороший пример.
У него есть такая вариация (на базе твоего кода)
Код: 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 table ane_tdirt as select cast('Committed rec' as varchar2(100)) a from dual;
declare
--  rc sys_refcursor;
  cursor c is select * from ane_tdirt;

  function get_dirty_Not_automomous_csr return sys_refcursor
    is
     rc_inner sys_refcursor;
  Begin
      open rc_inner for select * from ane_tdirt;
      Return rc_inner;
  End;  
  
  procedure print_dirt is
    pragma autonomous_transaction;
    lv varchar2(20);
    rc_local sys_refcursor := get_dirty_Not_automomous_csr;
  begin
    dbms_output.put_line('RC reads:');
    for i in c loop
      dbms_output.put_line(i.a);
    end loop; 
 
    dbms_output.new_line;
    dbms_output.put_line('Dirty reads:');
    loop
      fetch rc_local into lv;
      exit when rc_local%notfound;
      dbms_output.put_line(lv);
    end loop;
    close rc_local;
  end;
begin
  insert into ane_tdirt values('Uncommitted rec');
-- здесь чисто, "глобальных" курсоров нет
--  open rc for select * from ane_tdirt;
  print_dirt;
  rollback;
end;
/
drop table ane_tdirt purge;

...
Рейтинг: 0 / 0
Функция length
    #39355276
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby,
прошу извинить за дублирование, но так, имхо, выразительнее:
Код: 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.
42.
43.
44.
45.
create table ane_tdirt as select cast('Committed rec' as varchar2(100)) a from dual;
declare
--  rc sys_refcursor;
  cursor c is select * from ane_tdirt;
  ---  
  procedure print_dirt is
    pragma autonomous_transaction; -- Это прагма, она здесь есть.
    -- предварительная декларация
    function get_dirty_Not_automomous_csr return sys_refcursor;
    
    lv varchar2(20);
    rc_local sys_refcursor := get_dirty_Not_automomous_csr;
    
    -- реализация
    function get_dirty_Not_automomous_csr return sys_refcursor
      is
       rc_inner sys_refcursor;
    Begin
        open rc_inner for select * from ane_tdirt;
        Return rc_inner;
    End;      
  begin
    dbms_output.put_line('RC reads:');
    for i in c loop
      dbms_output.put_line(i.a);
    end loop; 
 
    dbms_output.new_line;
    dbms_output.put_line('Dirty reads:');
    loop
      fetch rc_local into lv;
      exit when rc_local%notfound;
      dbms_output.put_line(lv);
    end loop;
    close rc_local;
  end;
begin
  insert into ane_tdirt values('Uncommitted rec');
-- здесь чисто, "глобальных" курсоров нет
--  open rc for select * from ane_tdirt;
  print_dirt;
  rollback;
end;
/
drop table ane_tdirt purge;

...
Рейтинг: 0 / 0
Функция length
    #39355319
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boobyтак, имхо, выразительнее:

Уберем ref и добавим перца:
Код: 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.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
create table ane_tdirt as select cast('Committed rec' as varchar2(100)) a from dual;
 
Table created
declare
 
  cursor c is select * from ane_tdirt;
 
  procedure print_dirt is
    pragma autonomous_transaction;
 
    function init return varchar2;
 
    cursor c_inner is select * from ane_tdirt;
    lv varchar2(20) := init();
 
    function init return varchar2 is begin
      insert into ane_tdirt values ('Autonomous init');
--      commit;
      open c_inner;
      return null;
    end;
  begin
 
    dbms_output.put_line('Expected dirty reads (cursor opened in main transaction):');
    loop
      fetch c into lv;
     exit when c%notfound;
      dbms_output.put_line(lv);
    end loop;
    close c;
 
    dbms_output.new_line;
 
    dbms_output.put_line('Unexpected dirty reads (cursor opened in autonomous DECLARE):');
    loop
      fetch c_inner into lv;
     exit when c_inner%notfound;
      dbms_output.put_line(lv);
    end loop;
    close c_inner;
 
    dbms_output.new_line;
 
    dbms_output.put_line('RC reads Autonomous transacton RC reads:');
    for i in c loop
      dbms_output.put_line(i.a);
    end loop;
  end;
begin
  insert into ane_tdirt values('Uncommitted rec');
  open c;
  print_dirt;
 
  dbms_output.new_line;
  dbms_output.put_line('Main transaction:');
  for i in c loop
    dbms_output.put_line(i.a);
  end loop;
 
  rollback;
end;
/
 
Expected dirty reads (cursor opened in main transaction):
Committed rec
Uncommitted rec
 
Unexpected dirty reads (cursor opened in autonomous DECLARE):
Committed rec
Uncommitted rec
Autonomous init
 
RC reads Autonomous transacton RC reads:
Committed rec
 
Main transaction:
Committed rec
Uncommitted rec
Autonomous init
 
PL/SQL procedure successfully completed

select * from ane_tdirt;
 
A
--------------------
Committed rec

drop table ane_tdirt purge;
 
Table dropped
 
SQL> 


...
Рейтинг: 0 / 0
Функция length
    #39355537
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
'Unexpected dirty reads (cursor opened in autonomous DECLARE):'

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


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