2015-05-04 1 views
3

В классе нам было предложено назвать несколько функций PL/SQL и указать их использование. Кто-то упомянул CREATE FUNCTION, и я заметил, что Oracle обозначил это как инструкцию, а не функцию.Разница между функцией и оператором

Я не могу дать очень хороший ответ о различии между ними. Я думаю, что утверждение является скорее декларативным инструментом, который указывает, что программа должна выполнить, тогда как функция кажется более процедурной, мы определяем процедуру для новой функции в инструкции CREATE FUNCTION.

Различия кажутся более понятными для чего-то вроде утверждения SELECT, может кто-то помочь с четким разграничением между ними?

ответ

1

Заявление является частью кода, который выполняется. Это команда. Он что-то делает. Пример:

печать «Hello World»

Функция представляет собой блок кода, который вы вызываете с параметрами и возвращает значение (даже если это значение не определено). Пример:

функция (а) {возвращают * 2}

0

слово "заявление" имеет два разных значения в SQL и PL/SQL.

В узком техническом смысле CREATE FUNCTION является типом инструкции SQL, а CREATE FUNCTION содержит инструкции PL/SQL.

В более общем смысле оператор SQL представляет собой декларативный код, который сообщает базе данных «что истинно» или «что нужно сделать» без подробных инструкций по «как это сделать». Функция или любой PL/SQL-блок является обязательным кодом, который сообщает базе данных точно, «что делать». Декларативный SQL обычно проще и быстрее, чем императивный PL/SQL, поэтому обычно лучше всего выполнять большую часть работы в SQL и просто склеивать его вместе с PL/SQL.


SQL имеет около 170 команд (как определено V$SQLCOMMAND), организованных в около 31 типов операторов, организованных в the below 6 categories. Команда CREATE FUNCTION представляет собой тип оператора CREATE в категории DDL. Эта схема классификации не на 100% ясна из базы данных и руководств, но я использовал ее для thoroughly classify all SQL statements.

Data Definition Language (DDL) Statements 

Data Manipulation Language (DML) Statements 

Transaction Control Statements 

Session Control Statements 

System Control Statement 

Embedded SQL Statements 

В PL/SQL, наиболее blocks представляют собой последовательность операторов. Эти заявления могут быть присваиванием, петля, принесите, блок и т.д.

enter image description here


Чтобы сделать вещи более запутанными, в 1 SQL-оператор может содержать PL/SQL оператор:

with function f return number is begin return 1; end; select f from dual; 
+0

Спасибо, можете ли вы сказать что-то о том, как «функция» отличается от инструкции SQL. –

1

CREATE FUNCTION - заявление. Сама функция является FUNCTION. Запуск оператора, создающего эту функцию, позволяет вам получить доступ к этой функции.

В общем, если вы создаете что-либо в базе данных, вы используете инструкцию (в частности, инструкцию языка определения данных (DDL)). Элемент, который вы создаете, будь то таблица, функция, пакет и т. Д., Может затем ссылаться в будущих операциях.