Действительно ли эта реализация SQL-92 совместима?

Я полагаю, что используется какая-то Oracle CMS, например, WebCenter Content. Любая CMS, не только Oracle, имеет встроенное управление метаданными. Если нет, то должен быть какой-либо доступ к движку, который генерирует HTML из базы данных или содержимого XML.

Что бы я делал - я бы искал что-то в бэкэнде Oracle CMS, где вы можете управлять метаданными каждого веб-документа. Получив его, добавьте в метаданные каждого веб-документа метатег роботов <meta name="robots" content="noindex, nofollow">. Вот и все.

Если содержимое веб-документов сохраняется в базе данных, найдите таблицу с содержимым веб-документов - если их главы сохранены в базе данных отдельно, - найдите их. Затем выполните запрос INSERT в каждой строке этой таблицы с мета-тегом robots, который я написал выше.

Я могу себе представить, что после запроса INSERT вы будете вынуждены повторно выполнить рендеринг всех веб-документов - сделать это, чтобы появилось новое содержимое заголовка.

Другим способом может быть создание X-Robots-Tag на вашем веб-сервере (если между Tomcat и сетью существует какой-либо Apache или Nginx) и добавление в X-Robots-Tag «noindex, nofollow» -rule. , Поддерживает ли Tomcat (или тому подобное) X-Robots-Tag или подобное - я не знаю.

5
задан Community 23 May 2017 в 11:59
поделиться

5 ответов

Нет, обработка Oracle пустых указателей является особенной, отличается от всех else's и является несовместимой со стандартами ANSI. В защиту Oracle однако, это, вероятно, обосновалось на и посвятило себя этой обработке задолго до того, как был стандарт ANSI, чтобы согласовываться с!

Все это начинает с того, что Oracle снабжает строки счетчиком символов, сопровождаемым строковыми данными. ПУСТОЙ УКАЗАТЕЛЬ представлен счетчиком символов нуля без следующих строковых данных - который является точно тем же как пустой строкой (''). Oracle просто не имеет способа отличить их.

Это приводит к некоторому изворотливому поведению, такому как этот случай конкатенации. Oracle также имеет функциональную ДЛИНУ для возврата длины строки, но это было определено противоположным способом, так, чтобы ДЛИНА ('') возвратила ПУСТОЙ УКАЗАТЕЛЬ не нуль. Так:

LENGTH('abc') + LENGTH('') IS NULL

LENGTH('abc' || '') = 3

который, кажется, мне нарушает основные математические принципы.

Конечно, разработчики Oracle становятся так привыкшими к этому, что многие из нас не могут даже видеть ничто плохого или нечетный об этом - некоторые будут на самом деле утверждать, что остальная часть мира является неправильной и что пустая строка и ПУСТОЙ УКАЗАТЕЛЬ являются тем же самым!

3
ответ дан 14 December 2019 в 09:02
поделиться

@Nezroy: Спасибо за ссылку. Когда я прочитал стандарт, однако, я полагаю, что он указывает, что реализация Oracle на самом деле, неправильная. Разделите 6.13, Общие правила, объект 2a:

     2) If <concatenation> is specified, then let S1 and S2 be the re-
        sult of the <character value expression> and <character factor>,
        respectively.

        Case:

        a) If either S1 or S2 is the null value, then the result of the
          <concatenation> is the null value.
2
ответ дан 14 December 2019 в 09:02
поделиться

Хорошо ОБЪЕДИНИТЕ, явно определяется стандартом SQL-92 для возврата первого ненулевого значения в списке; так по определению внедрение продуктов Oracle этого ведет себя правильно.

Править: Спецификация SQL-92; поиск ОБЪЕДИНЯЕТ для наблюдения его определения.

Тем не менее нет ничего определенного относительно ПУСТОГО УКАЗАТЕЛЯ, который указывает, что любая операция, включающая ПУСТОЙ УКАЗАТЕЛЬ, должна быть ПУСТОЙ. Более точное ограничение - то, что ПУСТОЙ УКАЗАТЕЛЬ не является ни ложью, ни 0, ни равный другому ПУСТОМУ УКАЗАТЕЛЮ (например, Пустой УКАЗАТЕЛЬ ==, ПУСТОЙ УКАЗАТЕЛЬ является ложью, потому что один ПУСТОЙ УКАЗАТЕЛЬ не равен другому ПУСТОМУ УКАЗАТЕЛЮ). Это не означает, однако, что не может все еще быть логически последовательных способов работать с ПУСТЫМ УКАЗАТЕЛЕМ, которые не всегда возвращают ПУСТОЙ УКАЗАТЕЛЬ.

Править: Столь ПУСТОЙ + 1 является ПУСТЫМ таким же образом, что NaN + 1 является все еще NaN; это - эффективно неопределенная операция.

1
ответ дан 14 December 2019 в 09:02
поделиться

На основе части спецификации SQL-92, выделенной DCookie и поведением другого DBS, я сказал бы, что Oracle не ведет себя к стандарту с их оператором конкатенации.

Oracle (из ответа tuinstoel):

SQL>  select 'something'||null from dual;

'SOMETHIN
---------
something

MSSQL:

SELECT 'something'+NULL;

NULL

PostgreSQL:

postgres=# \pset null '(null)'
Null display is "(null)".
postgres=# select 'something'||null as output;
 output
--------
 (null)
(1 row)

MySQL:

mysql> select concat('something',NULL) as output;
+--------+
| output |
+--------+
| NULL   |
+--------+
1 row in set (0.00 sec)
1
ответ дан 14 December 2019 в 09:02
поделиться
SQL>  select 'something'||null from dual;

'SOMETHIN
---------
something

конкатенация строк с пустым указателем не приводит к пустому указателю. Я думаю, что это - нормальное поведение, я привык к нему. Не знайте, что еще сказать.

0
ответ дан 14 December 2019 в 09:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: