lab1_2012_92 (1037560), страница 2
Текст из файла (страница 2)
Proc(параметры) Public
{
код процедуры
quit
}
Пример работы с динамическим запросом:
set o=##class(%ResultSet).%New("%DynamicQuery:SQL")
do o.Prepare("select поля from таблица where условие" )
do o.Execute()
while o.Next()
{
set a=o.Data("поле")
write !,a
}
В среде Cache` Terminal вызвать процедуру:
do процедура^программа(параметр)
Преобразовать процедуру в метод класса секции и продемонстрировать ее выполнение в Терминале как метод класса и в Портале как хранимую процедуру.
6.2. Освоить работу с запросами
В среде Cache` Студия создать запрос InVuz(вуз), который возвращает список секций, имеющихся в лицеях указанного вуза, а также номер, город и учеников лицея с сортировкой по городам.
Определить запрос как хранимую процедуру и продемонстрировать ее выполнение в Портале.
Дополнительное задание:
Задание 7.1. Работа с коллекциями.
В класс "лицей" - добавить свойство:
-
Dir - специальности — список (массив) строковых.
В среде Cache` Портал (раздел SQL, пакет USER) продемонстрировать выполнение SQL операторов для выполнения запросов, например:
-
Просмотр списка всех лицеев, имеющих некоторую специальность.
-
Добавление/удаление специальности лицею.
В среде Cache` Terminal продемонстрировать (или написать соответствующую процедуру) для добавления/удаления специальностей, используя объектный синтаксис.
В среде Cache` Terminal продемонстрировать (или написать соответствующую процедуру) для добавления/удаления специальностей, используя глобалы.
Задание 7.2. Преобразование классов объектов.
В среде Cache` Terminal продемонстрировать (или написать соответствующую процедуру на языке Cache` Object Script в среде Cache` Studio и вызвать ее из среды Cache` Terminal) преобразование объекта класса «школа» в объект класса «Лицей» и наоборот с указанием вуза. Реализуется через обращение к глобалам.
Задание 8. Дополнительные возможности работы с объектами
8.1. Скрытые свойства. Вложенные объекты
Создать класс EduPrice (стоимость занятий) — ВСТРОЕННЫЙ, содержащий поля:
-
sum (стоимость обучения) — целое,
-
hours (количество часов обучения) — целое.
В класс "секция" - добавить свойство:
-
sal (прибыль) — объект класса стоимость, СКРЫТОЕ (устанавливается в Инспекторе свойств в Студии).
и методы:
-
spr (стоимость, количество) - устанавливает значения стоимость и количество для прибыли секции, выходных параметров нет. Обращение к полям через объектный синтаксис.
-
gpr() — возвращает значение прибыли (=стоимость*количество*количество_учеников).
В среде Cache` Терминал открыть объект секции и продемонстрировать вызов методов для задания и просмотра его прибыли. В Портале продемонстрировать содержимое таблицы секция.
8.2. Переопределение обработчиков событий
Создать класс SectArhiv (архив) — хранимый, содержащий поля:
-
sname — строковое,
-
school — строковое,
-
city — строковое,
-
-
his (источник записи) — строковое.
В классе "секция" переопределить метод класса для обработки события %OnAfterSave() так, чтобы он при сохранении НОВОЙ секции добавлял в Архив запись с названием секции и школы для новой секции (использовать встроенный SQL). Значение поля his = «obj».
В Терминале создать и сохранить секции (методы %New() и %Save()). В Портале продемонстрировать содержимое таблицы Архив.
В Терминале открыть и изменить секцию (методы %OpenId() и %Save()). В Портале продемонстрировать содержимое таблицы Архив.
В Портале добавть секции (sql запрос INSERT). В Портале продемонстрировать содержимое таблицы Архив.
8.3.Вычисляемые поля
В класс "школа" - добавить свойство:
-
avsal (средняя стоимость) — целое, ВЫЧИСЛЯЕМОЕ.
и переопределить его методы:
-
GET — возвращает среднюю стоимость занятий в платных секциях для данной школы (использовать встроенный SQL),
-
SET — для всех платных секций данной школы устанавливает стоимость занятий равной указанной (использовать встроенный SQL).
В среде Cache` Terminal открыть объект школы и продемонстрировать работу с вычисляемым полем:
write объект.avsal
set объект.avsal=3000
В среде Портала продемонстрировать соответствующие изменения в таблице секций.
Задание 9: Дополнительные возможности работы с таблицами
9.1. Вычисляемые поля таблиц
В класс "школа" - добавить свойство:
-
insec ( количество секций для данной школы) — целое, SQL-ВЫЧИСЛЯЕМОЕ. Не переопределены методы Get и Set. Определить SQL-формулу для вычисления.
Пример:
Property cs As %Integer [ Calculated,
SqlComputeCode = { set n={поле} &sql(select поле into :c from таблица where поле=:n)
set {cs}=c}, SqlComputed ];
В классе "Лицей" - переопределить свойство:
-
insec ( количество секций для всех школ данного вуза в данном городе).
В среде Cache` Портал продемонстрировать содержимое таблиц школа и Лицей.
9.2. Триггеры
В класс "секция" добавить триггер:
-
ПОСЛЕ ДОБАВЛЕНИЯ - при добавлении секции добавлять в Архив запись с названием секции, школы и города для новой секции (использовать встроенный SQL). Значение поля his = «sql».
В Терминале создать и сохранить секции (методы %New() и %Save()). В Портале продемонстрировать содержимое таблицы Архив.
В Портале добавть секции (sql запрос INSERT). В Портале продемонстрировать содержимое таблицы Архив.
Вопросы для самопроверки:
-
Возможности создания классов и их свойств в среде Cache` Studio.
-
Назначение и возможности утилит Cache` Studio, Cache` Портал и Cache` Терминал.
-
Как связаны между собой таблицы, объекты и глобалы?
-
Что такое класс и что такое пакет?
-
Как связаны между собой названия классов и глобалов?
-
Как связаны экстенты базового и производного классов?
-
Перечислите основные функции работы с объектами хранимых классов.
-
Каким образом можно обращаться к объектам классов как к реляционным таблицам?
-
Где можно просмотреть данные в виде таблиц и в виде глобалов?
-
Каким образом можно работать со списками и массивами, как хранятся их элементы?
-
Каким образом формируются глобалы? В каких глобалах хранятся производные классы?
-
Как импортировать структуры и данные СУБД Cache`?
-
Метод класса и метод экземпляра класса: чем они отличаются, как определяются и как вызываются?
-
Что такое полиморфизм? Приведите пример виртуального вызова.
-
Применение встроенного SQL. Передача параметров.
-
Назначение и использование объекта %ResultSet. Его основные методы.
-
Как определяются и вызываются хранимые процедуры?
-
Назначение, типы и определение триггеров. Как они работают?
-
Что такое вычисляемые поля? Как задаются и чем отличаются вычисляемые поля для объектов и запросов?
-
Что такое хранимый и встроенный классы, чем они отличаются?
В отчет:
-
Описания классов.
-
Тексты SQL запросов, команд и процедур на языке COS.
-
Содержимое глобалов и таблиц (скриншоты из Портала).