Доступные версии документации

Получить метаданные внешних ключей табличного объекта (foreign_key_info)

Назначение
 

Метод foreign_key_info предоставляет информацию о внешних ключах и/или ссылках табличного объекта БД.

Пакет

Package Linter::db

Прототип
$sth = $dbh->foreign_key_info($pk_catalog, $pk_schema, $pk_table,
                              $fk_catalog, $fk_schema, $fk_table);
Параметр Описание
$pk_catalog  Имя каталога табличных объектов с первичным ключом (cм. метод table_info, параметр не принимает шаблон для поиска)
$pk_schema  Имя схемы табличных объектов с первичным ключом (см. метод table_info, параметр не принимает шаблон для поиска)
$pk_table  Имя табличного объекта с первичным ключом (см. метод table_info, параметр не принимает шаблон для поиска)
$fk_catalog  Имя каталога табличных объектов с внешним ключом (см. метод table_info, параметр не принимает шаблон для поиска)
$fk_schema  Имя схемы табличных объектов с внешним ключом (см. метод table_info, параметр не принимает шаблон для поиска)
$fk_table  Имя табличного объекта с внешним ключом (см. метод table_info, параметр не принимает шаблон для поиска)
Возвращаемые значения
Переменная Описание
$sth Объект Statement Handle

Примечание

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

Особенности реализации метода:

  1. если параметры обоих табличных объектов переданы и если в таблице с внешними ключами имеются ссылки на таблицы с первичными ключами, то метод возвращает внешние ключи;

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

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

Запись метаданных о внешних ключах табличного объекта БД представлена в виде массива из следующих элементов:

Имя элемента Значение
PKTABLE_CAT  Пустая строка
PKTABLE_SCHEM  Имя схемы, содержащей таблицу с первичным (уникальным) ключом
PKTABLE_NAME  Имя таблицы с первичным (уникальным) ключом
PKCOLUMN_NAME  Имя столбца, являющегося первичным (уникальным) ключом
FKTABLE_CAT  Пустая строка
FKTABLE_SCHEM  Имя схемы, содержащей таблицу с внешним ключом
FKTABLE_NAME  Имя таблицы с внешним ключом.
FKCOLUMN_NAME  Имя столбца, являющегося внешним ключом
KEY_SEQ  Значение 1
UPDATE_RULE  

Действие, выполняемое со значением внешнего ключа, при обновлении первичного ключа, на который ссылается внешний ключ. Возможные действия:

  • CASCADE: 0 (значение внешнего ключа устанавливается равным новому значению первичного ключа);

  • SET NULL: 2 (значению внешнего ключа присваивается NULL-значение);

  • NO ACTION: 3 (обновление первичного ключа запрещается с выдачей соответствующего кода завершения);

  • SET DEFAULT: 4 (внешнему ключу присваивается значение по умолчанию)

DELETE_RULE  Действие, выполняемое со значением внешнего ключа, при удалении первичного ключа, на который ссылается внешний ключ. Возможные действия аналогичны действиям, описанным в UPDATE_RULE
FK_NAME  Имя внешнего ключа
PK_NAME  Имя первичного (уникального) ключа
DEFERRABILITY  Undef
Пример
my $drh = DBI->install_driver('Linter');
my $dbh = $drh->connect("", "SYSTEM", "MANAGER")
or die "Could not connect to database: " . DBI->errstr;
$dbh->do("create table TEST_TABLE(int_column int, char_column char(16), pk_col int primary key);");
$dbh->do("alter table TEST_TABLE add foreign key (pk_col) references TEST_TABLE(pk_col);");
my $sth = $dbh->foreign_key_info('', 'TEST_TABLE', '', '', '', '');
while (my $data_ref = $sth->fetchrow_hashref())
{
  print($data_ref->{PKTABLE_CAT} . "\n");
  print($data_ref->{PKTABLE_SCHEM} . "\n");
  print($data_ref->{PKTABLE_NAME} . "\n");
  print($data_ref->{PKCOLUMN_NAME} . "\n");
  print($data_ref->{FKTABLE_CAT} . "\n");
  print($data_ref->{FKTABLE_SCHEM} . "\n");
  print($data_ref->{FKTABLE_NAME} . "\n");
  print($data_ref->{FKCOLUMN_NAME} . "\n");
  print($data_ref->{KEY_SEQ} . "\n");
  print($data_ref->{UPDATE_RULE} . "\n");
  print($data_ref->{DELETE_RULE} . "\n");
  print($data_ref->{FK_RULE} . "\n");
  print($data_ref->{PK_RULE} . "\n");
  print($data_ref->{DEFERRABILITY} . "\n");
}
$dbh->do("drop table TEST_TABLE;");
$sth->finish();
$dbh->disconnect();
Заметили ошибку?
Выделите текст и нажмите Ctrl + Enter