Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Otvety_BD_Full.docx
Скачиваний:
39
Добавлен:
13.09.2019
Размер:
945.28 Кб
Скачать
    1. Пример хранимой процедуры.

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

CREATE OR REPLACE PROCEDURE Customer_Insert (  newname IN char, newareacode IN char, newphone IN char,  artistnationality IN char  )  AS  rowcount integer(2);  CURSOR artistcursor IS SELECT ArtistID FROM ARTIST  WHERE Nationality = artistnationality;  BEGIN  SELECT Count(*) INTO rowcount FROM  CUSTOMER  WHERE Name = newname AND AreaCode = newareacode AND PhoneNumber = newphone;  IF rowcount > 0 THEN BEGIN  DBMS_OUTPUT.PUT_LINE ('There is client in DB! Count is ' I I rowcount); RETURN;  END; END IF;  INSERT INTO CUSTOMER  (CustomerlD, Name, AreaCode, PhoneNumber)  VALUES (CustID.NextVal, newname, newareacode, newphone);  FOR artist IN artistcursor LOOP  INSERT INTO CUSTOMER_ARTIST_INT (CustomerlD, ArtistID)  VALUES (CustID.CurrVal, artist.Artist ID); END LOOP;  DBMS_OUTPUT.PUT_LINE ('Client is added!');  END;  /

  1. Pl/sql. Функции

По своей сути функция это то же, что и процедура, она может принимать параметры по всем тем же правилам, что и процедуры, и кроме всего она может возвращать значения! Но не применением OUT типа передаваемого параметра, а сама по себе. То есть функция, принимает параметры и возвращает одно(!), значение! В принципе в функции можно применять параметры с типом OUT - но это очень плохая идея! Определение функции таково:

-------------- CREATE [OR REPLACE] FUNCTION - имя_функции -----------------------------

-------------- (аргумент [IN] [OUT] [IN OUT] тип, ..... ) AS [IS] ---------------------

-------------- тело процедуры ---------------------------------------------------------

-------------- RETURN (возвращаемое_значение) -----------------------------------------

Посредством оператора RETURN функция возвращает значение. Функция, как правило, вызывается внутри какого-либо определения, т.к. вызывать функцию как оператор нет смысла.

В PL/SQL существует ряд встроенных функций:

CHR(x)

Возвращает символ, имеющий код, равный x в наборе символов БД.

CONCAT(строка 1, строка2)

Возвращает "строка 1", конкатенированную, (сцепленную) со "строка 2". То же что и операция "||"!

INITCAP(строка)

Возвращает "строка", в которой каждое слово начинается с прописной буквы и продолжается строчными. Слова разделяются пробелами или не буквенно-цифровыми символами. Символы не являющиеся буквами не изменяются.

LOWER(строка)

Возвращает "строка", со строчными символами. Символы не являющиеся буквами не изменяются.

LPAD(строка 1, х, строка 2)

Возвращает "строка 1", дополненную слева до размера х символами "строка 2". Если размер "строка 2", меньше х, то при необходимости она дублируется. Если размер "строка 2" больше х, то берутся только первые х ее символов. Если "строка 2" не указана, то ее заменяют символы пробела.

LTRIM(строка 1, строка 2)

Возвращает "строка 1", в которой удалены крайние левые символы, идентичные символам "строка 2". Значением по умолчанию для "строка 2", является знак пробела. "строка 1" просматривается с левого края, и при встрече первого символа не совпадающего с "строка 2", возвращается результат.

TRANSLATE(строка_символов, заменяемая_трока, вносимая_строка)

Возвращает "строка_символов", в которой все вхождения каждого символа "заменяемая_трока" замещаются соответствующим символом "вносимая_строка". Функция TRANSLATE, является расширением функции REPLACE. Если "заменяемая_трока" длиннее чем "вносимая_строка", все ее лишние символы удаляются поскольку для них нет соответствующих символов во "вносимая_строка". "вносимая_строка" не может быть пустой. Oracle интерпретирует пустую строку как значение NULL, а если любой аргумент функцииTRANSLATE является NULL, то результат тоже будет NULL.

UPPER(строка)

Возвращает "строка", в которой все символы прописные. Символы не являющиеся буквами не изменяются.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]