Программирование >>  Понятие sql 

1 ... 79 80 81 [ 82 ] 83 84 85 ... 95


CREATE VIEW Janetsview

AS SELECT *

FROM Customers

WHERE rating = (SELECT MIN (rating)

FROM Customers);

Шаг 2:

GRANT SELECT ON Janetsview TO Janet;

Глава 2 3

CREATE DBSPACE Myspace

(pctindex 15,

pctfree 40);

CREATE SYNONYM Orders FOR Diane.Orders;

3. Они должны быть откатаны обратно назад

4. Блокировка взаимоисключающего доступа

5. Толко чтение

Глава 24

SELECT a.tname, a.owner, b.cname, b.datatype

FROM SYSTEMCATOLOG a, SYSTEMCOLUMNS b

WHERE a.tname = b.tname AND a.owner = b.owner AND a.numcolumns > 4;

Обратите Внимание: из-за того, что большинство имен столбца объединяемых таблиц - различны, не все из используемых псевдонимов a и b в вышеупомянутой команде - строго обязательны. Они представлены просто для понимания.

SELECT tname, synowner, COUNT (ALL synonym)

FROM SYTEMSYNONS

GROUP BY tname, synowner;

SELECT COUNT (*)

FROM SYSTEMCATALOG a

WHERE numcolumns/2 < (SELECT COUNT (DISTINCT cnumber)

FROM SYSTEMINDEXES b

WHERE a.owner = b.tabowner AND a.tname = b.tname);



EXEC SQL BEGIN DECLARE SECTION;

SQLCODE : integer; { требуемый всегда } cnum : integer;

snum : integer;

custnum : integer; salesnum : integer;

EXEC SQL END DECLARE SECTION;

EXEC SQL DECLARE WrongOrders AS CURSOR FOR SELECT cnum, snum

FROM Orders a

WHERE snum <> (SELECT snum

FROM Customers b

WHERE a.cnum = b.cnum); { Мы пока еще используем здесь SQL для выполнения основной работы. Запрос выше размещает строки таблицы Порядков, которые не согласуются с таблицей Заказчиков.}

EXEC SQL DECLARE Custassigns AS CURSOR FOR SELECT cnum, snum FROM Customers;

{ Этот курсор используется для получения правильных значений snum }

begin { основная программа }

EXEC SQL OPEN CURSOR WrongOrders;

while SQLCODE=0do{ Цикл до тех пор, пока WrongOrders не опустеет } begin

EXEC SQL FETCH WrongOrders INTO (:cnum, :snum);

if SQLCODE = 0 then

begin {Когда WrongOrders опустеет, мы не хотели бы продолжать выполнение этого цикла до бесконечности} EXEC SQL OPEN CURSOR CustAssigns; repeat

EXEC SQL FETCH CustAssigns INTO (:custnum, :salesnum);

until :custnum = :cnum; { Повторять FETCH до тех пор пока ... команда будет просматривать CustAssigns курсор до строки, которая соответствует текущему значению cnum, найденному в WrongOrders }

EXEC SQL CLOSE CURSOR Custassigns; { Поэтому мы будем начинать новый вывод в следующий раз через цикл. Значение в котором мы получим из этого курсора сохраняется в переменной - salesnum. }

EXEC SQL UPDATE Orders SET snum = :salesnum WHERE CURRENT OF WrongOrders; end; {Если SQLCODE = 0}. end; { Пока SQLCODE ... выполнить } EXEC SQL CLOSE CURSOR WrongOrders; end; { основная программа }

2. Для данной программы, которую я использовал, решение будет состоять в том, чтобы просто включить поле onum первичным ключом таблицы Порядков, в курсор Wrong Orders. В команде UPDATE, вы будете затем использовать предикат WHERE onum =:ordernum (считая целую переменную - odernum, обьявленной), вместо WHERE CURRENT Of Wrong Orders.

Результатом будет программа наподобие этой (большинство комментариев из предыдущей программы здесь исключены):



EXEC SQL BEGIN DECLARE SECTION;

SQLCODE : integer;

odernum : integer;

cnum : integer;

snum : integer;

custnum : integer;

salesnum : integer;

EXEC SQL END DECLARE SECTION;

EXEC SQL DECLARE WrongOrders AS CURSOR FOR SELECT onum, cnum, snum

FROM Orders a

WHERE snum <> (SELECT snum

FROM Customers b

WHERE a.cnum = b.cnum);

EXEC SQL DECLARE Custassigns AS CURSOR FOR SELECT cnum, snum FROM Customers;

begin { основная программа }

EXEC SQL OPEN CURSOR WrongOrders;

while SQLCODE=0do{Цикл до тех пор пока WrongOrders не опустеет} begin

EXEC SQL FETCH WrongOrders INTO (:odernum, :cnum, :snum);

if SQLCODE = 0 then

begin

EXEC SQL OPEN CURSOR CustAssigns; repeat

EXEC SQL FETCH CustAssigns INTO (:custnum, :salesnum); until :custnum = :cnum; EXEC SQL CLOSE CURSOR Custassigns;

EXEC SQL UPDATE Orders

SET snum = :salesnum WHERE CURRENT OF WrongOrders;

end; { If SQLCODE=0}

end; { While SQLCODE ... do } EXEC SQL CLOSE CURSOR WrongOrders; end; { основная программа }



1 ... 79 80 81 [ 82 ] 83 84 85 ... 95

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