Advertisement
ostyleo

Lab3 BD

Nov 18th, 2017
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MySQL 12.30 KB | None | 0 0
  1. USE Magazin_de_Antichitati
  2. GO
  3.  
  4. CREATE TABLE Versiune(
  5.     CodV INT
  6. )
  7.  
  8. INSERT Versiune
  9.     VALUES (1)
  10.  
  11. CREATE TABLE MasiniTransport(
  12.     CodM INT,
  13.     CodF INT,
  14.     NrUsi INT,
  15.     Denumire VARCHAR(30),
  16.     DataFabricarii DATE,
  17. )
  18.  
  19. CREATE TABLE Furnizor(
  20.     CodF INT PRIMARY KEY
  21. )
  22. GO
  23.  
  24. -- modifica tipul unei coloane                  = mod_col_1 | undo_col_1
  25. -- adauga / elimina o coloana                   = add_col_2 | remove_col_2
  26. -- adauga / elimina o constrangere DEFAULT      = add_default_3 | remove_default_3
  27. -- creeaza / elimina o cheie primara            = add_pk_4 | remove_pk_4
  28. -- creeaza / elimina o cheie secundara          = add_uk_5 | remove_uk_5
  29. -- creeaza / elimina o cheie externa            = add_fk_6 | remove_fk_6
  30. -- creeaza / elimina un tabel                   = add_table_7 | add_table_7
  31.  
  32. CREATE PROCEDURE mod_col_1 AS BEGIN
  33.     DECLARE @t1 VARCHAR(30), @t2 VARCHAR(30)
  34.  
  35.     SELECT @t1 = DATA_TYPE
  36.         FROM INFORMATION_SCHEMA.COLUMNS
  37.         WHERE TABLE_NAME = 'MasiniTransport' AND
  38.               COLUMN_NAME = 'DataFabricarii'
  39.    
  40.     PRINT N'Inainte de exctuia procedurii, tipul de date al coloanei era: ' + @t1 + CHAR(13)+CHAR(10);
  41.  
  42.     ALTER TABLE MasiniTransport
  43.         ALTER COLUMN DataFabricarii VARCHAR(30)
  44.  
  45.     SELECT @t2 = DATA_TYPE
  46.         FROM INFORMATION_SCHEMA.COLUMNS
  47.         WHERE TABLE_NAME = 'MasiniTransport' AND
  48.               COLUMN_NAME = 'DataFabricarii'
  49.  
  50.     PRINT N'Dupa exctuia procedurii, tipul de date al coloanei este: ' + @t2 + CHAR(13)+CHAR(10)+ CHAR(13)+CHAR(10);
  51. END
  52. GO
  53.  
  54. CREATE PROCEDURE undo_col_1 AS BEGIN
  55.     DECLARE @t1 VARCHAR(30), @t2 VARCHAR(30)
  56.  
  57.     SELECT @t1 = DATA_TYPE
  58.         FROM INFORMATION_SCHEMA.COLUMNS
  59.         WHERE TABLE_NAME = 'MasiniTransport' AND
  60.               COLUMN_NAME = 'DataFabricarii'
  61.    
  62.     PRINT N'Inainte de exctuia procedurii, tipul de date al coloanei era: ' + @t1;
  63.  
  64.     ALTER TABLE MasiniTransport
  65.         ALTER COLUMN DataFabricarii DATE
  66.  
  67.     SELECT @t2 = DATA_TYPE
  68.         FROM INFORMATION_SCHEMA.COLUMNS
  69.         WHERE TABLE_NAME = 'MasiniTransport' AND
  70.               COLUMN_NAME = 'DataFabricarii'
  71.  
  72.     PRINT N'Dupa exctuia procedurii, tipul de date al coloanei este: ' + @t2 + CHAR(13)+CHAR(10) + CHAR(13)+CHAR(10);
  73. END
  74. GO
  75.  
  76. CREATE PROCEDURE add_col_2 AS BEGIN
  77.     DECLARE @n1 INT, @n2 INT
  78.     SELECT @n1 = count(COLUMN_NAME)
  79.         FROM INFORMATION_SCHEMA.COLUMNS
  80.         WHERE TABLE_NAME='MasiniTransport'
  81.     PRINT N'Inainte de modificare lista erau: ' + CAST(@n1 AS VARCHAR(30)) + N' coloane';
  82.  
  83.     ALTER TABLE MasiniTransport
  84.         ADD CaiPutere INT  
  85.  
  86.     SELECT @n2 = count(COLUMN_NAME)
  87.         FROM INFORMATION_SCHEMA.COLUMNS
  88.         WHERE TABLE_NAME='MasiniTransport'
  89.     PRINT N'Dupa modificare lista sunt: ' + CAST(@n2 AS VARCHAR(30)) + N' coloane';
  90.     PRINT CHAR(13)+CHAR(10) + CHAR(13)+CHAR(10);
  91. END
  92. GO
  93.  
  94. CREATE PROCEDURE remove_col_2 AS BEGIN
  95.     DECLARE @n1 INT, @n2 INT
  96.     SELECT @n1 = count(COLUMN_NAME)
  97.         FROM INFORMATION_SCHEMA.COLUMNS
  98.         WHERE TABLE_NAME='MasiniTransport'
  99.     PRINT N'Inainte de modificare lista erau: ' + CAST(@n1 AS VARCHAR(30)) + N' coloane';
  100.  
  101.     ALTER TABLE MasiniTransport
  102.         DROP COLUMN CaiPutere
  103.  
  104.     SELECT @n2 = count(COLUMN_NAME)
  105.         FROM INFORMATION_SCHEMA.COLUMNS
  106.         WHERE TABLE_NAME='MasiniTransport'
  107.     PRINT N'Dupa modificare lista sunt: ' + CAST(@n2 AS VARCHAR(30)) + N' coloane';
  108.     PRINT CHAR(13)+CHAR(10) + CHAR(13)+CHAR(10);   
  109. END
  110. GO
  111.  
  112. CREATE PROCEDURE add_default_3 AS BEGIN
  113.     DECLARE @t1 VARCHAR(30), @t2 VARCHAR(30)
  114.     select @t1 = COLUMN_DEFAULT
  115.                 from INFORMATION_SCHEMA.COLUMNS
  116.                 where TABLE_NAME='MasiniTransport' AND COLUMN_NAME ='NrUsi'
  117.     IF @t1 IS NULL PRINT N'Inainde de executie coloana NrUsi nu are constrangeri de tip default';
  118.     ELSE PRINT N'Inainte de executie coloana NrUsi are constrangeri de tip default: ' + @t1;
  119.  
  120.     ALTER TABLE MasiniTransport
  121.         ADD CONSTRAINT df_4 DEFAULT 4 FOR NrUsi
  122.  
  123.     select @t2 = COLUMN_DEFAULT
  124.         from INFORMATION_SCHEMA.COLUMNS
  125.         where TABLE_NAME='MasiniTransport' AND COLUMN_NAME ='NrUsi'
  126.     IF @t2 IS NULL PRINT N'Dupa executie coloana NrUsi nu are constrangeri de tip default' + CHAR(13)+CHAR(10)+ CHAR(13)+CHAR(10);
  127.     ELSE PRINT N'Dupa executie coloana NrUsi are constrangeri de tip default: ' + @t2 + CHAR(13)+CHAR(10)+ CHAR(13)+CHAR(10);
  128. END
  129. GO
  130.  
  131. CREATE PROCEDURE remove_default_3 AS BEGIN
  132.     DECLARE @t1 VARCHAR(30), @t2 VARCHAR(30)
  133.     select @t1 = COLUMN_DEFAULT
  134.                 from INFORMATION_SCHEMA.COLUMNS
  135.                 where TABLE_NAME='MasiniTransport' AND COLUMN_NAME ='NrUsi'
  136.     IF @t1 IS NULL PRINT N'Inainde de executie coloana NrUsi nu are constrangeri de tip default';
  137.     ELSE PRINT N'Inainte de executie coloana NrUsi are constrangeri de tip default: ' + @t1;
  138.  
  139.     ALTER TABLE MasiniTransport
  140.         DROP CONSTRAINT df_4
  141.  
  142.     select @t2 = COLUMN_DEFAULT
  143.         from INFORMATION_SCHEMA.COLUMNS
  144.         where TABLE_NAME='MasiniTransport' AND COLUMN_NAME ='NrUsi'
  145.     IF @t2 IS NULL PRINT N'Dupa executie coloana NrUsi nu are constrangeri de tip default' + CHAR(13)+CHAR(10)+ CHAR(13)+CHAR(10);
  146.     ELSE PRINT N'Dupa executie coloana NrUsi are constrangeri de tip default: ' + @t2 + CHAR(13)+CHAR(10)+ CHAR(13)+CHAR(10);
  147. END
  148. GO
  149.  
  150. CREATE PROCEDURE add_pk_4 AS BEGIN
  151.     DECLARE @pk1 VARCHAR(30), @pk2 VARCHAR(30)
  152.     SELECT @pk1 = CONSTRAINT_NAME
  153.         FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
  154.         WHERE TABLE_NAME = 'MasiniTransport' AND COLUMN_NAME = 'CodM'
  155.     IF @pk1 LIKE 'PK%' PRINT N'CodM era cheie primara inainte de executie';
  156.     ELSE PRINT N'CodM nu era cheie primara inainte de executie';
  157.  
  158.     ALTER TABLE MasiniTransport
  159.         ADD CONSTRAINT PK_CodM PRIMARY KEY(CodM)
  160.  
  161.     SELECT @pk2 = CONSTRAINT_NAME
  162.         FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
  163.         WHERE TABLE_NAME = 'MasiniTransport' AND COLUMN_NAME = 'CodM'
  164.     IF @pk2 LIKE 'PK%' PRINT N'CodM este cheie primara dupa executie' + CHAR(13)+CHAR(10) + CHAR(13)+CHAR(10);
  165.     ELSE PRINT N'CodM nu este cheie primara dupa executie' + CHAR(13)+CHAR(10) + CHAR(13)+CHAR(10);
  166. END
  167. GO
  168.  
  169. CREATE PROCEDURE remove_pk_4 AS BEGIN
  170.     DECLARE @pk1 VARCHAR(30), @pk2 VARCHAR(30)
  171.     SELECT @pk1 = CONSTRAINT_NAME
  172.         FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
  173.         WHERE TABLE_NAME = 'MasiniTransport' AND COLUMN_NAME = 'CodM'
  174.     IF @pk1 LIKE 'PK%' PRINT N'CodM era cheie primara inainte de executie';
  175.     ELSE PRINT N'CodM nu era cheie primara inainte de executie';
  176.  
  177.     ALTER TABLE MasiniTransport
  178.         DROP CONSTRAINT PK_CodM
  179.  
  180.     SELECT @pk2 = CONSTRAINT_NAME
  181.         FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
  182.         WHERE TABLE_NAME = 'MasiniTransport' AND COLUMN_NAME = 'CodM'
  183.     IF @pk2 LIKE 'PK%' PRINT N'CodM este cheie primara dupa executie' + CHAR(13)+CHAR(10) + CHAR(13)+CHAR(10);
  184.     ELSE PRINT N'CodM nu este cheie primara dupa executie' + CHAR(13)+CHAR(10) + CHAR(13)+CHAR(10);
  185. END
  186. GO
  187.  
  188. CREATE PROCEDURE add_uk_5 AS BEGIN
  189.     DECLARE @uk1 VARCHAR(30), @uk2 VARCHAR(30)
  190.     SELECT @uk1 = CONSTRAINT_NAME
  191.         FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
  192.         WHERE TABLE_NAME = 'MasiniTransport' AND COLUMN_NAME = 'CodF'
  193.     IF @uk1 LIKE 'UK%' PRINT N'CodF era cheie secundara inainte de executie';
  194.     ELSE PRINT N'CodF nu era cheie secundara inainte de executie';
  195.  
  196.     ALTER TABLE MasiniTransport
  197.         ADD CONSTRAINT UK_CodF UNIQUE(CodF)
  198.  
  199.     SELECT @uk2 = CONSTRAINT_NAME
  200.         FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
  201.         WHERE TABLE_NAME = 'MasiniTransport' AND COLUMN_NAME = 'CodF'
  202.     IF @uk2 LIKE 'UK%' PRINT N'CodF este cheie secundara dupa executie' + CHAR(13)+CHAR(10) + CHAR(13)+CHAR(10);
  203.     ELSE PRINT N'CodF nu este cheie secundara dupa executie' + CHAR(13)+CHAR(10) + CHAR(13)+CHAR(10);
  204. END
  205. GO
  206.  
  207. CREATE PROCEDURE remove_uk_5 AS BEGIN
  208.     DECLARE @uk1 VARCHAR(30), @uk2 VARCHAR(30)
  209.     SELECT @uk1 = CONSTRAINT_NAME
  210.         FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
  211.         WHERE TABLE_NAME = 'MasiniTransport' AND COLUMN_NAME = 'CodF'
  212.     IF @uk1 LIKE 'UK%' PRINT N'CodF era cheie secundara inainte de executie';
  213.     ELSE PRINT N'CodF nu era cheie secundara inainte de executie';
  214.  
  215.     ALTER TABLE MasiniTransport
  216.         DROP CONSTRAINT UK_CodF
  217.  
  218.     SELECT @uk2 = CONSTRAINT_NAME
  219.         FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
  220.         WHERE TABLE_NAME = 'MasiniTransport' AND COLUMN_NAME = 'CodF'
  221.     IF @uk2 LIKE 'UK%' PRINT N'CodF este cheie secundara dupa executie' + CHAR(13)+CHAR(10) + CHAR(13)+CHAR(10);
  222.     ELSE PRINT N'CodF nu este cheie secundara dupa executie' + CHAR(13)+CHAR(10) + CHAR(13)+CHAR(10);
  223. END
  224. GO
  225.  
  226. CREATE PROCEDURE add_fk_6 AS BEGIN
  227.     DECLARE @fk1 VARCHAR(30), @fk2 VARCHAR(30)
  228.     SELECT TOP 1 @fk1 = CONSTRAINT_NAME
  229.         FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
  230.         WHERE TABLE_NAME = 'MasiniTransport' AND COLUMN_NAME = 'CodF'
  231.     IF @fk1 LIKE 'FK%' PRINT N'CodF era cheie straina inainte de executie';
  232.     ELSE PRINT N'CodF nu era cheie straina inainte de executie';
  233.  
  234.     ALTER TABLE MasiniTransport
  235.         ADD CONSTRAINT FK_CodF FOREIGN KEY(CodF) REFERENCES Furnizor(CodF)
  236.  
  237.     SELECT TOP 1 @fk2 = CONSTRAINT_NAME
  238.         FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
  239.         WHERE TABLE_NAME = 'MasiniTransport' AND COLUMN_NAME = 'CodF'
  240.     IF @fk2 LIKE 'FK%' PRINT N'CodF este cheie straina dupa executie' + CHAR(13)+CHAR(10) + CHAR(13)+CHAR(10);
  241.     ELSE PRINT N'CodF nu este cheie straina dupa executie' + CHAR(13)+CHAR(10) + CHAR(13)+CHAR(10);
  242. END
  243. GO
  244.  
  245. CREATE PROCEDURE remove_fk_6 AS BEGIN
  246.     DECLARE @fk1 VARCHAR(30), @fk2 VARCHAR(30)
  247.     SELECT TOP 1 @fk1 = CONSTRAINT_NAME
  248.         FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
  249.         WHERE TABLE_NAME = 'MasiniTransport' AND COLUMN_NAME = 'CodF'
  250.     IF @fk1 LIKE 'FK%' PRINT N'CodF era cheie straina inainte de executie';
  251.     ELSE PRINT N'CodF nu era cheie straina inainte de executie';
  252.  
  253.     ALTER TABLE MasiniTransport
  254.         DROP CONSTRAINT FK_CodF
  255.  
  256.     SELECT TOP 1 @fk2 = CONSTRAINT_NAME
  257.         FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
  258.         WHERE TABLE_NAME = 'MasiniTransport' AND COLUMN_NAME = 'CodF'
  259.     IF @fk2 LIKE 'FK%' PRINT N'CodF este cheie straina dupa executie' + CHAR(13)+CHAR(10) + CHAR(13)+CHAR(10);
  260.     ELSE PRINT N'CodF nu este cheie straina dupa executie' + CHAR(13)+CHAR(10) + CHAR(13)+CHAR(10);
  261. END
  262. GO
  263.  
  264. CREATE PROCEDURE add_table_7 AS BEGIN
  265.     CREATE TABLE FurnizoriDeFurnizori(
  266.         CodFdF INT PRIMARY KEY,
  267.         Nume VARCHAR(30)
  268.     )
  269.     PRINT N'A fost adaugat tabelul FurnizoriDeFurnizori' + CHAR(13)+CHAR(10) + CHAR(13)+CHAR(10);
  270. END
  271. GO
  272.  
  273. CREATE PROCEDURE remove_table_7 AS BEGIN
  274.     DROP TABLE FurnizoriDeFurnizori
  275.     PRINT N'A fost sters tabelul FurnizoriDeFurnizori' + CHAR(13)+CHAR(10) + CHAR(13)+CHAR(10);
  276. END
  277. GO
  278.  
  279. CREATE PROCEDURE up @v INT, @vers VARCHAR(30) OUTPUT AS
  280.         IF @v = 1 SET @vers = 'mod_col_1'
  281.         ELSE IF @v = 2 SET @vers = 'add_col_2'
  282.         ELSE IF @v = 3 SET @vers = 'add_default_3'
  283.         ELSE IF @v = 4 SET @vers = 'add_pk_4'
  284.         ELSE IF @v = 5 SET @vers = 'add_uk_5'
  285.         ELSE IF @v = 6 SET @vers = 'add_fk_6'
  286.         ELSE IF @v = 7 SET @vers = 'add_table_7'
  287. RETURN
  288. GO
  289.  
  290. CREATE PROCEDURE down @v INT, @vers VARCHAR(30) OUTPUT AS
  291.         IF @v = 1 SET @vers = 'undo_col_1'
  292.         ELSE IF @v = 2 SET @vers = 'remove_col_2'
  293.         ELSE IF @v = 3 SET @vers = 'remove_default_3'
  294.         ELSE IF @v = 4 SET @vers = 'remove_pk_4'
  295.         ELSE IF @v = 5 SET @vers = 'remove_uk_5'
  296.         ELSE IF @v = 6 SET @vers = 'remove_fk_6'
  297.         ELSE IF @v = 7 SET @vers = 'remove_table_7'
  298. RETURN
  299. GO
  300.  
  301. CREATE PROCEDURE main @versNext INT AS BEGIN
  302.     DECLARE @versPrev INT, @v1 INT, @v2 INT
  303.     IF @versNext = @versPrev PRINT N'Baza se afla deja in versiunea specificata'
  304.     ELSE IF @versNext < 0 OR @versNext > 7 PRINT N'Exista doar 7 versiuni ale bazei de date'
  305.     ELSE BEGIN
  306.         SELECT TOP 1 @versPrev = CodV
  307.             FROM Versiune
  308.         PRINT N'Versiunea actuala a bazei de date este: ' + CAST(@versPrev AS VARCHAR(30));
  309.  
  310.         IF @versNext > @versPrev BEGIN
  311.             SET @v1 = @versPrev + 1
  312.             WHILE @versNext >= @v1 BEGIN
  313.                 DECLARE @Tip1 VARCHAR(30)
  314.                 EXEC up @v1,@vers = @Tip1 OUTPUT
  315.                 EXEC @Tip1
  316.                 SET @v1 = @v1 + 1
  317.             END
  318.             UPDATE Versiune SET CodV = @versNext
  319.         END
  320.  
  321.         IF @versNext < @versPrev BEGIN
  322.             SET @v2 = @versPrev
  323.             WHILE @versNext < @v2 BEGIN
  324.                 DECLARE @Tip2 VARCHAR(30)
  325.                 EXEC down @v2,@vers = @Tip2 OUTPUT
  326.                 EXEC @Tip2
  327.                 SET @v2 = @v2 - 1
  328.             END
  329.             UPDATE Versiune SET CodV = @versNext
  330.         END
  331.  
  332.         DECLARE @versNew INT
  333.         SELECT TOP 1 @versNew = CodV
  334.             FROM Versiune
  335.         PRINT N'Noua versiune a bazei de date este: ' + CAST(@versNew AS VARCHAR(30));
  336.     END
  337. END
  338. GO
  339.  
  340. EXEC mod_col_1
  341. EXEC undo_col_1
  342.  
  343. EXEC add_col_2
  344. EXEC remove_col_2
  345.  
  346. EXEC add_default_3
  347. EXEC remove_default_3
  348.  
  349. EXEC add_pk_4
  350. EXEC remove_pk_4
  351.  
  352. EXEC add_uk_5
  353. EXEC remove_uk_5
  354.  
  355. EXEC add_fk_6
  356. EXEC remove_fk_6
  357.  
  358. EXEC add_table_7
  359. EXEC remove_table_7
  360.  
  361.  
  362. EXEC mod_col_1
  363. EXEC add_col_2
  364. EXEC add_default_3
  365. EXEC add_pk_4
  366. EXEC add_uk_5
  367. EXEC add_fk_6
  368. EXEC add_table_7
  369. UPDATE Versiune SET CodV = 7
  370.  
  371. EXEC remove_table_7
  372. EXEC remove_fk_6
  373. EXEC remove_uk_5
  374. EXEC remove_pk_4
  375. EXEC remove_default_3
  376. EXEC remove_col_2
  377. EXEC undo_col_1
  378. UPDATE Versiune SET CodV = 0
  379. GO
  380.  
  381. EXEC main 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement