DevioLab CRYPTO TRADING AUTOMATION
LIVE
AUTOMATED CRYPTO TRADING • BINANCE
Автоматизуйте свій криптопортфель
Торгові боти DevioLab аналізують крипторинок, автоматично відкривають і закривають позиції та керують вашим портфелем на Binance 24/7.
CRYPTO 80 Bots
BINANCE Spot Trading
TRADING 24 / 7
Спробувати DevioLab
deviolab.com

SQL/CLR, Using .NET Procedural Code, UDT, TRIGGERS

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Не вказано

Інформація про роботу

Рік:
2015
Тип роботи:
Звіт про виконання лабораторної роботи
Предмет:
Інші
Варіант:
5

Частина тексту файла (без зображень, графіків і формул):

Міністерство Освіти І НАУКИ України Національний університет "Львівська політехніка" Інститут КНІТ Кафедра ПЗ ЗВІТ До лабораторної роботи № 5 На тему: “ SQL/CLR, Using .NET Procedural Code, UDT, TRIGGERS ” З дисципліни : " Бази даних. Частина 2 " Лектор: Доцент каф. ПЗ Павич Н.Я. Виконав: Прийняв: Доцент каф. ПЗ Павич Н.Я. Львів – 2010 Мета роботи: Ознайомитись із використанням CLR, збережених процедур, використанням користувацьких типів даних (UDT) та тригерів у SQL Server 2008 Завдання до лабораторної роботи Виконайте всі пункти і запишіть відповіді на поставлені в них питання. Створіть проект на .NET, опишіть функцію (UDF) згідно варіанту, каталогізуйте збірку та функцію у SQL Server, напишіть демонстраційний код T-SQL для використання цієї функції. Створіть користувацький тип даних (UDT) згідно варіанту, каталогізуйте збірку, і приведіть демонстраційний T-SQL код. UDT має містити щонайменше 2 поля різного типу даних (їх можна розмежувати, наприклад знаком #, $ тощо). Створіть тригер та продемонструйте його використання. Хід виконання завдання SQL/CLR Завантаження і каталогізації збірки catalog.sql use Lab5BD go -- create the assembly CREATE ASSEMBLY MetricConverter from 'F:\!\clr\MetricConverter.dll' go -- drop the assembly DROP ASSEMBLY MetricConverter go -- attempt create assembly with a different name CREATE ASSEMBLY MConverter from 'F:\!\clr\MetricConverter.dll' go -- attempt create assembly with a different case CREATE ASSEMBLY mConverter from 'F:\!\clr\MetricConverter.dll' go Error: Assembly "mConverter" already exists in database "Lab5BD" -- define a managed user-defined function CREATE FUNCTION KilogramsToPounds(@weight float) returns float external name MConverter.[DM.EssentialYukon.MetricConverter].KilogramsToPounds go sp_configure 'clr enabled', 1 go reconfigure go -- use it in T-SQL DECLARE @a float DECLARE @b float set @a = 10 set @b = dbo.KilogramsToPounds(@a) print @b GO --22.0462 -- drop it DROP FUNCTION KilogramsToPounds go -- attempt create function with a different case CREATE FUNCTION KilogramsToPounds(@weight float) returns float external name MConverter.[DM.EssentialYukon.MetricConverter].KilogramsToPOUNDS go Error: Could not find method 'KilogramsToPOUNDS' for type 'DM.EssentialYukon.MetricConverter' in assembly 'MetricConverter' -- drop the assembly DROP ASSEMBLY MConverter go --DROP ASSEMBLY failed because 'MConverter' is referenced by object 'KilogramsToPounds'. DROP FUNCTION KilogramsToPounds go DROP ASSEMBLY MConverter go --Command(s) completed successfully. Залежності збірки Каталогізовуємо збірку: dependency.sql use Lab5BD go -- create the assembly CREATE ASSEMBLY TempFunctions from 'F:\!\clr\TempFunctions.dll' go Виконуємо наступний Transact-SQL код для вивчення SQL Server представлень метаданих: -- select from appropriate system tables select * from sys.assemblies go select * from sys.assembly_files go select * from sys.assembly_references go  --create function against metricconverter dll CREATE FUNCTION KilogramsToPounds(@weight float) returns float external name MetricConverter.[DM.EssentialYukon.MetricConverter].KilogramsToPounds go Error: Assembly 'MetricConverter' is not visible for creating SQL objects. Use ALTER ASSEMBLY to change the assembly visibility. DROP ASSEMBLY MetricConverter go Error: DROP ASSEMBLY failed because the specified assemblies are referenced by assembly 'TempFunctions'. -- drop the assembly -- does this drop the dependent assembly? drop assembly TempFunctions go dependent assembly MetricConverter was dropped also --alter metricconverter to make it visible CREATE ASSEMBLY TempFunctions from 'F:\!\clr\TempFunctions.dll' go alter assembly MetricConverter with visibility = on go --go back and retry creating the function CREATE FUNCTION KilogramsToPounds(@weight float) returns float external name MetricConverter.[DM.EssentialYukon.MetricConverter].KilogramsToPounds go Command(s) completed successfully. moveasasm.sql use Lab5BD go -- 0. first, drop everything if exists(select name from sys.objects where name = 'KilogramsToPounds') drop function KilogramsToPounds go drop assembly TempFunctions go drop assembly MetricConverter go -- 1. Register the assembly CREATE ASSEMBLY MetricConverter from 'F:\!\clr\MetricConverter.dll' go -- 2. Extract assembly bytes to a variable declare @x varbinary(max) select @x = content from sys.assembly_files where name='F:\!\clr\MetricConverter.dll' --print @x -- 3. Change database and catalog from bytes use RCompany create assembly MetricConverter from @x go --check to see it exists in AdventureworksDW use RCompany select * from sys.assemblies MetricConverter 1 65536 metricconverter, version=0.0.0.0, culture=neutral, publickeytoken=null, processorarchitecture=msil 1 SAFE_ACCESS 1 2009-12-23 20:00:00.480 2009-12-23 20:00:00.480 1 CLRProcs (Using .NET Procedural Code) Пробую передати значення null в каталогізовану функцію: cataloging.sql CREATE DATABASE demo1 go use demo1 go -- create the assembly CREATE ASSEMBLY MetricConverter from 'F:\!\clrprocs\MetricConverter.dll' go -- catalog some of the functions as SQL UDFs CREATE FUNCTION KilogramsToPounds(@weight float) returns float external name MetricConverter.[DM.EssentialYukon.MetricConverter].KilogramsToPounds go CREATE FUNCTION FahrenheitToCentigrade(@temp float) returns float external name MetricConverter.[DM.EssentialYukon.MetricConverter].FahrenheitToCentigrade go -- use it declare @x float declare @y float set @x = -40 set @y = dbo.FahrenheitToCentigrade(@x) print @y go -- use it with NULL input declare @x float declare @y float set @x = NULL set @y = dbo.FahrenheitToCentigrade(@x) if @y is null print 'NULL' print @y go Error: 'FahrenheitToCentigrade' failed because parameter 1 is not allowed to be null. -- use weight conversion with null declare @x float declare @y float set @x = null set @y = dbo.KilogramsToPounds(@x) print 'KG' if @y is null print 'NULL' print @y go Error: 'KilogramsToPounds' failed because parameter 1 is not allowed to be null. -- fill in the table creation CREATE TABLE readings ( ReadingDate datetime not null, City varchar(100) not null, hitemp_far float, hitemp_cen as dbo.FahrenheitToCentigrade(hitemp_far) ) go ALTER TABLE readings WITH NOCHECK ADD CONSTRAINT PK_ReadingDate_City PRIMARY KEY CLUSTERED (ReadingDate, City) go CREATE INDEX IDX_hitemp_far ON readings(hitemp_far) go CREATE INDEX IDX_hitemp_cen ON readings(hitemp_cen) go Error: Column 'hitemp_cen' in table 'readings' cannot be used in an index or statistics or as a partition key because it is non-deterministic. drop table readings go DROP FUNCTION KilogramsToPounds go DROP FUNCTION FahrenheitToCentigrade go drop assembly MetricConverter go --build function FahrenheitToCentigrade with attribute --[SqlFunction(DataAccess = DataAccessKind.None, IsDeterministic = true, IsPrecise = true)] --create assembly MetricConverter and function FahrenheitToCentigrade CREATE TABLE readings ( ReadingDate datetime not null, City varchar(100) not null, hitemp_far float, hitemp_cen as dbo.FahrenheitToCentigrade(hitemp_far) persisted ) go creating index = Command(s) completed successfully. insert into readings values (GETDATE(), 'Lviv', 25), (GETDATE(), 'Kyiv', 35) select * from readings  sqltypes.sql use demo1 go drop table readings drop function FahrenheitToCentigrade drop function KilogramsToPounds drop assembly MetricConverter go -- create the assembly CREATE ASSEMBLY MetricConverter from 'F:\!\clrprocs\MetricConverter.dll' go create function FahrenheitToCentigrade(@temp float) returns float with RETURNS NULL ON NULL INPUT external name MetricConverter.[DM.EssentialYukon.MetricConverter].FahrenheitToCentigrade go -- òåïåð ôóíêö³ÿ ïîâèííà ïîâåðòàòè NULL ÿêøî ¿é ïåðåäàäóòü NULL, à ñàìà ô-ö³ÿ âèêëèêàòèñÿ íå áóäå -- use it declare @x float declare @y float set @x = 10 set @y = dbo.FahrenheitToCentigrade(@x) print @y go -- -12.2222 -- use it with NULL input declare @x float declare @y float set @x = NULL set @y = dbo.FahrenheitToCentigrade(@x) if @y is null print 'NULL' print @y go -- NULL drop function FahrenheitToCentigrade drop assembly MetricConverter go -- create the assembly CREATE ASSEMBLY MetricConverter from 'F:\!\clrprocs\MetricConverter.dll' go -- TO DO: Function declaration here --public static SqlDouble CentigradeToFahrenheit(SqlDouble v) -- { if (v.IsNull == true) -- return 0; -- return (v*9)/5+32; } create function CentigradeToFahrenheit(@temp float) returns float external name MetricConverter.[DM.EssentialYukon.MetricConverter].CentigradeToFahrenheit go -- use it with NULL input declare @x float declare @y float set @x = NULL set @y = dbo.CentigradeToFahrenheit(@x) print @y go -- 0 -- TO DO: Function declaration here --public static SqlDecimal CentigradeToFahrenheitDecimal(SqlDecimal v) -- { if (v.IsNull == true) return 0; -- return (v * 9) / 5 + 32; } create function CentigradeToFahrenheitDecimal(@temp decimal) returns decimal external name MetricConverter.[DM.EssentialYukon.MetricConverter].CentigradeToFahrenheitDecimal go declare @x decimal declare @x1 decimal declare @x2 decimal declare @y decimal declare @y1 decimal declare @y2 decimal set @x = 1.56 set @x1 = .56 set @x2 = 1.56E6 set @y = dbo.CentigradeToFahrenheitDecimal(@x) set @y1 = dbo.CentigradeToFahrenheitDecimal(@x1) set @y2 = dbo.CentigradeToFahrenheitDecimal(@x2) print @y -- 36 (32,866666666666666666666666666667) print @y1 -- 34 (32,311111111111111111111111111111) print @y2 -- 2808032 (866698,66666666666666666666666667) go Тепер створюю запит зі звертанням до збережених процедур: parmdirection.sql use demo1 go -- create the assembly CREATE ASSEMBLY MetricConverter from 'F:\!\clrprocs\MetricConverter.dll' go drop procedure AddToTemp drop procedure AddAndReturnBoth drop procedure AddAndReturnBothOut drop ASSEMBLY MetricConverter go create procedure AddToTemp(@temp float out, @delta float) as external name MetricConverter.[DM.EssentialYukon.AdditionalClass].AddToTemp go create procedure AddAndReturnBoth(@temp float, @delta float, @rez_f float out, @rez_c float out) as external name MetricConverter.[DM.EssentialYukon.AdditionalClass].AddAndReturnBoth go create procedure AddAndReturnBothOut(@temp float, @delta float, @rez_f float out, @rez_c float out) as external name MetricConverter.[DM.EssentialYukon.AdditionalClass].AddAndReturnBothOut go -- try them out declare @a float declare @c float declare @d float set @a = 10 exec AddToTemp @a out, 44 print @a -- 54 exec AddAndReturnBoth 22, 44, @c out, @d out print @c -- 66 print @d -- 18.8889 exec AddAndReturnBothOut 33, 44, @c out, @d out print @c -- 77 print @d -- 25 UDT ComplexNumberClass.cs
Антиботан аватар за замовчуванням

2015

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!