Получить метаданные внешних ключей табличного объекта (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 |
Примечание
Если клиентское приложение выполняется от имени пользователя БД, который не имеет дискретного или мандатного доступа к некоторым объектам БД, то результат не будет содержать инфорацию об этих объектах.
Особенности реализации метода:
-
если параметры обоих табличных объектов переданы и если в таблице с внешними ключами имеются ссылки на таблицы с первичными ключами, то метод возвращает внешние ключи;
-
если указаны параметры только таблицы с первичным ключом, то метод возвращает набор первичных ключей указанной таблицы и все внешние ключи, которые ссылаются на нее;
-
если указаны параметры только таблицы с внешним ключом, то метод возвращает набор внешних ключей указанной таблицы и все первичные ключи, на которые ссылаются внешние ключи.
Запись метаданных о внешних ключах табличного объекта БД представлена в виде массива из следующих элементов:
Имя элемента | Значение | |
---|---|---|
PKTABLE_CAT
| Пустая строка | |
PKTABLE_SCHEM
| Имя схемы, содержащей таблицу с первичным (уникальным) ключом | |
PKTABLE_NAME
| Имя таблицы с первичным (уникальным) ключом | |
PKCOLUMN_NAME
| Имя столбца, являющегося первичным (уникальным) ключом | |
FKTABLE_CAT
| Пустая строка | |
FKTABLE_SCHEM
| Имя схемы, содержащей таблицу с внешним ключом | |
FKTABLE_NAME
| Имя таблицы с внешним ключом. | |
FKCOLUMN_NAME
| Имя столбца, являющегося внешним ключом | |
KEY_SEQ
| Значение 1 | |
UPDATE_RULE
| Действие, выполняемое со значением внешнего ключа, при обновлении первичного ключа, на который ссылается внешний ключ. Возможные действия:
| |
DELETE_RULE
| Действие, выполняемое со значением внешнего ключа, при удалении первичного ключа, на который ссылается внешний ключ. Возможные действия аналогичны действиям, описанным в UPDATE_RULE | |
FK_NAME
| Имя внешнего ключа | |
PK_NAME
| Имя первичного (уникального) ключа | |
DEFERRABILITY
| Undef |
Пример
my $drh = DBI- >install_driver('Linter'); my $dbh = $drh- >connect("", "SYSTEM", "MANAGER8") 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();