|
Программирование >> Понятие sql
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; { основная программа }
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |