Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Синтаксис хинтов, а именно необходимость пробела после + / 25 сообщений из 25, страница 1 из 1
18.03.2020, 12:47
    #39938674
feagor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтаксис хинтов, а именно необходимость пробела после +
Добрый день.
Хотелось бы окончательно разобраться в необходимости ставить пробел в хинтах после /*+
В mos(Doc ID 29236.1) черным по белому пишут

Syntax: /*+ HINT HINT ... */

Note: (In PLSQL the space between the '+' and the first letter of the hint is vital as otherwise the hint may be ignored.
So /*+ ALL_ROWS */ is fine but /*+ALL_ROWS */ will cause problems. See Bug:697121

Ссылаясь на баг 8 версии, который судя по описанию бага починили в 9 версии.
Собственно вопрос, для более актуальных версий 11,12,18,19 кто встречал проблемы с работой хинтов из за отсутствия пробела, типа /*+push_pred*/ вместо /+ push_pred*/ и насколько равноправно написание хинтов без пробелов и с ними в текущих реалиях?
В своём опыте всё время писал хинты без пробела и никогда не замечал проблем из за этого
...
Рейтинг: 0 / 0
18.03.2020, 12:52
    #39938677
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтаксис хинтов, а именно необходимость пробела после +
feagor,

Если сломался пробел, можно вводить кодом Alt+32 на дополнительной цифровой клавиатуре.
...
Рейтинг: 0 / 0
18.03.2020, 12:53
    #39938678
feagor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтаксис хинтов, а именно необходимость пробела после +
-2-,

спасибо, ценный опыт
...
Рейтинг: 0 / 0
18.03.2020, 13:12
    #39938697
SQL*Plus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтаксис хинтов, а именно необходимость пробела после +
feagor
В своём опыте всё время писал хинты без пробела и никогда не замечал проблем из за этого
Это не означает, что проблем не было...

Пишите пробел в хинтах после "+" и не думайте о возможных проблемах из-за отсутствия этого пробела.
...
Рейтинг: 0 / 0
18.03.2020, 14:33
    #39938744
feagor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтаксис хинтов, а именно необходимость пробела после +
SQL*Plus,

Хотелось бы всё же найти пример, на котором хинт без пробела реально ломается
...
Рейтинг: 0 / 0
18.03.2020, 14:39
    #39938752
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтаксис хинтов, а именно необходимость пробела после +
feagor
Хотелось бы всё же найти пример, на котором хинт без пробела реально ломается
Ставишь 8.0, пишешь в plsql запрос с хинтом, выполняешь, смотришь в v$sql, что из запроса сделал plsql-компилятор.
...
Рейтинг: 0 / 0
18.03.2020, 14:40
    #39938753
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтаксис хинтов, а именно необходимость пробела после +
feagor,

насколько помню проблема была в строчном --+

.....
stax
...
Рейтинг: 0 / 0
18.03.2020, 14:55
    #39938764
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтаксис хинтов, а именно необходимость пробела после +
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
SQL> var c refcursor
SQL> exec open :c for select /* + first_rows */ * from dual feagor1;

PL/SQL procedure successfully completed.

SQL> exec open :c for select /*+ first_rows */ * from dual feagor2;

PL/SQL procedure successfully completed.

SQL> select sql_text from v$sql where sql_text like '%FEAGOR_';

SQL_TEXT
--------------------------------------------------------------------------------
SELECT /*+ first_rows  */*   FROM DUAL FEAGOR2
SELECT *   FROM DUAL FEAGOR1

2 rows selected.

SQL> disc
Disconnected from Oracle7 Server Release 7.3.4.0.0 - Production
With the distributed, replication and parallel query options
PL/SQL Release 2.3.4.0.0 - Production

...
Рейтинг: 0 / 0
18.03.2020, 15:23
    #39938776
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтаксис хинтов, а именно необходимость пробела после +
feagor
SQL*Plus,

Хотелось бы всё же найти пример, на котором хинт без пробела реально ломается
вы хотите странного.
Нарочито вычурная аналогия: Я всю жизнь пил из луж и ни разу еще не болел из-за этого. Покажите мне лужу, выпив из которой я заболею.
...
Рейтинг: 0 / 0
18.03.2020, 15:33
    #39938781
feagor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтаксис хинтов, а именно необходимость пробела после +
Elic,

речь не про /* + HINT*/ vs /*+ HINT*/, а про /*+HINT*/ vs /*+ HINT*/

xtender,
аналогия хорошая, но тут ближе

я не пью из грязных луж(8), Я всю жизнь пил из чистых луж(10g+) и ни разу еще не болел из-за этого. Покажите мне чистую лужу, выпив из которой я заболею.
...
Рейтинг: 0 / 0
18.03.2020, 15:45
    #39938787
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтаксис хинтов, а именно необходимость пробела после +
feagor
речь не про /* + HINT*/ vs /*+ HINT*/, а про /*+HINT*/ vs /*+ HINT*/
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SQL> exec open :c for select /*+first_rows */ * from dual feagor3;

PL/SQL procedure successfully completed.

SQL> select sql_text from v$sql where sql_text like '%FEAGOR_';

SQL_TEXT
--------------------------------------------------------------------------------
SELECT /*+ irst_rows  */*   FROM DUAL FEAGOR3
SELECT /*+ first_rows  */*   FROM DUAL FEAGOR2
SELECT *   FROM DUAL FEAGOR1

...
Рейтинг: 0 / 0
18.03.2020, 15:49
    #39938790
feagor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтаксис хинтов, а именно необходимость пробела после +
Elic,

feagorдля более актуальных версий 11,12,18,19
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 

declare c sys_refcursor;
begin
open c for select /*+first_rows */ * from dual feagor3;
end;
/

PL/SQL procedure successfully completed

select sql_text from v$sql where sql_text like '%FEAGOR_';

SQL_TEXT
--------------------------------------------------------------------------------
SELECT /*+first_rows */ * FROM DUAL FEAGOR3

SQL> 
...
Рейтинг: 0 / 0
18.03.2020, 15:59
    #39938796
Кобанчег
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтаксис хинтов, а именно необходимость пробела после +
feagor,

Сегодня ты не поставишь пробел, а завтра захочешь впендюрить левую букву перед хинтом!
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
SQL> select --+ rewrite_or_error
  2  * from t;
* from t
       *
ERROR at line 2:
ORA-30393: a query block in the statement did not rewrite


SQL>
SQL> select --+a rewrite_or_error
  2  * from t;

        ID
----------
         1


По мотивам 20864930 .

Странно само желаение писать криво если в доке четко указан формат хинта.

Вообще отсутствие пробела в хинте это все равно что ставить пробелы перед запятыми в тексте:
вроде и понятно, но выглядит омерзительно.
...
Рейтинг: 0 / 0
18.03.2020, 16:42
    #39938816
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтаксис хинтов, а именно необходимость пробела после +
...
Рейтинг: 0 / 0
18.03.2020, 17:46
    #39938847
SQL*Plus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтаксис хинтов, а именно необходимость пробела после +
Кобанчег
Странно само желание писать криво если в доке четко указан формат хинта.
См. ниже картинку, что написано в доке по Oracle Database 20c
https://docs.oracle.com/en/database/oracle/oracle-database/20/sqlrf/Comments.html#GUID-D316D545-89E2-4D54-977F-FC97815CD62E

Кобанчег
... ставить пробелы перед запятыми в тексте:
вроде и понятно, но выглядит омерзительно.
Это правда.

Вот так выглядит ,когда пробел стоит перед запятой.
Так выглядит , когда пробел и перед запятой , и после неё.
А еще противнее,когда вообще не ставят пробелы.
...
Рейтинг: 0 / 0
18.03.2020, 17:53
    #39938851
SQL*Plus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтаксис хинтов, а именно необходимость пробела после +
2.6.3 Hints
https://docs.oracle.com/en/database/oracle/oracle-database/20/sqlrf/Comments.html#GUID-D316D545-89E2-4D54-977F-FC97815CD62E - hint is one of the hints discussed in this section.
The space between the plus sign and the hint is optional.
If the comment contains multiple hints, then separate the hints by at least one space.
...
Рейтинг: 0 / 0
18.03.2020, 18:11
    #39938858
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтаксис хинтов, а именно необходимость пробела после +
SQL*Plus,

SQL Reference не является авторитетом для PL/SQL.
...
Рейтинг: 0 / 0
18.03.2020, 18:20
    #39938861
feagor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтаксис хинтов, а именно необходимость пробела после +
Эстетический вопрос использования пробела это больше вопрос вкуса.
Я привык не ставить, и мне нравится.
Спасибо за ссылку в доку, это получается только в 20 появилось?

Резюмируя, разницы между /*+HINT*/ vs /*+ HINT*/ в плане функционала никакой нет и это чисто вопрос вкуса.
Всем большое спасибо
...
Рейтинг: 0 / 0
18.03.2020, 18:26
    #39938864
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтаксис хинтов, а именно необходимость пробела после +
feagor
Резюмируя

Так скажу: грамотные люди опознают друг друга в кофейне, услышав "кофе" в мужском роде.
А опытные ораклоиды, повидавшие многие версии сервера - по пробелу в хинте.
...
Рейтинг: 0 / 0
18.03.2020, 18:31
    #39938867
feagor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтаксис хинтов, а именно необходимость пробела после +
andrey_anonymous,

я все же считаю, что лучше понимать для чего этот пробел ставишь, чем слепо его ставить, потому что "опытные ораклоиды"
...
Рейтинг: 0 / 0
18.03.2020, 18:37
    #39938869
SQL*Plus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтаксис хинтов, а именно необходимость пробела после +
-2-
SQL*Plus,

SQL Reference не является авторитетом для PL/SQL.
Это ваше имхо.

А я считаю, что является, поскольку в документе "Database PL/SQL Language Reference" нет отдельного описания хинтов (есть только про NOCOPY).

Кроме в одном месте явно написано:
Database PL/SQL Language Reference 13.3.1 Tune SQL Statements

The most common cause of slowness in PL/SQL programs is slow SQL statements.
To make SQL statements in a PL/SQL program as efficient as possible:
• Use appropriate indexes.
For details, see Oracle Database Performance Tuning Guide.

• Use query hints to avoid unnecessary full-table scans.
For details, see Oracle Database SQL Language Reference .
...
Рейтинг: 0 / 0
18.03.2020, 18:39
    #39938870
SQL*Plus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтаксис хинтов, а именно необходимость пробела после +
feagor
Спасибо за ссылку в доку, это получается только в 20 появилось?

Не знаю. Не смотрел в других версиях.

Если интересно, посмотрите и нам расскажите, что в какой версии было по этой теме написано.
...
Рейтинг: 0 / 0
18.03.2020, 18:46
    #39938871
SQL*Plus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтаксис хинтов, а именно необходимость пробела после +
feagor
andrey_anonymous,

я все же считаю, что лучше понимать для чего этот пробел ставишь, чем слепо его ставить, потому что "опытные ораклоиды"
Вам уже показали 22101526 , что некоторые программисты Oracle считали,
что текст хинта следует начинать считывать с пятой позиции от начала комментария:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
SQL> exec open :c for select /*+first_rows */ * from dual feagor3;
PL/SQL procedure successfully completed.

SQL> select sql_text from v$sql where sql_text like '%FEAGOR_';

SQL_TEXT
--------------------------------------------------------------------------------
SELECT /*+ irst_rows  */*   FROM DUAL FEAGOR3



Дальше думайте сами, смотрите в зеркало и др.
...
Рейтинг: 0 / 0
18.03.2020, 18:47
    #39938872
feagor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтаксис хинтов, а именно необходимость пробела после +
SQL*Plus,
в 9i
https://docs.oracle.com/cd/B10501_01/server.920/a96540/sql_elements7a.htm#31715
в 10g
https://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements006.htm#i35922
в 11g
https://docs.oracle.com/cd/E11882_01/server.112/e41084/sql_elements006.htm#SQLRF00219
в 12c тоже есть
https://docs.oracle.com/database/121/SQLRF/sql_elements006.htm#SQLRF00219
hint is one of the hints discussed in this section. The space between the plus sign and the hint is optional. If the comment contains multiple hints, then separate the hints by at least one space.
...
Рейтинг: 0 / 0
18.03.2020, 18:52
    #39938876
SQL*Plus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синтаксис хинтов, а именно необходимость пробела после +
feagor,

ОК.
Спасибо за проведенное исследование! :-)
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Синтаксис хинтов, а именно необходимость пробела после + / 25 сообщений из 25, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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