SQLize
Online
/
PHPize Online
/
SQLtest Online
A
A
A
Share
Donate
Blog
Popular
Donate
A
A
A
Share
Blog
Popular
SQLize.online is a free online SQL environment for quickly running, experimenting with and sharing code.
You can run your SQL code on top of the most popular RDBMS including MySQL, MariaDB, SQLite, PostgreSQL, Oracle and Microsoft SQL Server.
SQL code:
Upload
Copy
Format
Clear
USE master; CREATE DATABASE lab8 ON PRIMARY ( NAME = lab8_Primary, FILENAME = "C:\DB\lab8\lab8_Primary.mdf", SIZE = 10MB, MAXSIZE = 100MB, FILEGROWTH = 5MB ) LOG ON ( NAME = lab8_Log, FILENAME = "C:\DB\lab8\lab8_Log.ldf", SIZE = 5MB, MAXSIZE = 50MB, FILEGROWTH = 5MB ); GO USE lab8; GO CREATE TABLE Films ( FilmID INT IDENTITY(0,1) PRIMARY KEY, FilmName NVARCHAR(50) NOT NULL, FilmGenre TINYINT DEFAULT 0, CONSTRAINT CK_FilmGenre CHECK (FilmGenre IN (0, 1, 2)), CreatedDate DATE NOT NULL, Language TINYINT DEFAULT 0, CONSTRAINT CK_Language CHECK (Language IN (0, 1, 2, 3)), FullName AS FilmName + ' ' + CONVERT(NVARCHAR, CreatedDate) ); INSERT INTO Films VALUES (N'Прибытие поезда на вокзал города Ла-Сьота', 2, '1896-01-06', 3), (N'Огни большого города', 2, '1931-01-30', 1), (N'Броненосец "Потёмкин"', 2, '1925-12-24', 0), (N'Проверка на дорогах', 2, '1971-03-16', 0), (N'Солярис', 2, '1972-02-5', 0), (N'Добро пожаловать, или Посторонним вход воспрещён', 2, '1964-10-09', 0), (N'Четыреста ударов', 2, '1959-05-04', 2), (N'Не Горюй', 2, '1969-12-22', 0); SELECT * FROM Films; ------------------Задание 1---------------------------------------------- -- Создать хранимую процедуру, производящую выборку из некоторой таблицы -- и возвращающую результат выборки в виде курсора. ------------------------------------------------------------------------- IF OBJECT_ID(N'dbo.film_cursor', N'P') IS NOT NULL DROP PROCEDURE dbo.film_cursor; GO CREATE PROCEDURE dbo.film_cursor @film_cursor CURSOR VARYING OUTPUT AS SET @film_cursor = CURSOR FORWARD_ONLY STATIC FOR SELECT FilmID, FullName FROM dbo.Films; OPEN @film_cursor; GO DECLARE @film_cursor CURSOR; EXEC dbo.film_cursor @film_cursor = @film_cursor OUTPUT; DECLARE @FilmID INT, @FullName NVARCHAR(81); FETCH NEXT FROM @film_cursor INTO @FilmID, @FullName; WHILE (@@FETCH_STATUS = 0) BEGIN PRINT 'Film ID: ' + @FilmID + ', Full name of the film: ' + @FullName; FETCH NEXT FROM @film_cursor INTO @FilmID, @FullName; END; CLOSE @film_cursor; DEALLOCATE @film_cursor; GO -------------------------Задание 2----------------------------- --Модифицировать хранимую процедуру п.1. таким образом, чтобы --выборка осуществлялась с формированием столбца, значение --которого формируется пользовательской функцией. --------------------------------------------------------------- --Пользовательская функция вычисления возраста фильма IF OBJECT_ID(N'dbo.GetFilmAge', N'FN') IS NOT NULL DROP FUNCTION dbo.GetFilmAge; GO CREATE FUNCTION dbo.GetFilmAge(@CreatedDate DATE) RETURNS INT AS BEGIN DECLARE @CurrentYear INT; DECLARE @FilmAge INT; SET @CurrentYear = YEAR(GETDATE()); SET @FilmAge = @CurrentYear - YEAR(@CreatedDate); RETURN @FilmAge; END; GO IF OBJECT_ID(N'dbo.usp_get_film_age', N'P') IS NOT NULL DROP PROCEDURE dbo.usp_get_film_age; GO CREATE PROCEDURE dbo.usp_get_film_age @film_age_cursor CURSOR VARYING OUTPUT AS SET NOCOUNT ON; SET @film_age_cursor = CURSOR FORWARD_ONLY STATIC FOR SELECT FilmName, dbo.GetFilmAge(CreatedDate) AS FilmAge FROM Films; OPEN @film_age_cursor; GO DECLARE @film_cursor CURSOR; EXEC dbo.usp_get_film_age @film_age_cursor = @film_cursor OUTPUT; DECLARE @FilmID INT, @FullName NVARCHAR(81); WHILE (@@FETCH_STATUS = 0) BEGIN PRINT 'Film ID: ' + @FilmID + ', Full name of the film: ' + @FullName; FETCH NEXT FROM @film_cursor INTO @FilmID, @FullName; END; CLOSE @film_cursor; DEALLOCATE @film_cursor; GO -------------------------Задание 3--------------------------------------- --Создать хранимую процедуру, вызывающую процедуру п.1., осуществляющую --прокрутку возвращаемого курсора и выводящую сообщения, сформированные --из записей при выполнении условия, заданного еще одной --пользовательской функцией. ------------------------------------------------------------------------- --Пользовательская функция для проверки на первую русскую гласную букву IF OBJECT_ID(N'dbo.DoesStartWithRusVowel ', N'FN') IS NOT NULL DROP FUNCTION dbo.DoesStartWithRusVowel ; GO CREATE FUNCTION dbo.DoesStartWithRusVowel (@FullName NVARCHAR(81)) RETURNS BIT AS BEGIN DECLARE @FirstChar NCHAR(1) = SUBSTRING(@FullName, 1, 1); DECLARE @LowerFirstChar NCHAR(1) = @FirstChar; IF @LowerFirstChar IN (N'А', N'О', N'Е', N'Ё', N'И', N'Ы', N'Э', N'Я', N'У', N'Ю') RETURN 1 ELSE RETURN 0; END; GO IF OBJECT_ID(N'dbo.usp_scrolling', N'P') is not null DROP PROCEDURE dbo.usp_scrolling GO CREATE PROCEDURE dbo.usp_scrolling AS DECLARE @scrolling_cursor CURSOR; EXEC dbo.currency_cursor @film_cursor = @scrolling_cursor OUTPUT; DECLARE @FilmID INT, @FullName NVARCHAR(81); FETCH NEXT FROM @scrolling_cursor INTO @FilmID, @FullName; WHILE (@@FETCH_STATUS = 0) BEGIN IF dbo.DoesStartWithRusVowel(@FullName) = 1 PRINT 'Film ID: ' + @FilmID + ', Full name of the film: ' + @FullName; FETCH NEXT FROM @film_cursor INTO @FilmID, @FullName; END; CLOSE @scrolling_cursor; DEALLOCATE @scrolling_cursor; GO EXEC dbo.usp_scrolling GO -------------------Задание 4----------------------------------- --Модифицировать хранимую процедуру п.2. таким образом, чтобы --выборка формировалась с помощью табличной функции. --------------------------------------------------------------- --Табличная функция IF OBJECT_ID(N'dbo.GetFilmInfo', N'IF') IS NOT NULL DROP FUNCTION dbo.GetFilmInfo; GO CREATE FUNCTION dbo.GetFilmInfo() RETURNS TABLE AS RETURN ( SELECT FilmName,dbo.GetFilmAge(YEAR(CreatedDate)) AS FilmAge FROM Films WHERE dbo.DoesStartWithRusVowel(FilmName) = 1 ); GO IF OBJECT_ID(N'dbo.usp_table_function', N'P') IS NOT NULL DROP PROCEDURE dbo.usp_table_function; GO CREATE PROCEDURE dbo.usp_table_function @table_cursor CURSOR VARYING OUTPUT AS BEGIN SET NOCOUNT ON; SET @table_cursor = CURSOR SCROLL STATIC FOR SELECT FilmName, FilmAge FROM dbo.GetFilmInfo(); OPEN @table_cursor; END; GO DECLARE @film_cursor CURSOR; EXEC dbo.usp_table_function @table_cursor = @film_cursor OUTPUT; DECLARE @FilmID INT, @FullName NVARCHAR(81); FETCH NEXT FROM @film_cursor INTO @FilmID, @FullName; WHILE (@@FETCH_STATUS = 0) BEGIN PRINT 'Film ID: ' + @FilmID + ', Full name of the film: ' + @FullName; FETCH NEXT FROM @film_cursor INTO @FilmID, @FullName; END; CLOSE @film_cursor; DEALLOCATE @film_cursor; GO
SQL
Server:
MariaDB 11.4
MariaDB 11.5
MariaDB 10
MariaDB 10 Sakila (ReadOnly)
MySQL 5.7
MySQL 5.7 Sakila (ReadOnly)
MySQL 8.0
MySQL 8.0 Sakila (ReadOnly)
SQLite 3
SQLite 3 Preloaded
PostgreSQL 10 Bookings (ReadOnly)
PostgreSQL 11
PostgreSQL 12
PostgreSQL 13
PostgreSQL 14
PostgreSQL 15
MS SQL Server 2017
MS SQL Server 2019
MS SQL Server 2022
MS SQL Server 2022 AdventureWorks (ReadOnly)
Firebird 4.0
Firebird 4.0 (Employee)
Oracle Database 19c (HR)
Oracle Database 21c
Oracle Database 23c Free
SOQOL
Version
ER Diagram
Preserve result
Stuck with a problem?
Got Error?
Ask ChatGPT!
Result:
Copy
Clear