Какое ключевое слово для имени базы данных (не сервера) в DB2? - PullRequest
0 голосов
/ 25 февраля 2011

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

select
  current server
from sysibm.sysdummy1

Это не то, что я хочу. Мой поиск в Google дал только это решение.

Я хочу имя базы данных.

В TSQL я мог бы сделать следующее, чтобы получить имя базы данных:

select db_name()

Но как мне получить текущее имя базы данных в DB2?

EDIT : Спасибо за ответы до сих пор. Вы правы, я использовал неправильный термин (что будет базой данных в TSQL) для того, что я хочу вернуть в DB2. Так как я не уверен, как это называется (может быть табличное пространство):

Есть ли команда, которая будет возвращать слово "prodbeans" в следующем?

select
  <command>
from
  prodbeans.BNSMPLS_PROMO x

Ответы [ 3 ]

4 голосов
/ 25 февраля 2011

Как говорит @Leons в своем комментарии, CURRENT SERVER действительно возвращает имя базы данных.

$ db2 connect to sample

   Database Connection Information

 Database server        = DB2/LINUX 9.1.9
 SQL authorization ID   = IDBJORH
 Local database alias   = SAMPLE

$ db2 values current server

1                 
------------------
SAMPLE            

  1 record(s) selected.

Кажется, что ваша путаница возникает из-за того, что "база данных" в SQL-сервере, Sybase идаже MySQL концептуально ближе к табличному пространству или схеме в DB2.

В DB2 табличное пространство - это логический контейнер, содержащий физические объекты базы данных (таблицы, индексы).В табличном пространстве есть контейнеры (физические файлы, которые определяют, куда записываются данные, которые совпадают с группой файлов на сервере SQL).

Схема в DB2 - это логический классификатор объектов (таблиц, индексов)., мнения и т. д.).По умолчанию, когда пользователь подключается к базе данных, в специальном регистре CURRENT SCHEMA по умолчанию используется идентификатор пользователя;однако это можно изменить с помощью инструкции SET CURRENT SCHEMA.CURRENT SCHEMA используется для определения объектов в операторе SQL.

В SQL Server база данных "master" схожа с табличным пространством SYSCATSPACE в базе данных DB2, где хранится системный каталог в схемах SYSCAT (и SYSIBM).Таблицы системного каталога содержат метаданные обо всех объектах в базе данных.

База данных «Tempdb» SQL Server эквивалентна временным табличным пространствам в базе данных DB2.По умолчанию существует табличное пространство с именем TEMPSPACE1, но в одной базе данных может быть несколько временных табличных пространств.

Msdb соответствует табличному пространству SYSTOOLSPACE (и схеме SYSTOOLS).

У DB2 нетэквивалент базы данных модели.(DB2 создаст пустую базу данных при выполнении команды «создать базу данных», но вы не можете настроить шаблон для того, что включено в эту базу данных.

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

1 голос
/ 25 февраля 2011

CURRENT SCHEMA по умолчанию устанавливается на имя пользователя, но может быть изменено на более подходящее значение. Следующее вернет prodbeans:

SET SCHEMA prodbeans;
select
  CURRENT SCHEMA
from
  BNSMPLS_PROMO x;

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

На основании вашего отредактированного вопроса, я думаю, что вы ищете схему.

В справочных целях вы получите табличное пространство таблицы:

SELECT
  tbspace
FROM
  sysibm.systables
WHERE
  name = 'BNSMPLS_PROMO'
  AND creator = 'PRODBEANS';

«имя» - это имя таблицы, а «создатель» - это имя схемы.

1 голос
/ 25 февраля 2011

Существует "специальный регистр" с именем CURRENT SERVER и один с именем CURRENT SCHEMA.

См. Также: как получить текущую схему в DB2, если у меня есть соединение JDBC? .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...