Ora-00942: таблица или представление не существует (работает, когда отдельный sql, но не работает внутри функции oracle)

Внешние пользователи

Один класс пользователей Oracle, которые могут облегчить путь доступа к базе
данных, – это внешние (external) пользователи. Но для этого нужно знать их имена
в операционной системе и пароли. Фактически, этих пользователей можно обнаружить
только в таблице USER$ схемы SYS или в представлении DBA_USERS:

   USERNAME PASSWORD
   OPS$PXF EXTERNAL

Если вы нашли внешнего пользователя, вход в базу данных будет очень простым:

Если вы сможете найти внешнюю учетную запись, предназначенную для dba,
то будет даже лучше. В данном случае префикс OPS$ указывает, что пользователь
является внешним (но только если префикс установлен в параметре инициализации
os_auth_prefix). Этот параметр можно проверить в svrmgrl, используя команду
show parameter os_authent_prefix, или в sqlplus следующим образом:

Используя значение этого параметра, можно определить всех внешних пользователей,
запрашивая представление ALL_USERS. Если параметр os_authent_prefix установлен,
то все пользователи, имена которых начинаются с установленного префикса, могут
входить в базу данных из операционной системы без указания пароля, но у них
может быть также определенный пароль для удаленного входа. Если пользователь
создается со строкой “identified externally”, а не с паролем, он может входить
в операционную систему без пароля, (однако ему не разрешены удаленные соединения).

4.4 История паролей

Если вы хотите, чтобы пользователь не использовал ранее использованный пароль при смене пароля. Затем Oracle сохранит информацию об изменении пароля в словаре данных, чтобы, когда пользователь меняет пароль, Oracle будет сравнивать старый и новый пароли, а при обнаружении нового и старого Если пароль тот же, пользователю предлагается повторно ввести пароль.

Синтаксис в основном такой же, как указано выше:

такие как:

создать профиль myHistory limit password_life_time 10 password_grace_time 2 password_reuser_time 10; Укажите время повторного использования пароля, то есть его можно будет повторно использовать через 10 дней.

Назначение ролей программам PL/SQL (Oracle Database 12c)

До выхода программа с правами создателя (определенная с или) всегда выполнялась с привилегиями стороны, определившей программу. Программа с правами вызывающего (с ) всегда выполнялась с привилегиями стороны, вызвавшей программу.

Из существования двух разных режимов следовало, что любая программа, предназначенная для выполнения всеми пользователями, должна была определяться с правами создателя. Затем она выполнялась со всеми привилегиями создателя, что могло оказаться неоптимальным с точки зрения безопасности.

В появилась возможность назначения ролей пакетам и процедурам /функциям уровня схемы. Привилегии программ на базе ролей позволяют разработчику оптимизировать привилегии, доступные для стороны, вызвавшей программу. Теперь программу можно определить с правами вызывающего, а затем дополнить привилегии вызывающего более конкретными и ограниченными привилегиями, предоставляемыми ролью. Следующий пример показывает, как назначать роли программам и как они влияют на выполнение программ. Предположим, схема содержит таблицы и , которые определяются и заполняются данными:

Схема содержит только таблицу :

Схема также содержит процедуру для удаления всех работников заданного отдела при условии, что штат отдела не «заморожен». Сначала я определю эту процедуру с правами создателя:

Схеме разрешается выполнение этой процедуры:

Когда выполняет процедуру так, как показано ниже, удаляются три строки — но из таблицы , поскольку процедура объявлена с правами создателя:

Процедуру нужно изменить так, чтобы строки удалялись из таблицы схемы , а не . Именно это и делает модель прав создателя. Но если привести секцию процедуры к виду:

и снова выполнить процедуру, будет получен следующий результат:

Проблема в том, что теперь использует привилегии для разрешения ссылок на две таблицы: и . Однако не имеет привилегий для таблицы схемы , поэтому выдает ошибку . До выхода администратор базы данных должен был предоставить необходимые привилегии .  Теперь вместо этого можно выполнить следующие действия:

  1. В схеме с необходимыми привилегиями создайте роль и предоставьте ее :

      2. Подключитесь к hr, предоставьте нужные привилегии роли и назначьте ее про­цедуре:

Теперь при выполнении следующего фрагмента из схемы строки будут удаляться правильно:

Роли, назначаемые программам, не влияют на компиляцию. Они влияют на проверку привилегий команд , выдаваемых программой во время выполнения. Процедура или функция выполняется с привилегиями обеих своих ролей, а также других активных ролей. Эта возможность в основном используется для программ с правами вызывающего, как в приведенном примере. Скорее всего, для программ с правами создателя возможность назначения ролей будет рассматриваться при выполнении динамического , поскольку привилегии таких динамических команд проверяются во время выполнения.

BEQUEATH CURRENT_USER для представлений (Oracle Database 12c)

До выхода версии функции, выполняемые представлениями, всегда выполнялись с привилегиями владельца представления, а не владельца функции. Таким образом, если функция определялась с моделью прав вызывающего, ее поведение могло сильно отличаться от ожидаемого.

В версии 12c добавилась секция для представлений, которая позволяет определить представление, адаптирующееся к задействованным в нем функциям с правами вызывающего.

Рассмотрим пример использования этой возможности (весь код, приведенный в этом разделе, находится в файле на сайте книги). Я создаю таблицу и функцию в схеме :

Обратите внимание на вызовы двух новых функций:  и. Затем я создаю представление, указывая права вызывающего в , и обеспечиваю возможность обращения с запросом к этому представлению для :

Затем я создаю представление, указывая права вызывающего в , и обеспечиваю возможность обращения с запросом к этому представлению для :

В схеме создается еще одна таблица , которая заполняется другими данными:

Наконец, я выполняю выборку всех строк представления. Результат запроса:

Как видите, данные, возвращенные представлением, взяты из таблицы (идентифи­катор отдела 100), но сводная информация, возвращаемая вызовом функции, отражает содержимое таблицы scott, а функции * возвращают информацию .

Учтите, что конструкция не превращает само представление в объект с правами вызывающего. Разрешение имен в представлении по-прежнему осуществляется с использованием схемы владельца представления, а привилегии проверяются с использованием привилегий владельца представления.

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

Системные права

Всего доступно около двух сотен системных прав. Большинство из них влияет на действия затрагивающие словать данных (такие как создание таблиц или пользователей). Остальные влияют на экземпляр или БД (создание табличны пространств, изменение параметров БД и создание сессий). Наиболее часто используемые права это

  • CREATESESSION – права на подключения. Без этих прав вы даже не сможете подключиться к БД
  • RESTRICTEDSESSION – Если БД запущена с директивой STARTUPRESTRICT или применялась команда ALTERSYSTEMENABLERESTRICTEDSESSION, то только пользователи с этими правами смогут подключаться к БД
  • ALTERDATABASE – разрешает выполнять команды влияющие на физические структуры
  • ALTERSYSTEM – разрешает изменять параметры экземпляра и структуры памяти
  • CREATETABLESPACE – вместе с ALTERTABLESPACE и DROPTABLESPACE позволяют пользователю управлять табличными пространтсвами
  • CREATETABLE – позволяет gratee создавать таблицы в своей схеме; включает возможность создавать, изменять и удалять таблицы, выполнять команды DML и select и управлять индексами
  • GRANTANYOBJECTPRIVILEGE – позволяет grantee управлять правами объектов которые ему не принаджлежат, но не даёт прав ему самому
  • CREATEANYTABLE – grantee может создавать таблицы которые принадлежат другим аккаунтам
  • DROPANYTABLE – grantee позволяется удалять таблицы которые принадлежат другим аккаунтам
  • INSERTANYTABLE, UPDATEANYTABLE, DELETEANYTABLE – даёт grantee право выполнять DML команды над объектами которые ему не принадлежат
  • SELECTANYTABLE – Даёт право grantee выполнять SELECT к любмы таблицам.

Синтаксис для назначения прав

GRANT privilege TO username;

После создания аккаунта, обычно назначаются права часто используемые пользователями кто вовлечён в разработку приложения

grant create session, alter session,

create table, create view, create synonym, create cluster,

create database link, create sequence,

create trigger, create type, create procedure, create operator

Эти права позволяют подключаться и настраивать сессию, создавать объекты и хранить PL/SQL объекты. Объекты могут быть созданы только в схеме аккаунта; нет прав к схемам других аккаунтов. Также создание объектов ограничивается лмимитами табличных пространств.

Другим вариантом назначения прав будет назначение grantee доступа для переназначения прав другим аккаунтам. Например

grant create table to scott with admin option;

grant create table to jon;

Выполнение этих команд позволит SCOTT создавать таблицы в совей схеме, и выполнять команду GRANT. SCOTT даёт права пользователю JON создавать таблицы – но JON сможет создавать таблицы только в схеме JON. На рисунке 6-5 показаны права пользователя в Database Control; ту же информацию можно получить выполнив запрос к представлению DBA_SYS_PRIVS.

Если системные разрешения были отозваны, все действия которые вы выполнили пока у вас были права остаются в силе. Если у вас были права с ADMIN OPTION то у всех пользователей которым вы назначили права – права остаются, несмотря на то что у вас права отозвали. Не остаётся записей кто именно назначил системные привилегии, таким образом невозможно забрать права CASCADE как показано на рисунке 6-6

Revocation of a system privilege will not cascade (unlike

revocation of an object privilege).

Права ANY дают доступ ко всем объектам в БД. Таким образом

grant select any table to scott

позволить аккаунту SCOTT выполнять запрос SELECT ко всем таблицам во всех схемах БД. Такое назначение прав считается дурным тоном и ANY права назначаются только DBA.

In fact, ANY is not as dangerous now as with earlier releases. It no longer

includes tables in the SYS schema, so the data dictionary is still protected. But

ANY should still be used with extreme caution, as it removes all protection

from user tables.

Исправьте ошибку ora-00942

Прежде всего, небольшой отказ от ответственности. Я не администратор баз данных, я администратор Windows, а также специалист по аппаратному и настольному оборудованию. Я знаю, как запустить SQL, но не до какой-то степени опыта и, конечно, не до уровня, который может устранять проблемы. Я должен был попросить моего друга Oracle DBA о помощи, поэтому, пока я писал эту часть, все умные биты принадлежали ему.

Этот список из трех причин ошибки ora-00942 не является исчерпывающим. Есть, очевидно, другие случайные причины этого, но эти три, по-видимому, наиболее распространены.

Недостаточно прав пользователя

Одной из основных причин ошибки ora-00942 является то, что у пользователя недостаточно прав для доступа к рассматриваемой таблице. Вы можете проверить это, выполнив два запроса.

-- перечислить системные привилегии для пользователя или роли
SELECT * FROM dba_sys_privs
ГДЕ получатель гранта (user_role, 'PUBLIC');

— список привилегий объекта для пользователя или роли

SELECT грантополучатель, владелец || '.' || объект table_name, привилегия, грантируемое
FROM dba_tab_privs
ГДЕ получатель гранта (user_role)
ORDER BY грантополучатель, владелец || '.' || table_name, привилегия;

Эти двое скажут вам, имеет ли данный пользователь правильные привилегии для запуска команды. Если пользователь имеет правильные привилегии, переходите к следующему. Если пользователь не имеет правильных привилегий, предоставьте их им или попросите администратора БД сделать это.

Ошибка ora-00942 также может возникнуть, если пользователь используемой схемы имеет привилегии INSERT, но не привилегии SELECT. Опять же, проверьте уровень привилегий и добавьте SELECT в список или попросите администратора БД сделать это. Очевидно, что каждой схеме должна быть предоставлена ​​определенная привилегия SELECT, в противном случае вы все равно увидите ошибку ora-00942.

Таблица или представление на самом деле не существуют

Причиной ошибки ora-00942 может быть неправильный синтаксис запроса или отсутствие таблицы. Хотя это может показаться логичным для начала, я уверен, что привилегия пользователя является причиной ошибки номер один. Таблица, которой там нет или используется неверный синтаксис таблицы, занимает второе место.

Чтобы проверить, существует ли таблица, сначала проверьте синтаксис запроса. Если синтаксис правильный, запустите этот запрос.

ВЫБЕРИТЕ владельца, имя_объекта, тип_объекта
ОТ всех_объектов
WHERE object_type IN ('TABLE', 'VIEW')
AND имя_объекта = ‘YOUR_TABLE_NAME ';

В последней строке вставьте фактическое имя таблицы, где вы видите «YOUR_TABLE_NAME». Это должно точно сказать вам, существует ли таблица, к которой вы пытаетесь обратиться, или нет. Если он возвращается без таблицы, запрашиваемая вами таблица не существует в схеме или базе данных.

Если в используемой вами системе есть меню «Таблицы», вы можете вручную проверить таблицу, если хотите, но вышеуказанный запрос выполняет свою работу.

Таблица или представление находятся в другой схеме

Если у пользователя есть права, и таблица существует, но вы все еще видите ошибку ora-00942, скорее всего, это связано со схемой. Если вы управляете несколькими схемами, легко выполнить запрос к схеме, которая не принадлежит вам. Когда вы заняты и против этого, это простая ошибка, чтобы сделать.

Проверьте схему вручную, если можно или добавьте имя схемы в строке ОТ вашего запроса. Если у вас нет правильных привилегий для новой схемы, вы снова увидите ошибку ora-00942. Вернитесь к первому исправлению привилегий пользователя и проверьте соответствующую схему или попросите своего администратора базы данных сделать это за вас.

Как упомянуто выше, я проконсультировался с моим приятелем по DBA Oracle для этой работы, так что вся заслуга ему в тяжелой работе. Если вы обнаружите здесь какие-либо ошибки или упущения, они одни. Дайте мне знать в разделе комментариев, если я что-то пропустил или ошибся, и я исправлю это.

Если вам известен какой-либо другой способ исправить ошибку ora-00942, сообщите нам об этом ниже!

Системные права

Всего доступно около двух сотен системных прав. Большинство из них влияет на действия затрагивающие словать данных (такие как создание таблиц или пользователей). Остальные влияют на экземпляр или БД (создание табличны пространств, изменение параметров БД и создание сессий). Наиболее часто используемые права это

  • CREATESESSION – права на подключения. Без этих прав вы даже не сможете подключиться к БД
  • RESTRICTEDSESSION – Если БД запущена с директивой STARTUPRESTRICT или применялась команда ALTERSYSTEMENABLERESTRICTEDSESSION, то только пользователи с этими правами смогут подключаться к БД
  • ALTERDATABASE – разрешает выполнять команды влияющие на физические структуры
  • ALTERSYSTEM – разрешает изменять параметры экземпляра и структуры памяти
  • CREATETABLESPACE – вместе с ALTERTABLESPACE и DROPTABLESPACE позволяют пользователю управлять табличными пространтсвами
  • CREATETABLE – позволяет gratee создавать таблицы в своей схеме; включает возможность создавать, изменять и удалять таблицы, выполнять команды DML и select и управлять индексами
  • GRANTANYOBJECTPRIVILEGE – позволяет grantee управлять правами объектов которые ему не принаджлежат, но не даёт прав ему самому
  • CREATEANYTABLE – grantee может создавать таблицы которые принадлежат другим аккаунтам
  • DROPANYTABLE – grantee позволяется удалять таблицы которые принадлежат другим аккаунтам
  • INSERTANYTABLE, UPDATEANYTABLE, DELETEANYTABLE – даёт grantee право выполнять DML команды над объектами которые ему не принадлежат
  • SELECTANYTABLE – Даёт право grantee выполнять SELECT к любмы таблицам.

Синтаксис для назначения прав

GRANT privilege TO username;

После создания аккаунта, обычно назначаются права часто используемые пользователями кто вовлечён в разработку приложения

grant create session, alter session,

create table, create view, create synonym, create cluster,

create database link, create sequence,

create trigger, create type, create procedure, create operator

Эти права позволяют подключаться и настраивать сессию, создавать объекты и хранить PL/SQL объекты. Объекты могут быть созданы только в схеме аккаунта; нет прав к схемам других аккаунтов. Также создание объектов ограничивается лмимитами табличных пространств.

Другим вариантом назначения прав будет назначение grantee доступа для переназначения прав другим аккаунтам. Например

grant create table to scott with admin option;

grant create table to jon;

Выполнение этих команд позволит SCOTT создавать таблицы в совей схеме, и выполнять команду GRANT. SCOTT даёт права пользователю JON создавать таблицы – но JON сможет создавать таблицы только в схеме JON. На рисунке 6-5 показаны права пользователя в Database Control; ту же информацию можно получить выполнив запрос к представлению DBA_SYS_PRIVS.

Если системные разрешения были отозваны, все действия которые вы выполнили пока у вас были права остаются в силе. Если у вас были права с ADMIN OPTION то у всех пользователей которым вы назначили права – права остаются, несмотря на то что у вас права отозвали. Не остаётся записей кто именно назначил системные привилегии, таким образом невозможно забрать права CASCADE как показано на рисунке 6-6

Revocation of a system privilege will not cascade (unlike

revocation of an object privilege).

Права ANY дают доступ ко всем объектам в БД. Таким образом

grant select any table to scott

позволить аккаунту SCOTT выполнять запрос SELECT ко всем таблицам во всех схемах БД. Такое назначение прав считается дурным тоном и ANY права назначаются только DBA.

In fact, ANY is not as dangerous now as with earlier releases. It no longer

includes tables in the SYS schema, so the data dictionary is still protected. But

ANY should still be used with extreme caution, as it removes all protection

from user tables.

Пример

Рассмотрим некоторые примеры отмены привилегий на таблицу в MySQL.

Например, если вы хотите отменить привилегии DELETE и UPDATE в таблице contacts пользователю с именем adam, вы должны запустить следующий оператор REVOKE:

MySQL

REVOKE DELETE, UPDATE ON contacts FROM ‘adam’@’localhost’;

1 REVOKEDELETE,UPDATEONcontactsFROM’adam’@’localhost’;

Если вы хотите отменить все разрешения (кроме GRANT OPTION) в таблице для пользователя с именем adam, вы можете использовать ключевое слово ALL следующим образом:

MySQL

REVOKE ALL ON contacts FROM ‘adam’@’localhost’;

1 REVOKEALLONcontactsFROM’adam’@’localhost’;

Если вы предоставляли привилегии SELECT для * (т.е. всех пользователей) в таблице contacts, и вы хотели бы отменить эти привилегии, вы можете запустить следующий оператор REVOKE:

MySQL

REVOKE SELECT ON contacts FROM ‘*’@’localhost’;

1 REVOKESELECTONcontactsFROM’*’@’localhost’;

Advanced Script to Find All Privileges

While the above methods will work for basic system configurations, things start to become messy in Oracle when many roles exist which are in turn granting role privileges to other roles, and so on down the rabbit hole. Since the and privilege views only display with directly assigned access, often privileges that are inhereted through other roles will not be readily shown.

To resolve this, it is advisable to use an advanced script such as the trusted work of Pete Finnigan and his script. You may also opt for a modified version by David Arthur, .

In either case, the purpose of these scripts is to allow you to recursively locate all privileges granted to a particular user. When the script locates a for the user, it recursively searches for other roles and privileges granted to that role, repeating the process all the way down the chain. The results of the script can be output to the screen or to a file as desired.

More information on these scripts and their usage can be found at petefinnigan.com.

Все, что нужно – это иметь учетную запись DBA

Целью взламывания базы данных Oracle является получение учетной записи dba,
любой учетной записи dba. Действительно, для неограниченного доступа
к базе данных Oracle вам не нужна учетная запись суперпользователя Oracle SYS.
Если вам удастся стать пользователем dba , то можно входить в РСУБД Oracle под
именем любого пользователя по вашему желанию, включая пользователя SYS. К сожалению,
это может делать только dba, так как при этом используется недокументированная
опция оператора alter user, которая позволяет изменить пароль пользователя на
известный хешированный пароль. Командный файл su.sql, показанный ниже, можно
загрузить из www.pentest-limited.com.
Командный файл написан для Unix, для Windows NT нужно в строке, которая удаляет
временный файл, вставить DEL.

Пользователь, под именем которого вы соединились, не обязательно должен быть
dba, но имейте в виду, что под этим именем вы с помощью данного командного
файла не сможете вновь соединиться как dba. Если кто-то хочет украсть
данные из вашей базы данных, dba может и не потребоваться. Dba
может помочь стать владельцем схемы, но вам даже не нужно быть владельцем схемы
для несанкционированного просмотра данных, так что берегитесь.

Оператор WHERE

Следующий ниже фрагмент кода содержит универсальную синтаксическую кон­струкцию для запроса с оператором :

Оператор является необязательной частью запроса . Для указания условий можно использовать операторы или . Оператор также может использоваться с запросом и , который мы обсудим в ближайшее вре­мя в последующей статье.

Равно и не равно

Оператор равенства () проверяет, равны ли значения двух полей. Если они со­впадают, то условие становится истинным, и оператор извлекает значение для дальнейшей обработки. Если они не совпадают, то условие должно содержать опе­ратор неравенства (). Оно будет извлекать данные на основе условия, которое не совпадает.

Например, следующий ниже запрос используется для получения всех записей с городом, соответствующим значению New York:

Больше и меньше

Оператор больше, чем () проверяет, больше ли значение левого поля, чем зна­чение правого поля. Если да, то условие становится истинным. Оператор мень­ше, чем () проверяет, меньше ли значение левого поля, чем значение право­го поля. Мы также можем использовать операторы / и оператор равенства вместе.

Например, следующий ниже запрос используется для получения всех записей с количеством попыток входа в систему больше, чем 2:

LIKE

Оператор предоставляет простой способ поиска записей в столбце с различ­ными шаблонами. В запросе можно использовать подстановочные символы для построения различных шаблонов. В основном используется два вида подстано­вочных символов. Давайте рассмотрим каждый из них на примере.

(процент): используйте этот подстановочный символ для поиска ноль или более любых символов. Предположим, что мы хотим отыскать пользовате­лей, чье имя начинается с «a». Тогда мы можем применить этот подстано­вочный символ, как показано в приведенном ниже запросе.
В случае если мы хотим найти пользователей, чье имя начинается с «a» и за­канчивается на «s», то запрос с подстановочным символом % будет таким:

(подчеркивание): используйте этот подстановочный символ там, где нуж­но отыскать записи с шаблоном, где в том месте, где мы указали подчерки­вание (), может иметься любой символ. Предположим, мы хотим отыскать пользователей, чье имя заканчивается на dmin, и мы не уверены в первом символе. Следовательно, приведенный ниже запрос будет искать результа­ты, где первый символ имени пользователя может быть любым, но он дол­жен заканчиваться на dmin

Важно помнить, что он будет учитывать ровно один символ для одного под­черкивания. Следовательно, в этом случае пользователь с именем пользо­вателя как «aadmin» не будет рассматриваться, потому что в запросе указан всего один подстановочный символ с подчеркиванием.

INNOT IN

Оператор используется для сравнения нескольких значений в операторе . Например, следующий ниже запрос используется для поиска всех пользователей, имеющих город new york или chicago:

Оператор работает наоборот, например чтобы найти всех пользователей, у которых нет ни города new york, ни города chicago, используется:

BETWEEN

Оператор может использоваться в том случае, когда мы хотим получить записи, которые входят в определенный диапазон. Этот диапазон может быть лю­бым, таким как текст, даты или цифры. Предположим, мы хотим отыскать поль­зователей, дата создания записи о которых находится между 1 июля и 16 июля 2017 года. Тогда приведенный ниже запрос с предложением может нам помочь.

Подобным образом мы можем также задавать диапазон в числах для поиска пользователей, которые принадлежат к этому конкретному диапазону. Например, если мы хотим получить студентов, чьи оценки находятся в диапазоне от 70 до 80, то оператор может быть применен для определения диапазона.

Х. Использование UNION трех инструкций SELECT для демонстрации эффекта от использования скобок и ALL

В следующих примерах предложение используется для комбинирования результатов из трех таблиц, содержащих по 5 одинаковых строк данных. В первом примере используется предложение , в результате чего выдаются все 15 строк. Во втором примере предложение используется без ключевого слова , что позволяет удалить повторяющиеся строки из комбинированного результата выполнения трех инструкций и вывести только 5 строк.

В третьем примере с первым предложением используется ключевое слово , а во втором предложении вместо ключевого слова используются скобки. Сначала выполняется второе предложение , которое заключено в скобки. В результате возвращаются 5 строк, так как параметр не используется и все повторяющиеся строки удаляются. Полученные 5 строк совмещаются с результатами выполнения первой инструкции с помощью ключевого слова . В данном случае повторяющиеся строки двух множеств не удаляются. Окончательный результат состоит из 10 строк.

Предложение WHERE

После служебного слова указываются условия выбора строк, помещаемых в результирующую таблицу. Существуют различные типы условий выбора:

Типы условий выбора:

  • Сравнение значений атрибутов со скалярными выражениями, другими атрибутами или результатами вычисления выражений.
  • Проверка значения на принадлежность множеству.
  • Проверка значения на принадлежность диапазону.
  • Проверка строкового значения на соответствие шаблону.
  • Проверка на наличие null-значения.

Сравнение

В языке SQL используются традиционные операции сравнения ,,,,,.

В качестве условия в предложении можно использовать сложные логические выражения, использующие атрибуты таблиц, константы, скобки, операции , , отрицание .

Пример 5.Определить номера деталей, поставляемых поставщиком с номером 2.

Пример 6.Получить информацию о поставщиках Иванов и Петров.

Строковые значения атрибутов заключаются в апострофы.

Проверка на принадлежность множеству

Операция проверяет, принадлежит ли значение атрибута заданному множеству.

Пример 7.Получить информацию о поставщиках ‘Иванов’ и ‘Петров’.

Пример 8.Получить информацию о деталях с номерами 1 и 2.

Проверка на принадлежность диапазону

Операция определяет минимальную и максимальную границу диапазона, в которое должно попадать значение атрибута. Обе границы считаются принадлежащими диапазону.

Пример 9.Определить номера деталей, с ценой от 10 до 20 рублей.

Пример 10.Вывести наименования поставщиков, начинающихся с букв от ‘К’ по ‘П’.

Сравнение символов

Буква ‘Р’ в условии запроса объясняется тем, что строки сравниваются посимвольно. Для каждого символа при этом определяется код. Для нашего случая справедливо условие: ‘П’<‘Петров’<‘Р’

Проверка строкового значения на соответствие шаблону

Операция используется для поиска подстрок. Значения столбца, указываемого перед служебным словом сравниваются с задаваемым после него шаблоном. Форматы шаблонов различаются в конкретных СУБД.

Для СУБД MS SQL Server:

  • Символ заменяет любое количество любых символов.
  • Символ заменяет один любой символ.
  • ‑ вместо символа строки может быть подставлен один любой символ из множества возможных, указанных в ограничителях.
  • ‑ вместо символа строки может быть подставлен любой из символов кроме символов из множества, указанного в ограничителях.

Множество символов в квадратных скобках можно указывать через запятую, либо в виде диапазона.

Пример 11.Вывести фамилии поставщиков, начинающихся с буквы ‘И’.

Пример 12.Вывести фамилии поставщиков, начинающихся с букв от ‘К’ по ‘П’.

Проверка на наличие null-значения

Операции и используются для сравнения значения атрибута со значением .

Пример 13.Определить наименования деталей, для которых не указана цена.

Пример 14.Определить номера поставщиков, для которых указано наименование.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Все про сервера
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: