РАЗРАБОТКА ПРОСТОГО БЛОКА
Структура простого блока DECLARE BEGIN EXCEPTION END;
Объявление скалярных переменных identifier [CONSTANT] datatype [NOT NULL] [:= | DEFAULT expr]; identifier [CONSTANT] datatype [NOT NULL] [:= | DEFAULT expr]; Не имеют компонент Хранят единственное значение Основные типы: –BINARY_INTEGER –NUMBER [(m,n)] –CHAR [(m)] –LONG –LONG RAW –VARCHAR2(m) –DATE –BOOLEAN
Объявление скалярных переменных v_genderCHAR(1); v_countBINARY_INTEGER := 0; v_total_salNUMBER(9,2) := 0; v_order_dateDATE := SYSDATE + 7; c_tax_rateCONSTANT NUMBER(3,2) := 8.25; v_validBOOLEAN NOT NULL := TRUE; v_genderCHAR(1); v_countBINARY_INTEGER := 0; v_total_salNUMBER(9,2) := 0; v_order_dateDATE := SYSDATE + 7; c_tax_rateCONSTANT NUMBER(3,2) := 8.25; v_validBOOLEAN NOT NULL := TRUE;... v_last_names_emp.last_name%TYPE; v_last_names_emp.last_name%TYPE; v_first_name s_emp.first_name%TYPE; v_first_name s_emp.first_name%TYPE; v_balanceNUMBER(7,2); v_balanceNUMBER(7,2); v_minimum_balancev_balance%TYPE := 10; v_minimum_balancev_balance%TYPE := 10; v_last_names_emp.last_name%TYPE; v_last_names_emp.last_name%TYPE; v_first_name s_emp.first_name%TYPE; v_first_name s_emp.first_name%TYPE; v_balanceNUMBER(7,2); v_balanceNUMBER(7,2); v_minimum_balancev_balance%TYPE := 10; v_minimum_balancev_balance%TYPE := 10;...
Составные типы данных Таблицы PL/SQL Первичный ключЗначение 1Jones 2Smith 3Maduro... BINARY_INTEGERСкалярный тип Записи Поле1 Поле2 Поле3
Создание таблицы PL/SQL TYPE type_name IS TABLE OF datatype [NOT NULL] INDEX BY BINARY_INTEGER; identifiertype_name; TYPE type_name IS TABLE OF datatype [NOT NULL] INDEX BY BINARY_INTEGER; identifiertype_name;... TYPE name_table_type IS TABLE OF VARCHAR2(25) TYPE name_table_type IS TABLE OF VARCHAR2(25) INDEX BY BINARY_INTEGER; INDEX BY BINARY_INTEGER; first_name_table name_table_type; first_name_table name_table_type; last_name_tablename_table_type; last_name_tablename_table_type; TYPE name_table_type IS TABLE OF VARCHAR2(25) TYPE name_table_type IS TABLE OF VARCHAR2(25) INDEX BY BINARY_INTEGER; INDEX BY BINARY_INTEGER; first_name_table name_table_type; first_name_table name_table_type; last_name_tablename_table_type; last_name_tablename_table_type;...
Создание записи TYPE type_name IS RECORD (field_name1 field_type [NOT NULL {:=|DEFAULT} expr], field_name2 field_type [NOT NULL {:=|DEFAULT} expr],...); identifiertype_name; TYPE type_name IS RECORD (field_name1 field_type [NOT NULL {:=|DEFAULT} expr], field_name2 field_type [NOT NULL {:=|DEFAULT} expr],...); identifiertype_name;... TYPE emp_record_type IS RECORD (last_nameVARCHAR2(25), first_nameVARCHAR2(25), genderCHAR(1)); employee_recordemp_record_type;... TYPE emp_record_type IS RECORD (last_nameVARCHAR2(25), first_nameVARCHAR2(25), genderCHAR(1)); employee_recordemp_record_type;... dept_records_dept%ROWTYPE; emp_records_emp%ROWTYPE;... dept_records_dept%ROWTYPE; emp_records_emp%ROWTYPE;...
Область видимости переменных... x BINARY_INTEGER; BEGIN... DECLARE y NUMBER; BEGIN... END;... END;... x BINARY_INTEGER; BEGIN... DECLARE y NUMBER; BEGIN... END;... END; Область видимости y Область видимости x
Присвоение значений переменным identifier := expr; plsql_table_name (primary_key_value) := expr; plsql_record_name.field_name := expr; identifier := expr; plsql_table_name (primary_key_value) := expr; plsql_record_name.field_name := expr; v_max_sal:= v_sal; last_name_table (3) := 'Maduro'; emp_record.last_name:= 'Maduro'; emp_record.first_name:= 'Elena'; emp_record.gender:= 'F'; v_max_sal:= v_sal; last_name_table (3) := 'Maduro'; emp_record.last_name:= 'Maduro'; emp_record.first_name:= 'Elena'; emp_record.gender:= 'F';
Присвоение значений переменным v_weight := v_weight + 1; v_new_locn := 'Western '|| v_new_locn; v_weight := v_weight + 1; v_message := v_message || ' is in stock'; v_new_locn := 'Western '|| v_new_locn; DECLARE v_weight NUMBER(3) := 600; v_weight NUMBER(3) := 600; v_message VARCHAR2(255) := 'Product 10012'; v_message VARCHAR2(255) := 'Product 10012';BEGINSub-Block DECLARE DECLARE v_weight NUMBER(3) := 1; v_weight NUMBER(3) := 1; v_message VARCHAR2(255) := 'Product 11001'; v_message VARCHAR2(255) := 'Product 11001'; v_new_locn VARCHAR2(50) := 'Europe'; v_new_locn VARCHAR2(50) := 'Europe'; BEGIN BEGIN END; END;END;
Операторы в PL/SQL Логические Арифметические Конкатенации Возведения в степень (**) Скобки Как в SQL } } v_count:= v_count + 1; v_equal:= (v_n1 = v_n2); v_valid:= (v_emp_id IS NOT NULL);
Функции в PL/SQL Доступны: –Числовые –Символьные –Преобразования типов –Работы с датами Недоступны: –GREATEST –LEAST –Групповые Как в SQL } } v_mailing_address := v_name||CHR(10)|| v_address||CHR(10)||v_country||CHR(10)|| v_zip_code; v_mailing_address := v_name||CHR(10)|| v_address||CHR(10)||v_country||CHR(10)|| v_zip_code; v_last_name:= UPPER (v_last_name);
Практическое занятие 1. Какие из приведенных описаний неверны и почему? Declare V_idNumber (7); Declare V_idNumber (7); Declare V_x, v_y, v_zVARCHAR (7); Declare V_x, v_y, v_zVARCHAR (7); Declare V_birtdatedate not null; Declare V_birtdatedate not null; Declare V_in_stockboolean := 1; Declare V_in_stockboolean := 1; Declare Emp_recordemp_record_type; Declare Emp_recordemp_record_type;
Практическое занятие 2. Создайте процедуру, принимающую два числа через переменные. Первое нужно разделить на второе и к результату прибавить второе число. Результат должен быть записан в переменную PL/SQL и выведен на экран. 3. Создайте функцию, вычисляющую общее вознаграждение за год. Функции должны передаваться годовая зарплата и процент премиальных. Премиальные необходимо преобразовать из целого числа в десятичное. Если зарплата не определена, то функция должна выдавать значение «ноль». Если премия не определена, функция должна выдавать только зарплату.