Исходники
Статьи
Языки программирования
.NET Delphi Visual C++ Borland C++ Builder C/С++ и C# Базы Данных MySQL MSSQL Oracle PostgreSQL Interbase VisualFoxPro Веб-Мастеру PHP HTML Perl Java JavaScript Протоколы AJAX Технология Ajax Освоение Ajax Сети Беспроводные сети Локальные сети Сети хранения данных TCP/IP xDSL ATM Операционные системы Windows Linux Wap Книги и учебники
Скрипты
Магазин программиста
|
CREATE DATABASE [database] [CONTROLFILE REUSE] [LOGFILE [GROUP integer] filespec [, [GROUP integer] filespec] ...] [MAXLOGFILES integer ] [MAXLOGMEMBERS integer] [MAXLOGHISTORY integer] [DATAFILE filespec [, filespec] ...] [MAXDATAFILES integer] [MAXINSTANCES integer] [ARCHIVELOG | !!under!!NOARCHIVELOG] [!!under!!EXCLUSIVE] [CHARACTER SET charset] CREATE [PUBLIC] DATABASE LINK dblink [CONNECT TO user IDENTIFIED BY password] [USING 'dbstring'] CREATE [OR REPLACE] FUNCTION [schema.]function [ (argument [!!under!!IN] datatype [, argument [!!under!!IN] datatype] ...)] RETURN datatype {IS | AS} pl/sql_subprogram_body CREATE INDEX [schema.]index ON { [schema.]table (column [!!under!!ASC|DESC] [, column [!!under!!ASC|DESC]] ...) | CLUSTER [schema.]cluster } [INITRANS integer] [MAXTRANS integer] [TABLESPACE tablespace] [STORAGE storage_clause] [PCTFREE integer] [NOSORT] CREATE [OR REPLACE] PACKAGE [schema.]package {IS | AS} pl/sql_package_spec CREATE [OR REPLACE] PACKAGE BODY [schema.]package {IS | AS} pl/sql_package_body CREATE [OR REPLACE] PROCEDURE [schema.]procedure [ (argument [!!under!!IN | OUT | IN OUT] datatype [, argument [!!under!!IN | OUT | IN OUT] datatype] ...)] {IS | AS} pl/sql_subprogram_body CREATE PROFILE profile LIMIT [SESSIONS_PER_USER {integer | UNLIMITED | DEFAULT}] [CPU_PER_SESSION {integer | UNLIMITED | DEFAULT}] [CPU_PER_CALL {integer | UNLIMITED | DEFAULT}] [CONNECT_TIME {integer | UNLIMITED | DEFAULT}] [IDLE_TIME {integer | UNLIMITED | DEFAULT}] [LOGICAL_READS_PER_SESSION {integer | UNLIMITED | DEFAULT}] [LOGICAL_READS_PER_CALL {integer | UNLIMITED | DEFAULT}] [COMPOSITE_LIMIT {integer | UNLIMITED | DEFAULT}] [PRIVATE_SGA {integer [K|M] | UNLIMITED | DEFAULT}] CREATE ROLE role [ !!under!!NOT IDENTIFIED | IDENTIFIED {BY password | EXTERNALLY} ] CREATE [PUBLIC] ROLLBACK SEGMENT rollback_segment [TABLESPACE tablespace] [STORAGE storage_clause] - 21 - CREATE SCHEMA AUTHORIZATION schema { CREATE TABLE command | CREATE VIEW command | GRANT command } ... CREATE SEQUENCE [schema.]sequence [INCREMENT BY integer] [START WITH integer] [MAXVALUE integer | NOMAXVALUE] [MINVALUE integer | !!under!!NOMINVALUE] [CYCLE | NOCYCLE] [CACHE integer | NOCACHE] [ORDER | !!under!!NOORDER] CREATE SNAPSHOT [schema.]snapshot [ [PCTFREE integer] [PCTUSED integer] [INITRANS integer] [MAXTRANS integer] [TABLESPACE tablespace] [STORAGE storage_clause] | [CLUSTER cluster (column [, column]...) ] [ USING INDEX [PCTFREE integer] [INITRANS integer] [MAXTRANS integer] [TABLESPACE tablespace] [STORAGE storage_clause] ] [ REFRESH [FAST | COMPLETE | !!under!!FORCE] [START WITH date] [NEXT date]] AS subquery CREATE SNAPSHOT LOG ON [schema.]table [PCTFREE integer] [PCTUSED integer] [INITRANS integer] [MAXTRANS integer] [TABLESPACE tablespace] [STORAGE storage_clause] CREATE [PUBLIC] SYNONYM [schema.]synonym FOR [schema.]object[@dblink] CREATE TABLE [schema.]table ( { column [datatype] [DEFAULT expr] [column_constraint] ... | table_constraint} [, { column [datatype] [DEFAULT expr] [column_constraint] ... | table_constraint} ]...) [ [PCTFREE integer] [PCTUSED integer] [INITRANS integer] [MAXTRANS integer] [TABLESPACE tablespace] [STORAGE storage_clause] | CLUSTER cluster (column [, column]...) ] [ ENABLE enable_clause | DISABLE disable_clause ] ... [AS subquery] CREATE TABLESPACE tablespace DATAFILE filespec [, filespec] ... [DEFAULT STORAGE storage_clause] [!!under!!ONLINE | OFFLINE] CREATE [OR REPLACE] TRIGGER [schema.]trigger {BEFORE | AFTER} {DELETE | INSERT | UPDATE [OF column [, column] ...]} [OR {DELETE | INSERT | UPDATE [OF column [, column] ...]}] ... ON [schema.]table [ [REFERENCING { OLD [AS] old [NEW [AS] new] | NEW [AS] new [OLD [AS] old] } ] FOR EACH ROW [WHEN (condition)] ] pl/sql_block - 22 - CREATE USER user IDENTIFIED {BY password | EXTERNALLY} [DEFAULT TABLESPACE tablespace] [TEMPORARY TABLESPACE tablespace] [QUOTA {integer [K|M] | UNLIMITED} ON tablespace] ... [PROFILE profile] CREATE [OR REPLACE] [FORCE | !!under!!NOFORCE] VIEW [schema.]view [(alias [,alias]...)] AS subquery [WITH CHECK OPTION [CONSTRAINT constraint]] dblink database[.domain]...[@connection_qualifier] DELETE [FROM] [schema.]{table | view}[@dblink] [alias] [WHERE condition] DROP CLUSTER [schema.]cluster [INCLUDING TABLES [CASCADE CONSTRAINTS] ] DROP [PUBLIC] DATABASE LINK dblink DROP FUNCTION [schema.]function DROP INDEX [schema.]index DROP PACKAGE [BODY] [schema.]package DROP PROCEDURE [schema.]procedure DROP PROFILE profile [CASCADE] DROP ROLE role DROP ROLLBACK SEGMENT rollback_segment DROP SEQUENCE [schema.]sequence DROP SNAPSHOT [schema.]snapshot DROP SNAPSHOT LOG ON [schema.]table DROP [PUBLIC] SYNONYM [schema.]synonym DROP TABLE [schema.]table [CASCADE CONSTRAINTS] DROP TABLESPACE tablespace [INCLUDING CONTENTS [CASCADE CONSTRAINTS]] DROP TRIGGER [schema.]trigger DROP USER user [CASCADE] DROP VIEW [schema.]view EXPLAIN PLAN [SET STATEMENT ID = 'text'] [INTO [schema.]table[@dblink]] FOR statement GRANT {system_priv | role} [, {system_priv | role}] ... TO {user | role | PUBLIC} [, {user | role | PUBLIC}] ... [WITH ADMIN OPTION] - 23 - GRANT {object_priv | ALL [PRIVILEGES]} [ (column [, column]...) ] [, {object_priv | ALL [PRIVILEGES]} [ (column [, column] ...) ] ] ... ON [schema.]object TO {user | role | PUBLIC} [, {user | role | PUBLIC}] ... [WITH GRANT OPTION] INSERT INTO [schema.]{table | view}[@dblink] [ (column [, column] ...) ] {VALUES (expr [, expr] ...) | subquery} LOCK TABLE [schema.]{table | view}[@dblink] [, [schema.]{table | view}[@dblink] ]... IN lockmode MODE [NOWAIT] NOAUDIT {statement_opt | system_priv} [, {statement_opt | system_priv} ] ... [BY user [, user] ...] [WHENEVER [NOT] SUCCESSFUL] NOAUDIT object_opt [, object_opt] ... ON [schema.]object [WHENEVER [NOT] SUCCESSFUL] RENAME old TO new REVOKE {system_priv | role} [, {system_priv | role}] ... FROM {user | role | PUBLIC} [, {user | role | PUBLIC}] ... REVOKE {object_priv | ALL [PRIVILEGES]} [, {object_priv | ALL [PRIVILEGES]} ] ... ON [schema.]object FROM {user | role | PUBLIC} [, {user | role | PUBLIC}] ... [CASCADE CONSTRAINTS] ROLLBACK [WORK] [ TO [SAVEPOINT] savepoint | FORCE 'text' ] SAVEPOINT savepoint SELECT [DISTINCT | !!under!!ALL] { * | { [schema.]{table | view | snapshot}.* | expr [ [AS] c_alias ] } [, { [schema.]{table | view | snapshot}.* | expr [ [AS] c_alias ] } ] ... } FROM { (subquery) | [schema.]{table | view | snapshot}[@dblink] } [t_alias] [, { (subquery) | [schema.]{table | view | snapshot}[@dblink] } [t_alias] ] ... [WHERE condition ] [ [START WITH condition] CONNECT BY condition] [GROUP BY expr [, expr] ...] [HAVING condition] [{UNION | UNION ALL | INTERSECT | MINUS} SELECT command ] [ORDER BY {expr | c_alias | position} [!!under!!ASC | DESC] [, {expr | c_alias | position} [!!under!!ASC | DESC]] ...] [FOR UPDATE [OF [[schema.]{table | view}.]column [, [[schema.]{table | view}.]column] ...] [NOWAIT] ] - 24 - SET ROLE { role [IDENTIFIED BY password] [, role [IDENTIFIED BY password] ] ... | ALL [EXCEPT role [, role] ...] | NONE } SET TRANSACTION { READ ONLY | READ WRITE | USE ROLLBACK SEGMENT rollback_segment } TRUNCATE {TABLE [schema.]table | CLUSTER [schema.]cluster} [ {!!under!!DROP | REUSE} STORAGE] UPDATE [schema.]{table | view}[@dblink] [alias] SET { (column [, column] ...) = (subquery) | column = { expr | (subquery) } } [, { (column [, column] ...) = (subquery) | column = { expr | (subquery) } } ] ... [WHERE condition] 11. Фразы предложений (команд) SQL Oracle7 ARCHIVE LOG [THREAD integer] { { SEQ integer | CHANGE integer | CURRENT | GROUP integer | LOGFILE 'filename' | NEXT | ALL | START } [TO 'location'] | STOP } CONSTRAINT clause Column constraint: [CONSTRAINT constraint] { [NOT] NULL | {UNIQUE | PRIMARY KEY} | REFERENCES [schema.]table [(column)] [ON DELETE CASCADE] | CHECK (condition) } { [ USING INDEX [PCTFREE integer] [INITRANS integer] [MAXTRANS integer] [TABLESPACE tablespace] [STORAGE storage_clause] ] [ EXCEPTIONS INTO [schema.]table | DISABLE } Table constraint: [CONSTRAINT constraint] { {UNIQUE | PRIMARY KEY} (column [,column] ...) | FOREIGN KEY (column [,column] ...) REFERENCES [schema.]table [(column [,column] ...)] [ON DELETE CASCADE] | CHECK (condition) } { [ USING INDEX [PCTFREE integer] [INITRANS integer] [MAXTRANS integer] [TABLESPACE tablespace] [STORAGE storage_clause] ] [ EXCEPTIONS INTO [schema.]table[@dblink] | DISABLE } - 25 - DISABLE { { UNIQUE (column [, column] ...) | PRIMARY KEY | CONSTRAINT constraint } [CASCADE] | ALL TRIGGERS } DROP { PRIMARY KEY | UNIQUE (column [, column] ...) | CONSTRAINT constraint } [CASCADE] ENABLE { {UNIQUE (column [, column] ...) |PRIMARY KEY |CONSTRAINT constraint} [USING INDEX [INITRANS integer] [MAXTRANS integer] [TABLESPACE tablespace] [STORAGE storage_clause] [PCTFREE integer] ] [EXCEPTIONS INTO [schema.]table ] | ALL TRIGGERS } Filespec: Data files: 'filename' [SIZE integer [K|M] ] [REUSE] Redo log file groups: { 'filename' | ('filename' [, 'filename'] ...)} [SIZE integer [K|M] ] [REUSE] RECOVER [AUTOMATIC] [FROM 'location'] { [DATABASE] [ UNTIL CANCEL | UNTIL TIME date | UNTIL CHANGE integer | USING BACKUP CONTROLFILE ] | TABLESPACE tablespace [, tablespace] ... | DATAFILE 'filename' [, 'filename'] ... | LOGFILE 'filename' | CONTINUE [DEFAULT] | CANCEL } STORAGE ( [INITIAL integer [K|M] ] [NEXT integer [K|M] ] [PCTINCREASE integer] [MINEXTENTS integer] [MAXEXTENTS integer] [OPTIMAL {integer [K|M] | NULL}] [FREELIST GROUPS integer] [FREELISTS integer] ) WHERE [NOT] condition [{AND | OR} [NOT] condition ] ... - 26 - 12. Язык PL/SQL - процедурные расширения языка SQL 12.1. Основные конструкции языка PL/SQL PL/SQL - это блочно-структурированный язык. Структура блока имеет вид: [ DECLARE -- описание переменных, констант и пользовательских типов данных ] BEGIN -- тело основной программы, в которую могут вкладываться другие -- блоки (в них также можно вкладывать блоки и т.д.) [ EXCEPTION -- драйверы для обработки исключительных ситуаций в программе ] END; Программы PL/SQL могут быть неименовынными (анонимными блоками), но чаще всего используются именованные программы: процедуры, функции, пакеты и триггера (см. п. 12.7). 12.2. Типы данных, переменные, константы и выражения 12.2.1. Типы данных, доступные в PL/SQL Кроме типов данных Oracle7 (см. п. 5), PL/SQL поддерживает несколько дополнительных типов данных и позволяет использовать в своих конструкциях некоторые основные типы с большим диапазоном. Тип данных Описание -------------- --------------------------------------------------------------- BINARY_INTEGER Этот тип данных и его подтипы NATURAL и POSITIVE применяются для создания переменных и констант, которые хранят число со знаком. Двоичные целые числа могут принимать значения в диапазоне от -2 в 31 степени до 2 в 31 степени минус 1. BOOLEAN Принимается для создания переменных и констант, в которых хранятся логические значения TRUE и FALSE. CHAR Есть подтипы CHARACTER и STRING. Максимальный размер 32767. NUMBER Есть подтипы DEC, DECIMAL, DOUBLE, PRECISION, FLOAT, INT, INTEGER, NUMERIC, REAL и SMALLINT. RECORD Используется для создания пользовательских типов записей базы данных. TABLE Служит для создания табличных типов данных PL/SQL. VARCHAR2 Есть подтип VARCHAR. Максимальный размер 32767. col%TYPE Используется для определения типа данных столбца или переменной по типу данных другого столбца или переменной, к имени которого или которой (col) приписан суффикс %TYPE. tab%ROWTYPE Используется для определения типа данных записи по типу данных столбцов таблицы, к имени которой (tab) приписан суффикс %ROWTYPE. Рассмотрим подробнее типы данных TABLE и RECORD, позволяющие создавать одномерные массивы и записи, широко используемые в программах PL/SQL. 12.2.2. Таблицы PL/SQL Таблица PL/SQL - это одномерный массив с неограниченным числом строк. Для объявления этого массива (таблицы PL/SQL или TABLE) необходимо сначала определить его тип данных. - 27 - Для описания типа данных TABLE используется синтаксис: TYPE type_name IS TABLE OF { column_type | variable%TYPE | table.column%TYPE } [NOT NULL] INDEX BY BINARY_INTEGER; где "type_name" - спецификатор типа, используемый в последующих объявлениях таблиц PL/SQL, и "column_type" - любой из скалярных типов данных: CHAR, DATE или NUMBER. С помощью атрибута %TYPE можно установить "type_name" соответствующим типу данных какой-либо переменной (variable) или столбца (table.column). Имя (например, name_plsql_table), которое описывается табличным типом данных, называется таблицей PL/SQL. Это описание, размещаемое в разделе DECLARE, имеет вид: name_plsql_table type_name; Ссылки на строки таблицы PL/SQL осуществляются аналогично ссылкам на элементы одномерного массива: name_plsql_table(index) , где index принадлежит типу BINARY_INTEGER. Например, для ссылки на третью строку в таблице PL/SQL "ename_tab" следует написать: ename_tab(3). Для присвоения значения конкретной строке таблицы PL/SQL используется синтаксис: name_plsql_table(index) := expr; Для ввода в таблицу PL/SQL значений из какого-либо столбца базовой таблицы или представления, а также для выборки значений из таблицы PL/SQL, необходимо использовать цикл. (Примеры таких операций приведены в п. 12.4.) 12.2.3. Записи PL/SQL Record PL/SQL - это совокупность полей, каждое из которых должно иметь уникальное имя (в пределах записи). Эти поля могут принадлежать различным типам данных. Если создаваемая запись (sotr) соответствует описанию столбцов какой-либо базовой таблицы (например, kadry), то ее объявление можно осуществить в разделе DECLARE с помощью атрибута %ROWTYPE: sotr kadry%ROWTYPE; В противном случае для объявления записи необходимо сначала определить ее тип данных. Для описания типа данных RECORD используется синтаксис: TYPE type_name IS RECORD ( field_name1 {field_type | variable%TYPE | table.column%TYPE | table%ROWTYPE} [NOT NULL], field_name2 {field_type | variable%TYPE | table.column%TYPE | table%ROWTYPE} [NOT NULL], ...); где "type_name" - спецификатор типа, используемый в последующих объявлениях записей PL/SQL, и "field_type" - любой тип данных. С помощью атрибута %TYPE можно установить "type_name" соответствующим типу данных какой-либо переменной (variable) или столбца (table.column). Атрибут %ROWTYPE позволяет определить поле как запись, соответствующую описанию столбцов какой-либо базовой таблицы. - 28 - При объявлении типа записи можно присвоить ее полям некоторые значения. Если же для поля вводится ограничение NOT NULL (для предотвращения назначения пустых значений), то этому полю надо обязательно присвоить значение. Например: TYPE SotrRecTyp IS RECORD (nomer NUMBER(4) NOT NULL := 1001, familiy CHAR(20), dolgnost CHAR(14), otdel NUMBER(3) := 102); Объявление создаваемой записи (например, name_plsql_record) производится в разделе DECLARE и имеет вид: name_plsql_record type_name; Ссылки на отдельные поля записи осуществляются так: name_plsql_record.field_name; Для присвоения значения конкретному полю записи используется синтаксис: name_plsql_record.field_name := expr; Примеры использования записей в программах PL/SQL приведены ниже. Для ввода в таблицу PL/SQL значений из какого-либо столбца базовой таблицы или представления, а также для выборки значений из таблицы PL/SQL, необходимо использовать цикл. (Примеры таких операций приведены в п. 12.4.) 12.2.4. Переменные, константы и выражения В программах PL/SQL могут использоваться переменные и константы, описываемые в разделе DECLARE с помощью конструкции вида: variable_name [CONSTANT] type_name [NOT NULL] [ { := | DEFAULT } expr ] Например birthdate DATE; emp_count SMALLINT := 0; emp_count SMALLINT DEFAULT 0; acct_id VARCHAR2(5) NOT NULL := 'AP001'; pi CONSTANT REAL := 3.14159; area REAL := pi * radius**2; valid_id BOOLEAN; valid_id VARCHAR2(5); -- недопустимое вторичное описание valid_id i, j, k SMALLINT; -- нельзя описывать список; надо: -- i SMALLINT; j SMALLINT; k SMALLINT; credit REAL(7,2); debit credit%TYPE; -- тип данных аналогичный типу данных "credit" Синтаксис выражения описан в п. 4.3. 12.3. Связь объектов PL/SQL с таблицами базы данных Чтобы программа PL/SQL могла работать с информацией, содержащейся в базах данных, необходимо организовать обмен между значениями столбцов таблиц баз данных и переменными PL/SQL. Известно, что для выбора информации из таблиц используется SQL предложение SELECT. При его выполнении Oracle создает специальную рабочую область, содержащую информацию о самом SELECT, данные, которые требуются для его выполнения (например, результаты подзапросов), и, наконец, окончательный результат выполнения SELECT. PL/SQL имеет несколько механизмов доступа к - 29 - этой рабочей области. Одним из них является курсор, с помощью которого можно присвоить имя этой рабочей области и манипулировать содержащейся в ней информацией, последовательно выбирая строки результата и пересылая значения столбцов текущей строки в переменные PL/SQL. Существуют и другие механизмы, не требующее создания явного курсора. 12.3.1. Явный курсор Курсор - это средство языка SQL, позволяющее с помощью команд OPEN, FETCH и CLOSE получить построчный доступ к результату запроса к базе данных. (Будем также называть курсором и сам набор строк, полученный в результате выполнения запроса.) Для использования курсора его надо сначала объявить, т.е. дать ему имя и указать (с помощью предложения SELECT), какие столбцы и строки базовых таблиц должны быть помещены в набор строк, названный этим именем. Команда OPEN инициализирует получение указанного набора и установку перед первой его строкой указателя текущей строки. Команда FETCH служит для установки указателя текущей строки на следующую запись (первый раз на строку с номером 1) и выборки из текущей строки курсора значений указанных столбцов с пересылкой их в переменные PL/SQL. (Выполнением FETCH в цикле можно последовательно выбрать информацию из всех строк курсора.) Наконец, команда CLOSE позволяет закрыть (удалить из памяти) набор строк (при этом описание курсора сохраняется и его можно снова открыть командой OPEN). Существует модификация ("Курсор в цикле FOR"), позволяющая организовать последовательный выбор строк объявленного курсора без явного использования команд OPEN, FETCH и CLOSE. 12.3.1.1. Объявление курсора Перед работой с курсором его следует объявить в разделе DECLARE или другом допустимом разделе, используя синтаксис: CURSOR cursor_name [ (parameter [, parameter, ... ] ) ] IS SELECT ... , где cursor_name - имя курсора; SELECT ... - предложение SELECT, определяющее строки курсора; parametr - имеет следующий синтаксис: variable_name [IN] type_name [ { := | DEFAULT } value ] , а type_name - любой тип (подтип) данных PL/SQL без указания ограничений (например, длины символьных значений). Формальные параметры курсора используются только для передачи значений в WHERE фразу предложения SELECT с целью отбора нужных строк запроса. Передача таких значений производится во время открытия курсора командой OPEN. Если значения формальных параметров отсутствуют в команде OPEN и не заданы по умолчанию (:= value или DEFAULT value), то выдается ошибка. При наличии тех и других используются параметры из команды OPEN. В следующем примере использованы оба способа задания значений по умолчанию параметрам курсора: DECLARE CURSOR s1 (otd INTEGER := 102, grup VARCHAR2 DEFAULT 'Преподаватели', tdat DATE := '1.1.1996') IS SELECT (TO_CHAR(razr)||' '||imya_dolg) razr_dolg, stavka FROM shtat x, dolgnosti y, grup_dolg z WHERE x.dolgn = y.dolgn AND y.grup_dolg = z.grup_dolg AND otdel = otd AND tdat BETWEEN nachalo AND konec AND imya_grup_dolg = grup ORDER BY razr_dolg DESC; |
Форум Программиста
Новости Обзоры Магазин Программиста Каталог ссылок Поиск Добавить файл Обратная связь Рейтинги
|