powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Синтаксис хинтов, а именно необходимость пробела после +
25 сообщений из 25, страница 1 из 1
Синтаксис хинтов, а именно необходимость пробела после +
    #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
Синтаксис хинтов, а именно необходимость пробела после +
    #39938677
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
feagor,

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

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

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

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

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

.....
stax
...
Рейтинг: 0 / 0
Синтаксис хинтов, а именно необходимость пробела после +
    #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
Синтаксис хинтов, а именно необходимость пробела после +
    #39938776
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
feagor
SQL*Plus,

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

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

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

я не пью из грязных луж(8), Я всю жизнь пил из чистых луж(10g+) и ни разу еще не болел из-за этого. Покажите мне чистую лужу, выпив из которой я заболею.
...
Рейтинг: 0 / 0
Синтаксис хинтов, а именно необходимость пробела после +
    #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
Синтаксис хинтов, а именно необходимость пробела после +
    #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
Синтаксис хинтов, а именно необходимость пробела после +
    #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
Синтаксис хинтов, а именно необходимость пробела после +
    #39938816
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Синтаксис хинтов, а именно необходимость пробела после +
    #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
Синтаксис хинтов, а именно необходимость пробела после +
    #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
Синтаксис хинтов, а именно необходимость пробела после +
    #39938858
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL*Plus,

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

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

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

я все же считаю, что лучше понимать для чего этот пробел ставишь, чем слепо его ставить, потому что "опытные ораклоиды"
...
Рейтинг: 0 / 0
Синтаксис хинтов, а именно необходимость пробела после +
    #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
Синтаксис хинтов, а именно необходимость пробела после +
    #39938870
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
feagor
Спасибо за ссылку в доку, это получается только в 20 появилось?

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

Если интересно, посмотрите и нам расскажите, что в какой версии было по этой теме написано.
...
Рейтинг: 0 / 0
Синтаксис хинтов, а именно необходимость пробела после +
    #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
Синтаксис хинтов, а именно необходимость пробела после +
    #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
Синтаксис хинтов, а именно необходимость пробела после +
    #39938876
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
feagor,

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


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