Поиск…


замечания

В этом разделе представлен обзор того, что такое plsql, и почему разработчик может захотеть его использовать.

Следует также упомянуть о любых крупных предметах в рамках plsql и ссылаться на связанные темы. Поскольку Documentation for plsql является новым, вам может потребоваться создать начальные версии этих связанных тем.

Определение PLSQL

PL / SQL (язык процедур / язык структурированных запросов) является процедурным расширением Oracle Corporation для SQL и реляционной базы данных Oracle. PL / SQL доступен в Oracle Database (начиная с версии 7), в базе данных TimesTen в памяти (начиная с версии 11.2.1) и IBM DB2 (начиная с версии 9.7).

Базовый блок в PL / SQL называется блоком, который состоит из трех частей: декларативной части, исполняемой части и части исключения.

DECLARE
   <declarations section>
BEGIN
   <executable command(s)>
EXCEPTION
   <exception handling>
END;

Объявления. Этот раздел начинается с ключевого слова DECLARE. Это необязательный раздел и определяет все переменные, курсоры, подпрограммы и другие элементы, которые будут использоваться в программе.

Исполняемые команды - этот раздел заключен между ключевыми словами BEGIN и END, и это обязательный раздел. Он состоит из исполняемых инструкций PL / SQL программы. Он должен иметь по крайней мере одну исполняемую строку кода, которая может быть просто командой NULL, чтобы указать, что ничего не должно выполняться.

Обработка исключений - этот раздел начинается с ключевого слова EXCEPTION. Этот раздел снова является необязательным и содержит исключения (исключения), которые обрабатывают ошибки в программе.

Каждый оператор PL / SQL заканчивается точкой с запятой (;). Блоки PL / SQL могут быть вложены в другие блоки PL / SQL с помощью BEGIN и END.

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

BEGIN
    NULL;
END;
/ 

Отсутствие команды excecutable приводит к ошибке, поскольку PL / SQL не поддерживает пустые блоки. Например, исключение кода ниже приводит к ошибке:

BEGIN
END;
/ 

Приложение вызовет ошибку:

END;
*
ERROR at line 2:
ORA-06550: line 2, column 1:
PLS-00103: Encountered the symbol "END" when expecting one of the following:
( begin case declare exit for goto if loop mod null pragma
raise return select update while with <an identifier>
<a double-quoted delimited-identifier> <a bind variable> <<
continue close current delete fetch lock insert open rollback
savepoint set sql execute commit forall merge pipe purge

Символ «*» в строке ниже ключевого слова «END»; означает, что блок, который заканчивается этим блоком, пуст или плохо сконструирован. Каждый блок исполнения нуждается в инструкциях, даже если он ничего не делает, как в нашем примере.

Привет, мир

set serveroutput on

DECLARE
   message constant varchar2(32767):= 'Hello, World!';
BEGIN
   dbms_output.put_line(message);
END;
/

set serveroutput on команд set serveroutput on SQL * Plus и SQL Developer необходим для включения вывода dbms_output . Без команды ничего не отображается.

end; строка сигнализирует о завершении анонимного блока PL / SQL. Чтобы запустить код из командной строки SQL, вам может потребоваться ввести / в начале первой пустой строки после последней строки кода. Когда вышеуказанный код выполняется в приглашении SQL, он производит следующий результат:

Hello, World!

PL/SQL procedure successfully completed.

О PLSQL

PL / SQL означает расширение процедурных языков для SQL. PL / SQL доступен только как «технология разрешения» в других программных продуктах; он не существует как автономный язык. Вы можете использовать PL / SQL в реляционной базе данных Oracle, в Oracle Server и в средствах разработки приложений на стороне клиента, таких как Oracle Forms. Вот некоторые из способов использования PL / SQL:

  1. Чтобы создать хранимые процедуры. ,
  2. Чтобы создать триггеры базы данных.
  3. Для реализации клиентской логики в приложении Oracle Forms.
  4. Чтобы связать домашнюю страницу World Wide Web с базой данных Oracle.

Разница между% TYPE и% ROWTYPE.

%TYPE : Используется для объявления поля с тем же типом, что и столбец указанной таблицы.

DECLARE
        vEmployeeName   Employee.Name%TYPE;
BEGIN
        SELECT Name 
        INTO   vEmployeeName
        FROM   Employee
        WHERE  RowNum = 1;
        
        DBMS_OUTPUT.PUT_LINE(vEmployeeName);
END;
/

% ROWTYPE: используется для объявления записи с теми же типами, что и в указанной таблице, представлении или курсоре (= несколько столбцов).

DECLARE
        rEmployee     Employee%ROWTYPE;
BEGIN
        rEmployee.Name := 'Matt';
        rEmployee.Age := 31;
        
        DBMS_OUTPUT.PUT_LINE(rEmployee.Name);
        DBMS_OUTPUT.PUT_LINE(rEmployee.Age);
END;
/

Создать или заменить вид

В этом примере мы создадим представление.
Вид в основном используется как простой способ получения данных из нескольких таблиц.

Пример 1:
Просмотр с выбором на один стол.

CREATE OR REPLACE VIEW LessonView AS
       SELECT     L.*
       FROM       Lesson L;

Пример 2:
Просмотр с помощью выбора на нескольких таблицах.

CREATE OR REPLACE VIEW ClassRoomLessonView AS
       SELECT     C.Id, 
                  C.Name, 
                  L.Subject, 
                  L.Teacher 
       FROM       ClassRoom C, 
                  Lesson L 
       WHERE      C.Id = L.ClassRoomId;

Чтобы вызвать эти представления в запросе, вы можете использовать оператор select.

SELECT * FROM LessonView;
SELECT * FROM ClassRoomLessonView;

Создать таблицу

Ниже мы создадим таблицу с тремя столбцами.
В столбце Id должен быть заполнен, так что мы определяем его NOT NULL .
В столбце « Contract мы также добавляем чек, чтобы разрешалось только «Y» или «N». Если вставленная вставка и этот столбец не указаны во время вставки, то по умолчанию вставлен «N».

CREATE TABLE Employee (
        Id            NUMBER NOT NULL,
        Name          VARCHAR2(60),
        Contract      CHAR DEFAULT 'N' NOT NULL,
        ---
        CONSTRAINT p_Id PRIMARY KEY(Id),
        CONSTRAINT c_Contract CHECK (Contract IN('Y','N'))
);


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow