Использование курсоров
LES BIENS ORDINAIRES ET LES BIENS DE GIFFEN Considérons les variations de prix. Supposons: une diminuation du prix de bien 1; le rpix du bien 2 et le revenu restant inchangé. Quelle est la variation de la quantité demandée de bien 1? Quand le prix du bien 1 diminue, la droite de budget s’aplatit, le choix optimal de bien 1 se déplace également vers la droite: la quantité demandée de ce bien augmente = un bien ordinaire. Un bien de Giffen = une diminuation du prix du bien 1 entraîne une réduction de la demande de ce bien. La variation du prix est dans certaine mesure équivalent à une variation de revenu. Bien que le revenu nominal reste constant, une modification du prix d’un bien affecte le pouvoir d’achat et par conséquent, la demande. LE CHEMIN D’EXPANSION DU PRIX ET LA COURBE DE DEMANDE Le prix du bien 1 se modifie; le prix du bien 2 et le revenu restent inchangé. La droite de budget pivote. Nous pouvons joindre les différents points optimaux pour tracer le. Le chemin d’expansion du prix donne le choix optimaux quand le prix du bien 1 se modifie: La courbe de demande relie la quantité optimale de bien 1 à son prix:
Ordinairement, quand le prix d’un bien augmente, la demande pour ce bien diminue. Le prix et la quantité d’un bien varient donc en sens opposé: ou . EXEMPLES
ES SUBSTITUTS ET LES COMPLÉMENTS Déf. Si la demande de bien 1 augmente quand le prix du bien 2 s’accroît, nous disont que le bien 1 est un substitut du bien 2: ou . Par contre, si la demande de bien 1 diminue quand le prix du bien 2 augmente, nous disons que le bien 1 est un complément du bien 2: ou . LA FONCTION DE DEMANDE INVERSE Exprime le prix en fonction de la quantité. Autrement dit, pour chaque niveau de demande de bien1, la fonction de demande inverse mesure le prix du bien 1 nécessaire pour que le consommateur choisisse ce niveau de consommation. Cette fonction mesure donc la même relation que la fonction de demande directe mais simplement sous un autre angle: Использование курсоров
В ответ на запросы пользователей SQL Server может возвращать многие сотни тысяч строк, общим объемом в десятки мегабайт. Передача такого объема данных по сети одновременно множеству пользователей может вызвать значительный трафик, что отрицательно скажется на работе всех пользователей сети. Кроме того, не каждый клиент имеет достаточный объем памяти, чтобы сохранить все полученные данные. К тому же обычно клиент работает лишь с небольшой частью данных, например отдельной строкой, а не со всем набором строк. То есть клиенту не нужен одновременно весь набор данных. Для него предпочтительнее получать с сервера результат выборки отдельными порциями. Это снижает требования к мощности клиентского компьютера и уменьшает интенсивность сетевого трафика. Кроме того, часто бывает просто необходимо иметь возможность обратиться к конкретной строке выборки по ее номеру, однако с помощью команды select сделать это довольно трудно. Механизмом, обеспечивающим хранение результата выборки на сервере и предоставляющим пользователю возможность доступа к любой строке выборки по ее номеру, являются курсоры (cursors). Курсор является своего рода окном, накладываемым на результат выборки. Пользователь может работать в каждый момент времени только с одной строкой, но, перемещая окно, он может получить доступ к любой строке выборки. Исходный набор данных, к которому обращается пользователь, называется полным набором строк (complete set of rows). В результате выполнения запроса select пользователю возвращает набор данных, называемый результирующим набором (resulting set) и формируемый в результате применения к полному набору строк горизонтального и вертикального фильтров. Горизонтальная фильтрация выполняется с помощью указания одного или более логических условий в разделе where. Вертикальная же фильтрация подразумевает включение в результирующий набор не всех столбцов исходного набора данных. Горизонтальная и вертикальная фильтрации могут применяться как по отдельности, так и вместе. Курсоры SQL Server работают с результирующим набором, предлагая пользователям дополнительные средства по его обработке. При создании курсора пользователь указывает запрос select, на основе которого формируется результирующий набор данных. При помощи курсоров в каждый момент времени пользователь может работать только с одной строкой. Каждая команда работы с данными курсора оперирует лишь с одной строкой результирующего набора. Если курсор содержит 1000 строк и необходимо подсчитать сумму по одному из столбцов, то нужно будет организовать цикл и последовательно обращаться к каждой строке. В итоге необходимо будет выполнить 1000 команд чтения данных. Того же результата можно добиться с помощью единственной команды select. Однако если требуется сформировать в приложении раскрывающийся список, добавляя в него элементы по одному, то применение команды select будет невозможно. Пользователь должен будет последовательно считывать данные из каждой строки и на их основе формировать каждый элемент раскрывающегося списка. В этом случае именно курсоры предлагают лучшее решение задачи. Многие языки программирования позволяют обращаться к произвольным элементам результирующего набора. То есть, получив от сервера в ответ на запрос select результирующий набор, приложение автоматически формирует набор записей (record set), который позволяет пользователям обращаться к отдельной строке результирующего набора в произвольном порядке. Возможно, при формировании раскрывающегося списка этот подход будет более предпочтителен. Однако в этом случае весь набор данных хранится на клиенте. Применение курсоров SQL Server дает преимущества, когда обработка данных большей частью происходит на сервере, а не на клиенте. То есть приложение формирует на сервере набор данных, после чего отправляет запросы, обращающиеся к этому набору. В ответ может отправляться только результат обработки данных, размер которого значительно меньше объема всего результирующего набора. Операции обработки данных с участием курсоров выполняются заметно медленнее обычных команд обработки данных и не позволяют работать со всеми строками одновременно. Поэтому всегда, когда это возможно, следует избегать курсоров и пользоваться командами select, update, insert и delete.
|