Программирование >>  Преобразование значений null 

1 ... 37 38 39 [ 40 ] 41 42 43 ... 219


таблицы и результат сравнивается с полученным INFORMATION SCHEMA.KEY COLUMN USAGE.COLUMN NAME для той же таблицы. Если COLUMN NAME есть в KEY COLUMN USAGE, но не возвращено в результате выполнения SHOW INDEX, делаем вывод, что столбец непроиндексирован.

SQL Server

Делаем запрос к SYS.TABLES, SYS.FOREIGN KEYS, SYS.COLUMNS, SYS.INDEXES и SYS.INDEX COLUMNS:

1 2 3 4

9 10

11 12 13 14 15 1b 17 18 19 20 21 22 23 24 25 2b 27 28 29

30 31

34 35

select fkeys.table name,

fkeys.constraint name, fkeys.column name, ind cols.index name from (

select

a.ob]ect id, d.column id, a.name table name, b.name constraint name, d.name column name from sys.tables a join

sys.foreign keys b on ( a.name = EMP

and a.object id = b.parent object id

join

sys.foreign key columns c on ( b.object id = c.constraint object id )

join

sys.columns d on ( c.constraint column id = d.column id and a.object id = d.object id

) fkeys left join (

select a.name index name, b.object id, b.column id from sys.indexes a,

sys.index columns b where a.index id = b.index id ) ind cols

on ( fkeys.object id = ind cols.object id and fkeys.column id = ind cols.column id ) where ind cols.index name is null



CNTS

select

count(*)

from

ANT;

select

count(*)

from

BONUS;

select

count(*)

from

DEMO1;

select

count(*)

from

DEMO2;

select

count(*)

from

DEPT;

select

count(*)

from

DUMMY;

select

count(*)

from

EMP;

Обсуждение

Каждый производитель использует собственные механизмы блокировки при изменении строк. В случаях, когда отношение родитель-потомок организовано посредством внешнего ключа, индексация дочер-него(их) столбца(ов) может сократить время или количество блокировок (подробнее смотрите в специальной документации своей СУБД). В остальных случаях дочерняя таблица обычно объединяется с родительской по столбцу внешнего ключа, так что индекс может способствовать повышению производительности и в этом сценарии.

Использование SQL для генерирования SQL

Задача

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

Решение

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

/* генерируем SQL для подсчета всех строк всех таблиц */

select select count(*) from table name; cnts from user tables;



select

count(*)

from

EMP SALES;

select

count(*)

from

EMP SCORE;

select

count(*)

from

PROFESSOR;

select

count(*)

from

select

count(*)

from

select

count(*)

from

select

count(*)

from

select

count(*)

from

TEACH;

select

count(*)

from

TEST;

select

count(*)

from

TRX LOG;

select

count(*)

from

/* деактивируем внешние ключи всех таблиц */

select alter table table name

disable constraint constraint name; cons from user constraints where constraint type = R;

CONS

alter table ANT disable constraint ANT FK; alter table BONUS disable constraint BONUS FK; alter table DEMO1 disable constraint DEMO1 FK; alter table DEMO2 disable constraint DEMO2 FK; alter table DEPT disable constraint DEPT FK; alter table DUMMY disable constraint DUMMY FK; alter table EMP disable constraint EMP FK; alter table EMP SALES disable constraint EMP SALES FK; alter table EMP SCORE disable constraint EMP SCORE FK; alter table PROFESSOR disable constraint PROFESSOR FK;

/* генерируем сценарий вставки из некоторых столбцов таблицы EMP */

select insert into emp(empno,ename,hiredate) chr(10) values( empno,ename ,to date(hiredate) ); inserts from emp where deptno = 10;

INSERTS

insert into emp(empno,ename,hiredate)

values( 7782,CLARK,to date(09-JUN-1981 00:00:00) );

insert into emp(empno,ename,hiredate)

values( 7839,KING,to date(17-NOV-1981 00:00:00) );

insert into emp(empno,ename,hiredate)

values( 7934,MILLER,to date(23-JAN-1982 00:00:00) );



1 ... 37 38 39 [ 40 ] 41 42 43 ... 219

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика