Программные единицы в составе БД Oracle - хранимые процедуры, функции и пакеты. Переменные ORACLE

Программные единицы в составе БД Oracle - хранимые процедуры, функции и пакеты. Переменные ORACLE

26.04.2019

Разница объявляемых переменных заключается в месте их применения и соответственно в месте хранения значений этих переменных.

    Подстановочные переменные хоста (host or bind variables ) и переменные замещения (substitute variable ) объявляются и хранятся в клиентской программе.
    Обявление переменных в клиенте зависит от клинтской программы и может несколько отличаться или вообще отсутствовать. Объявления def и var присходят от SQL*Plus, но поддерживаются также многими другими программными продуктами для работы с БД Oracle , например: Sql Developer, TOAD.

    1. Подстановочные переменные определённого типа данных объявляются оператором var . Инициализировать эти переменные возможно только в PL/SQL блоке. Могут использоваться для подстановки как входных так и выходных значений полей в DML запросах. Подстановочные переменные могут так же быть в анонимных PL/SQL блоках как для передачи так и для чтения. Подстановка переменных осуществляется на этапе подстановки (bind ) для входных значений, или определения результата (define output) для выходных значений, непосредственно перед выполнением (execute ).
      Важно: Подстановочные переменные не могут быть использованы для имён полей, таблиц, представлений и других объектов БД, так как они необходимы на этапе подготовки к выполнению (parse ).

      Переменные замещения объявляются и сразу же инициализируются символьным значением с помощью оператора def . Все встретившиеся имена переменных с префиксом & будут замещены символьным значением этих переменных. Замещение произойдёт в клиенте ешё до отправки DML/DDL/DCL выражения или PL/SQL блока на выполнение серверу БД, поэтому каких либо ограничений, какая их часть может быть замещена, не существует.

  • Переменные языка PL/SQL обьявляются в програмном блоке. Они не зависят от клиентской программы, так как в клиенте это только текст программы, который должен быть отправлен на сервер БД. Инициализируются переменные этого типа при выполнении програмного блока на сервере БД. Хранятся эти переменные в UGA (user global area ) так же на сервере БД.

    1. PL/SQL переменные обьявляются в аннонимном блоке после ключевого слова declare . В именных блоках переменные могут быть объявлены сразу после заголовка create|alter ... is|as объявления/изменения именного объекта. PL/SQL блоки могут содержать вложенные блоки. Зона видимости переменных ограничена блоком, в котором они объявлены. Время жизни переменных объявленых в пакетах (packaged variables ) - сессия, во всех остальных случаях - время выполнения именного объекта или анонимного блока.

Пример исполъзующий все виды вышеописаных переменных для динамического выполнения скриптов в SQL*Plus - есть некое клолличество скриптов, но зарение неизвестно какой из них вызывать, т.е. его надо определить динамически и тут же вызвать. Все виды переменных и алиас колонки умышлено используют одно и то же имя sqlfile:

Define sqlfile="default"; variable sqlfile varchar2(100); declare sqlfile varchar2(100); begin <> declare -- в этом блоке динамически определяем имя скрипта localFile constant varchar2(100) := "my_sqlscript_01"; begin sqlfile:= localFile; end; :sqlfile:= sqlfile; end; / column sqlfile new_value sqlfile noprint format A100; select nvl(:sqlfile, "&sqlfile") sqlfile from dual; host echo "prompt # &sqlfile running ..." >sql/&sqlfile\.sql @sql/&sqlfile

# my_sqlscript_01 running ...

привет. В чем разница между обявлениями?

1.Инструкция var:

Var id number; exec:id:= 1; SELECT * FROM table_a WHERE id= :id ;

2 и 3.DEFINE и DECLARE

DEFINE id =1; SELECT * FROM table_a WHERE id= &id; DECLARE v_text VARCHAR2(10); -- declare BEGIN v_text:= "Hello"; --assign dbms_output.Put_line(v_text); --display END;

В чем разница между обявлениями переменных?

1. var - это способ объявления переменных в SQL*Plus, которые должны иметь какой-либо тип из указанных в справке. Их можно использовать в sql и в pl/sql как для подстановки каких-либо значений так и для сохранения значений, например:

Variable value varchar2(10); begin select "a" into:value from dual; end; / select:value from dual /

2. def - это способ объявления переменных в SQL*Plus, в которых можно указать текст, который будет подставлен вместо них в те места, где они используются. Так же с помощью этой команды можно получить список всех существующих переменных которые можно использовать для подстановки.

Если объявить переменную заранее и присвоить ей значение, то оно просто будет подставлено в тексте запроса:

Define value = dual select * from &value /

Этот запрос выдаст такой результат:

Old 1: select * from &value new 1: select * from dual D - X

В переменной можно указать почти любой текст:

Define value ="23 from dual" select 1&value / old 1: select 1&value new 1: select 123 from dual 123 ---------- 123

Если переменной заранее не присвоить какое-либо текстовое значение, а просто использовать в тексте запроса, то SQL*Plus предложит ввести ее значение:

Select * from &another_value /

После выполнения этого текста SQL*Plus отобразит на экране просьбу указать значения для переменной:

Enter value for another_value:

Указав которое (в нашем случае dual) и нажав Enter мы увидим такой результат:

Old 1: select * from &another_value new 1: select * from dual D - X

При вызове просто команды

Выведется примерно такой список уже существующих переменных:

DEFINE _DATE = "03-AUG-15" (CHAR) DEFINE _CONNECT_IDENTIFIER = "orcl" (CHAR) DEFINE _USER = "SYS" (CHAR) DEFINE _PRIVILEGE = "AS SYSDBA" (CHAR) DEFINE _SQLPLUS_RELEASE = "1102000200" (CHAR) DEFINE _EDITOR = "Notepad" (CHAR) DEFINE _O_VERSION = "Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - Production With the Partitioning, OLAP, Data Mining and Real Application Testing options" (CHAR) DEFINE _O_RELEASE = "1102000200" (CHAR) DEFINE VALUE = "dual" (CHAR)

3. declare - это часть объявления pl/sql блока кода define ... begin ... end после которой и до begin идет объявление переменных , которые можно использовать внутри блока begin ... end Например:

Declare val1 number; val2 varchar2(10); val3 date; begin select 1, "a" into val1, val2 from dual; val3:= sysdate; dbms_output.put_line(val1); dbms_output.put_line(val2); dbms_output.put_line(val3); end; /

Разница объявляемых переменных заключается в месте их применения и соответственно в месте хранения значений этих переменных.

    Подстановочные переменные хоста (host or bind variables ) и переменные замещения (substitute variable ) объявляются и хранятся в клиентской программе. Обявление переменных в клиенте зависит от клинтской программы и может несколько отличаться или вообще отсутствовать. Объявления def и var присходят от SQL*Plus, но поддерживаются также многими другими программными продуктами для работы с БД Oracle , например: Sql Developer, TOAD.

    1. Подстановочные переменные определённого типа данных объявляются оператором var . Инициализировать эти переменные возможно только в PL/SQL блоке. Могут использоваться для подстановки как входных так и выходных значений полей в DML запросах. Подстановочные переменные могут так же быть в анонимных PL/SQL блоках как для передачи так и для чтения. Подстановка переменных осуществляется на этапе подстановки (bind ) для входных значений, или определения результата (define output) для выходных значений, непосредственно перед выполнением (execute ). Важно: Подстановочные переменные не могут быть использованы для имён полей, таблиц, представлений и других объектов БД, так как они необходимы на этапе подготовки к выполнению (parse ).

      Переменные замещения объявляются и сразу же инициализируются символьным значением с помощью оператора def . Все встретившиеся имена переменных с префиксом & будут замещены символьным значением этих переменных. Замещение произойдёт в клиенте ешё до отправки DML/DDL/DCL выражения или PL/SQL блока на выполнение серверу БД, поэтому каких либо ограничений, какая их часть может быть замещена, не существует.

  • Переменные языка PL/SQL обьявляются в програмном блоке. Они не зависят от клиентской программы, так как в клиенте это только текст программы, который должен быть отправлен на сервер БД. Инициализируются переменные этого типа при выполнении програмного блока на сервере БД. Хранятся эти переменные в UGA (user global area ) так же на сервере БД.

    1. PL/SQL переменные обьявляются в аннонимном блоке после ключевого слова declare . В именных блоках переменные могут быть объявлены сразу после заголовка create|alter ... is|as объявления/изменения именного объекта. PL/SQL блоки могут содержать вложенные блоки. Зона видимости переменных ограничена блоком, в котором они объявлены. Время жизни переменных объявленых в пакетах (packaged variables ) - сессия, во всех остальных случаях - время выполнения именного объекта или анонимного блока.

Пример исполъзующий все виды вышеописаных переменных для динамического выполнения скриптов в SQL*Plus - есть некое клолличество скриптов, но зарение неизвестно какой из них вызывать, т.е. его надо определить динамически и тут же вызвать. Все виды переменных и алиас колонки умышлено используют одно и то же имя sqlfile:

Define sqlfile="default"; variable sqlfile varchar2(100); declare sqlfile varchar2(100); begin <> declare -- в этом блоке динамически определяем имя скрипта localFile constant varchar2(100) := "my_sqlscript_01"; begin sqlfile:= localFile; end; :sqlfile:= sqlfile; end; / column sqlfile new_value sqlfile noprint format A100; select nvl(:sqlfile, "&sqlfile") sqlfile from dual; host echo "prompt # &sqlfile running ..." >sql/&sqlfile\.sql @sql/&sqlfile

Программные единицы в составе БД Oracle - хранимые процедуры, функции и пакеты.

Хранимая процедура (stored procedure) — это программа, которая вы­полняет некоторые действия с информацией в и при этом сама хранится в базе данных. В Oracle хранимые процедуры можно мож­но писать на языках PL/SQL и Java.

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

Хранимые процедуры используются для многих целей. Хотя админи­страторы баз данных используют их для выполнения рутинных задач ад­министрирования, главной областью их применения являются все же при­ложения баз данных. Эти процедуры могут вызываться из прикладных программ, написанных на таких языках, как Java, С#, С++ или, а также из веб-сценариев, написанных на VBScript или JavaScript. Кроме того, эти процедуры можно вызывать в интерактивном режиме из команд­ной оболочки SQL*Plus.

Можно выделить следующие преимущества хранимых процедур:

В отличие от кода приложений, хранимые процедуры никогда не пере­даются на клиентские компьютеры. Она всегда находятся в базе данных и выполняются СУБД на том компьютере, где располагается сервер базы данных. Таким образом, они более безопасны, чем распространяемый код приложения, а кроме того, снижают сетевой трафик. Хранимые процеду­ры постепенно становятся предпочтительным режимом реализации логи­ки приложения в сети Интернет и корпоративных интрасетях. Еще одно преимущество хранимых процедур заключается в том, что SQL-операторы в них могут быть оптимизированы компилятором СУБД.

CREATE OR REPLACE PROCEDURE TESTPRM(NUM IN NUMBER)

in_COMP VARCHAR2(50);

SELECT COMPANY INTO in_COMP FROM customers

WHERE customers. CUST_NUM = NUM;

DBMS_OUTPUT. enable;

DBMS_OUTPUT. put_line(in_COMP);

SET SERVEROUTPUT ON

Функция – это подпрограмма, которая вычисляет значение.

CREATE OR REPLACE Function FindCourse

(name_in IN varchar2)

SELECT course_number

FROM courses_tbl

WHERE course_name = name_in;

fetch c1 into cnumber;

if c1%notfound then

WHEN OTHERS THEN

raise_application_error(-20001,"An error was encountered - "||SQLCODE||" - ERROR - "||SQLERRM);

CREATE OR REPLACE PACKAGE имя_модуля {IS AS}

описание_процедуры |

описание_функции |

объявление_переменной |

определение_типа |

объявление_исключительной_ситуации |

объявление_курсора |

END [имя_модуля];

Тело модуля определяется так:

CREATE OR REPLACE PACKAGE BODY имя_модуля {IS AS}

код_инициализации_процедуры |

код_инициализации_функции |

END [имя_модуля];

По большому счету тело модуля не является обязательной частью. Если заголовок модуля содержит описание, скажем нескольких переменных, типов и курсоров, то создавать тело модуля нет необходимости. Такой способ целесообразен при объявлении глобальных переменных, поскольку все объекты модуля видимы вне его пределов.

процедуры

Синонимы в БД Oracle

Синоним (Synonym) – это альтернативное имя (псевдоним) для объекта схемы. Если для какого либо объекта базы данных Oracle существует синоним, то к объекту из SQL запроса можно обращаться либо по его настоящему имени, либо по синониму. Так же они обеспечивают некоторый уровень безопасности, поскольку скрывают имя объекта и его , а так же делают прозрачным местоположение удаленных объектов распределенных баз данных.

Синонимы позволяют переименовывать и перемещать базовые объекты. При том переопределяется только синоним, а приложение не требует никаких модификаций.

Различают два типа синонимов:

Частный (PRIVATE)- синонимы содержаться в схеме конкретного пользователя и доступны только самому пользователю, и тем, кому он предоставил соответствующие права доступа.

Общий (PUBLIC)- этими синонимами владеет специальная группа пользователей – PUBLIC, в результате чего эти синонимы доступны всем пользователям базы данных.

CREATE SYNONYM [имя_синонима] FOR[имя_объекта]

CREATE PUBLIC SYNONYM [имя_синонима] FOR[имя_объекта]

Словарь данных - назначение, основные представления

Oracle поддерживает исчерпывающий словарь метаданных. Этот сло­варь описывает структуру таблиц, последовательностей, представлений, индексов, ограничений, хранимых процедур и многое другое. Он также содержит исходные тексты процедур, функций и триггеров.

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

Предположим, нужно узнать, какие таблицы с информацией о поль­зовательских и системных таблицах имеются в словаре данных. В этом может помочь следующий запрос:

SELECT Table_Name, Contents

WHERE Table_Name LIKE (" %TABLES%");

Будет возвращено около двадцати пяти строк. Одна из таблиц будет на­зываться USER_TABLES. Чтобы увидеть столбцы этой таблицы, нужно ввести:

DESC USER_TABLES;

Можно использовать эту стратегию для получения из словаря мета­данных информации об интересующих объектах и структурах. В табл. 4.1 перечислены многие из представлений и указано их назначение. Таблицы USER_SOURCE и USER_TRIGGERS полезны, когда требуется узнать, исходные тексты каких процедур и триггеров хранятся в настоящий мо­мент в базе данных.

Таблица 4.1. Метаданные в СУБД Oracle

Имя таблицы

Содержимое

Метаданные, описывающие словарь данных

Список таблиц, представлений, последовательно­стей и других структур, принадлежащих пользо­вателю

Структуры таблиц пользователя

USER_TAB_COLUMNS

Потомок таблицы USER TABLES. Содержит дан­ные о столбцах таблиц. Синонимом является COLS

Пользовательские представления

USER_ CONSTRAINTS

Пользовательские ограничения

USER_CONS_COLUMNS

Потомок таблицы USER_CONSTRAINTS. Содер­жит столбцы, на которые наложены ограничения

Метаданные, описывающие триггеры. Есть смысл запрашивать столбцы Trigger Name, Trigger Type и Trigger Event. Предупреждение: Trigger Body в действительности не содержит исходного кода триггера

Исходные тексты. Например, для получения тек­ста процедуры MYTRIGGER: SELECT Text FROM USER_SOURCE WHERE Name = "MYTRIGGER" AND Type = "PROCEDURE"

Dynamic performance views в словаре данных Oracle - назначение и основные представления

Locks currently held/requested on the instance

Sessions/processes holding a latch

Cursors opened by sessions on the instance

Sessions currently connected to the instance

Different resources sessions are currently waiting for



© 2024 beasthackerz.ru - Браузеры. Аудио. Жесткий диск. Программы. Локальная сеть. Windows