-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmain_functions.sql
796 lines (629 loc) · 47 KB
/
main_functions.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- ####################################### FUNCTIONS PRINCIPAIS ######################################## --
-- ################################################################################################################### --
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
--*****************************************************************************************************************************************************************--
----------------------------******************************************* << SUPER USUÁRIO >> *******************************************----------------------------
--*****************************************************************************************************************************************************************--
--|-------------------------------------------------------------------------------------------------|--
--|--- ############################### INSERIR_ALUNO_E_PROFESSOR ############################### ---|----------------------------------------------------------------
--|-------------------------------------------------------------------------------------------------|--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| INSERE UM USUÁRIO NA SUA TABELA (EXISTEM AS POSSIBILIDADES DE INSERIR ALUNO E PROFESSOR). |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| ENTRADA: [TEXT] NOME DO USUÁRIO; [TEXT] CPF DO USUÁRIO; [DATE] DATA DE NASCIMENTO DO USUÁRIO; |--
--| [TEXT] EMAIL DO USUÁRIO; [TEXT] SENHA DO USUÁRIO; [TEXT] TABELA DO USUÁRIO. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
CREATE OR REPLACE FUNCTION INSERIR_ALUNO_E_PROFESSOR(NOME TEXT, CPF TEXT, DATA_NASCIMENTO DATE, EMAIL TEXT, SENHA TEXT, TABELA TEXT)
RETURNS VOID
AS $$
BEGIN
IF TABELA = 'ALUNO' THEN
INSERT INTO ALUNO VALUES (DEFAULT, NOME, CPF, DATA_NASCIMENTO, EMAIL, SENHA, DEFAULT);
END IF;
IF TABELA = 'PROFESSOR' THEN
INSERT INTO PROFESSOR VALUES (DEFAULT, NOME, CPF, DATA_NASCIMENTO, EMAIL, SENHA, DEFAULT, DEFAULT);
END IF;
END
$$ LANGUAGE plpgsql;
--|-------------------------------------------------------------------------------------------------|--
--|--- ############################### REMOVER_ALUNO_E_PROFESSOR ############################### ---|----------------------------------------------------------------
--|-------------------------------------------------------------------------------------------------|--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| REMOVE UM USUÁRIO DA SUA TABELA (EXISTEM AS POSSIBILIDADES DE REMOVER ALUNO E PROFESSOR). |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| ENTRADA: [INT] CÓDIGO DO USUÁRIO DELETADO; [TEXT] NOME DA TABELA DO USUÁRIO DELETADO. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| CASOS DE EXCEÇÕES: CÓDIGO DE USUÁRIO INVÁLIDO. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
CREATE OR REPLACE FUNCTION REMOVER_ALUNO_E_PROFESSOR(COD_USUARIO_DELETADO INT, TABELA TEXT)
RETURNS VOID
AS $$
BEGIN
IF TABELA = 'ALUNO' THEN
IF VERIFICAR_SE_REGISTRO_EXISTE(COD_USUARIO_DELETADO, 'ALUNO') IS FALSE THEN
RAISE EXCEPTION 'ESSE ALUNO NÃO EXISTE, INSIRA UM COD_ALUNO VÁLIDO!';
END IF;
DELETE FROM ALUNO WHERE COD_ALUNO = COD_USUARIO_DELETADO;
END IF;
IF TABELA = 'PROFESSOR' THEN
IF VERIFICAR_SE_REGISTRO_EXISTE(COD_USUARIO_DELETADO, 'PROFESSOR') IS FALSE THEN
RAISE EXCEPTION 'ESSE PROFESSOR NÃO EXISTE, INSIRA UM COD_PROFESSOR VÁLIDO!';
END IF;
DELETE FROM PROFESSOR WHERE COD_PROFESSOR = COD_USUARIO_DELETADO;
END IF;
END
$$ LANGUAGE plpgsql;
--*****************************************************************************************************************************************************************--
----------------------------***************************************** << ALUNO # PROFESSOR >> *****************************************----------------------------
--*****************************************************************************************************************************************************************--
--|-------------------------------------------------------------------------------------------------|--
--|--- #################################### CONSULTAR_SALDO #################################### ---|----------------------------------------------------------------
--|-------------------------------------------------------------------------------------------------|--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| SELECIONA O SALDO DE UM USUÁRIO A PARTIR DO SEU CÓDIGO E TABELA. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| ENTRADA: [INT] CÓDIGO DO USUÁRIO; [TEXT] NOME DA TABELA DO USUÁRIO. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| CASOS DE EXCEÇÕES: CÓDIGO DE USUÁRIO INVÁLIDO. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| SAÍDA: [TEXT] INFORMAÇÃO DO SALDO DO USUÁRIO. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
CREATE OR REPLACE FUNCTION CONSULTAR_SALDO(CODIGO INT, TABELA TEXT)
RETURNS TEXT
AS $$
DECLARE
SALDO_CONSULTADO FLOAT;
BEGIN
IF TABELA = 'ALUNO' THEN
IF VERIFICAR_SE_REGISTRO_EXISTE(CODIGO, 'ALUNO') IS FALSE THEN
RAISE EXCEPTION 'ESSE ALUNO NÃO EXISTE, INSIRA UM COD_ALUNO VÁLIDO!';
ELSE
SELECT SALDO INTO SALDO_CONSULTADO FROM ALUNO WHERE CODIGO = COD_ALUNO;
END IF;
ELSIF TABELA = 'PROFESSOR' THEN
IF VERIFICAR_SE_REGISTRO_EXISTE(CODIGO, 'PROFESSOR') IS FALSE THEN
RAISE EXCEPTION 'ESSE PROFESSOR NÃO EXISTE, INSIRA UM COD_PROFESSOR VÁLIDO!';
ELSE
SELECT SALDO INTO SALDO_CONSULTADO FROM PROFESSOR WHERE CODIGO = COD_PROFESSOR;
END IF;
ELSE
RAISE EXCEPTION 'APENAS AS TABELAS ALUNO E PROFESSOR SÃO ACEITAS NESSA FUNÇÃO!';
END IF;
IF SALDO_CONSULTADO = 0 THEN
RETURN 'SEM SALDO!';
ELSE
RETURN 'SEU SALDO É DE R$ ' || CAST(SALDO_CONSULTADO AS TEXT) || '!';
END IF;
END
$$ LANGUAGE plpgsql;
--|-------------------------------------------------------------------------------------------------|--
--|--- #################################### ATUALIZAR_SALDO #################################### ---|----------------------------------------------------------------
--|-------------------------------------------------------------------------------------------------|--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| ATUALIZA O SALDO DE UM USUÁRIO A PARTIR DO VALOR A SER ALTERADO, SEU CÓDIGO E TABELA. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| ENTRADA: [FLOAT] VALOR A SER ALTERADO NO SALDO DO USUÁRIO; [INT] CÓDIGO DO USUÁRIO; [TEXT] NOME |--
--| DA TABELA DO USUÁRIO. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| CASOS DE EXCEÇÕES: NOME DA TABELA INVÁLIDO; CÓDIGO DE USUÁRIO INVÁLIDO. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
CREATE OR REPLACE FUNCTION ATUALIZAR_SALDO(VALOR_SALDO_A_ALTERAR FLOAT, CODIGO INT, TABELA TEXT)
RETURNS VOID
AS $$
DECLARE
SALDO_USUARIO INT;
BEGIN
IF TABELA = 'ALUNO' THEN
IF VERIFICAR_SE_REGISTRO_EXISTE(CODIGO, 'ALUNO') IS FALSE THEN
RAISE EXCEPTION 'ESSE ALUNO NÃO EXISTE, INSIRA UM COD_ALUNO VÁLIDO!';
ELSE
SELECT SALDO INTO SALDO_USUARIO FROM ALUNO WHERE COD_ALUNO = CODIGO;
UPDATE ALUNO SET SALDO = SALDO + VALOR_SALDO_A_ALTERAR WHERE COD_ALUNO = CODIGO;
END IF;
ELSIF TABELA = 'PROFESSOR' THEN
IF VERIFICAR_SE_REGISTRO_EXISTE(CODIGO, 'PROFESSOR') IS FALSE THEN
RAISE EXCEPTION 'ESSE PROFESSOR NÃO EXISTE, INSIRA UM COD_PROFESSOR VÁLIDO!';
ELSE
SELECT SALDO INTO SALDO_USUARIO FROM PROFESSOR WHERE COD_PROFESSOR = CODIGO;
UPDATE PROFESSOR SET SALDO = SALDO + VALOR_SALDO_A_ALTERAR WHERE COD_PROFESSOR = CODIGO;
END IF;
ELSE
RAISE EXCEPTION 'APENAS AS TABELAS ALUNO E PROFESSOR SÃO ACEITAS NESSA FUNÇÃO!';
END IF;
END
$$ LANGUAGE plpgsql;
--|-------------------------------------------------------------------------------------------------|--
--|--- ###################################### SACAR_SALDO ###################################### ---|----------------------------------------------------------------
--|-------------------------------------------------------------------------------------------------|--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| SACA TODO O SALDO DE UM USUÁRIO A PARTIR DO SEU CÓDIGO E TABELA. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| ENTRADA: [INT] CÓDIGO DO USUÁRIO; [TEXT] NOME DA TABELA DO USUÁRIO. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| CASOS DE EXCEÇÕES: NOME DA TABELA INVÁLIDO; CÓDIGO DE USUÁRIO INVÁLIDO. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| SAÍDA: [TEXT] INFORMAÇÃO DO SALDO SACADO. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
CREATE OR REPLACE FUNCTION SACAR_SALDO(CODIGO INT, TABELA TEXT)
RETURNS TEXT
AS $$
DECLARE
SALDO_SACADO FLOAT;
BEGIN
IF TABELA = 'ALUNO' THEN
IF VERIFICAR_SE_REGISTRO_EXISTE(CODIGO, 'ALUNO') IS FALSE THEN
RAISE EXCEPTION 'ESSE ALUNO NÃO EXISTE, INSIRA UM COD_ALUNO VÁLIDO!';
ELSE
SELECT SALDO INTO SALDO_SACADO FROM ALUNO WHERE CODIGO = COD_ALUNO;
END IF;
ELSIF TABELA = 'PROFESSOR' THEN
IF VERIFICAR_SE_REGISTRO_EXISTE(CODIGO, 'PROFESSOR') IS FALSE THEN
RAISE EXCEPTION 'ESSE PROFESSOR NÃO EXISTE, INSIRA UM COD_PROFESSOR VÁLIDO!';
ELSE
SELECT SALDO INTO SALDO_SACADO FROM PROFESSOR WHERE CODIGO = COD_PROFESSOR;
END IF;
ELSE
RAISE EXCEPTION 'APENAS AS TABELAS ALUNO E PROFESSOR SÃO ACEITAS NESSA FUNÇÃO!';
END IF;
IF SALDO_SACADO != 0 THEN
PERFORM ATUALIZAR_SALDO(-SALDO_SACADO, CODIGO, TABELA);
RETURN 'FORAM SACADOS R$ ' || CAST(SALDO_SACADO AS TEXT) || '!';
ELSE
RETURN 'SEM SALDO!';
END IF;
END
$$ LANGUAGE plpgsql;
--*****************************************************************************************************************************************************************--
----------------------------********************************************* << PROFESSOR >> *********************************************----------------------------
--*****************************************************************************************************************************************************************--
--|-------------------------------------------------------------------------------------------------|--
--|--- #################################### RECEBER_SALARIO #################################### ---|----------------------------------------------------------------
--|-------------------------------------------------------------------------------------------------|--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| FAZ O PROFESSOR RECEBER O SALÁRIO ADQUIRIDO PELAS VENDAS DOS SEUS CURSO. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| ENTRADA: [INT] CÓDIGO DO PROFESSOR QUE IRÁ RECEBER O SALÁRIO. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| CASOS DE EXCEÇÕES: CÓDIGO DE USUÁRIO INVÁLIDO. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
CREATE OR REPLACE FUNCTION RECEBER_SALARIO(COD_PROFESSOR_ANALISADO INT)
RETURNS VOID
AS $$
DECLARE
DATA_ULTIMO_PAGAMENTO_ANALISADO DATE;
DATA_PAGAMENTO_ATUAL DATE;
SALARIO_A_PAGAR FLOAT;
BEGIN
IF VERIFICAR_SE_REGISTRO_EXISTE(COD_PROFESSOR_ANALISADO, 'PROFESSOR') IS FALSE THEN
RAISE EXCEPTION 'ESSE PROFESSOR NÃO EXISTE, INSIRA UM COD_PROFESSOR VÁLIDO!';
ELSE
SELECT DATA_ULTIMO_PAGAMENTO INTO DATA_ULTIMO_PAGAMENTO_ANALISADO FROM PROFESSOR WHERE COD_PROFESSOR = COD_PROFESSOR_ANALISADO;
DATA_PAGAMENTO_ATUAL := CALCULAR_DATA_PAGAMENTO_ATUAL();
SELECT COALESCE(SUM(PRECO), 0) INTO SALARIO_A_PAGAR FROM ALUNO_CURSO INNER JOIN CURSO ON ALUNO_CURSO.COD_CURSO = CURSO.COD_CURSO
WHERE COD_PROFESSOR = COD_PROFESSOR_ANALISADO AND DATA_COMPRA < DATA_PAGAMENTO_ATUAL AND DATA_COMPRA >= DATA_ULTIMO_PAGAMENTO_ANALISADO;
UPDATE PROFESSOR SET SALDO = SALDO + SALARIO_A_PAGAR, DATA_ULTIMO_PAGAMENTO = DATA_PAGAMENTO_ATUAL WHERE COD_PROFESSOR = COD_PROFESSOR_ANALISADO;
END IF;
END
$$ LANGUAGE plpgsql;
--*****************************************************************************************************************************************************************--
----------------------------************************************ << ALUNO_CURSO # CURSO # ALUNO >> ************************************----------------------------
--*****************************************************************************************************************************************************************--
--|-------------------------------------------------------------------------------------------------|--
--|--- ##################################### COMPRAR_CURSO ##################################### ---|----------------------------------------------------------------
--|-------------------------------------------------------------------------------------------------|--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| REALIZA A COMPRA DO CURSO: INSERE OU ATUALIZA O ALUNO_CURSO, DEPENDENDO SE O ALUNO JÁ CURSOU O |--
--| CURSO. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| ENTRADA: [INT] CÓDIGO DO ALUNO; [INT] CÓDIGO DO CURSO. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
CREATE OR REPLACE FUNCTION COMPRAR_CURSO(COD_ALUNO_ANALISADO INT, COD_CURSO_ANALISADO INT)
RETURNS VOID
AS $$
BEGIN
IF ALUNO_JA_CURSOU(COD_ALUNO_ANALISADO, COD_CURSO_ANALISADO) = TRUE THEN
UPDATE ALUNO_CURSO SET DATA_COMPRA = DATE(NOW()), NOTA_AVALIACAO = NULL WHERE COD_ALUNO = COD_ALUNO_ANALISADO AND COD_CURSO = COD_CURSO_ANALISADO;
END IF;
INSERT INTO ALUNO_CURSO VALUES (DEFAULT, DATE(NOW()), NULL, COD_ALUNO_ANALISADO, COD_CURSO_ANALISADO);
END
$$ LANGUAGE plpgsql;
--|-------------------------------------------------------------------------------------------------|--
--|--- ##################################### AVALIAR_CURSO ##################################### ---|----------------------------------------------------------------
--|-------------------------------------------------------------------------------------------------|--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| PERMITE A AVALIAÇÃO DO CURSO POR PARTE DO ALUNO. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| ENTRADA: [INT] CÓDIGO DO ALUNO_CURSO; [FLOAT] NOTA DE AVALIAÇÃO PARA O CURSO. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
CREATE OR REPLACE FUNCTION AVALIAR_CURSO(COD_ALUNO_CURSO_ANALISADO INT, NOTA_AVALIACAO_ANALISADA FLOAT)
RETURNS VOID
AS $$
BEGIN
UPDATE ALUNO_CURSO SET NOTA_AVALIACAO = NOTA_AVALIACAO_ANALISADA WHERE COD_ALUNO_CURSO = COD_ALUNO_CURSO_ANALISADO;
END
$$ LANGUAGE plpgsql;
--*****************************************************************************************************************************************************************--
----------------------------***************************************** << CURSO # PROFESSOR >> *****************************************----------------------------
--*****************************************************************************************************************************************************************--
--|-------------------------------------------------------------------------------------------------|--
--|--- ###################################### CRIAR_CURSO ###################################### ---|----------------------------------------------------------------
--|-------------------------------------------------------------------------------------------------|--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| CRIA UM CURSO UNIDO A UM PROFESSOR. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| ENTRADA: [INT] CÓDIGO DO PROFESSOR; [TEXT] NOME DO CURSO; [TEXT] DESCRIÇÃO DO CURSO; [FLOAT] |--
--| PREÇO DO CURSO. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
CREATE OR REPLACE FUNCTION CRIAR_CURSO(CODIGO_PROFESSOR INT, NOME_CURSO TEXT, DESCRICAO TEXT, PRECO FLOAT)
RETURNS VOID
AS $$
BEGIN
INSERT INTO CURSO VALUES (DEFAULT, NOME_CURSO, DESCRICAO, DEFAULT, PRECO, DEFAULT, DEFAULT, DEFAULT, CODIGO_PROFESSOR);
END
$$ LANGUAGE plpgsql;
--|-------------------------------------------------------------------------------------------------|--
--|--- ##################################### DELETAR_CURSO ##################################### ---|----------------------------------------------------------------
--|-------------------------------------------------------------------------------------------------|--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| REMOVE O CURSO. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| ENTRADA: [INT] CÓDIGO DO CURSO. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| CASOS DE EXCEÇÕES: CÓDIGO DO CURSO INVÁLIDO. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
CREATE OR REPLACE FUNCTION DELETAR_CURSO(COD_CURSO_DELETADO INT)
RETURNS VOID
AS $$
BEGIN
IF VERIFICAR_SE_REGISTRO_EXISTE(COD_CURSO_DELETADO, 'CURSO') IS FALSE THEN
RAISE EXCEPTION 'ESSE CURSO NÃO EXISTE, INSIRA UM COD_CURSO VÁLIDO!';
END IF;
DELETE FROM CURSO WHERE COD_CURSO = COD_CURSO_DELETADO;
END
$$ LANGUAGE plpgsql;
--|-------------------------------------------------------------------------------------------------|--
--|--- #################################### PUBLICAR_CURSO ##################################### ---|----------------------------------------------------------------
--|-------------------------------------------------------------------------------------------------|--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| PUBLICA O CURSO. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| ENTRADA: [INT] CÓDIGO DO CURSO. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
CREATE OR REPLACE FUNCTION PUBLICAR_CURSO(CODIGO_CURSO INT)
RETURNS VOID
AS $$
BEGIN
UPDATE CURSO SET PUBLICADO = TRUE WHERE COD_CURSO = CODIGO_CURSO;
END
$$ LANGUAGE plpgsql;
--*****************************************************************************************************************************************************************--
----------------------------***************************************** << MODULO # PROFESSOR >> ****************************************----------------------------
--*****************************************************************************************************************************************************************--
--|-------------------------------------------------------------------------------------------------|--
--|--- ##################################### CRIAR_MODULOS ##################################### ---|----------------------------------------------------------------
--|-------------------------------------------------------------------------------------------------|--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| CRIA MÓDULOS UNIDOS A UM PROFESSOR. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| ENTRADA: [INT] CÓDIGO DO PROFESSOR; [TEXT[]] NOMES DOS MÓDULOS; [TEXT[]] DESCRIÇÕES DOS |--
--| MÓDULOS. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
CREATE OR REPLACE FUNCTION CRIAR_MODULOS(CODIGO_PROFESSOR INT, NOMES_MODULOS TEXT[], DESCRICOES_MODULOS TEXT[])
RETURNS VOID
AS $$
DECLARE
CONTADOR INT := 1;
BEGIN
WHILE CONTADOR <= ARRAY_LENGTH(NOMES_MODULOS,1) LOOP
INSERT INTO MODULO VALUES (DEFAULT, NOMES_MODULOS[CONTADOR], DESCRICOES_MODULOS[CONTADOR], CODIGO_PROFESSOR);
CONTADOR := CONTADOR + 1;
END LOOP;
END
$$ LANGUAGE plpgsql;
--|-------------------------------------------------------------------------------------------------|--
--|--- #################################### DELETAR_MODULO ##################################### ---|----------------------------------------------------------------
--|-------------------------------------------------------------------------------------------------|--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| REMOVE O MÓDULO. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| ENTRADA: [INT] CÓDIGO DO MÓDULO. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| CASOS DE EXCEÇÕES: CÓDIGO DO MÓDULO INVÁLIDO. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
CREATE OR REPLACE FUNCTION DELETAR_MODULO(CODIGO_MODULO INT)
RETURNS VOID
AS $$
BEGIN
IF VERIFICAR_SE_REGISTRO_EXISTE(CODIGO_MODULO, 'MODULO') IS FALSE THEN
RAISE EXCEPTION 'ESSE MODULO NÃO EXISTE, INSIRA UM COD_MODULO VÁLIDO!';
ELSE
DELETE FROM MODULO M_D WHERE M_D.COD_MODULO = CODIGO_MODULO;
END IF;
END
$$ LANGUAGE plpgsql;
--*****************************************************************************************************************************************************************--
----------------------------************************************* << PRE_REQUISITO # PROFESSOR >> *************************************----------------------------
--*****************************************************************************************************************************************************************--
--|-------------------------------------------------------------------------------------------------|--
--|--- ################################## CRIAR_PRE_REQUISITO ################################## ---|----------------------------------------------------------------
--|-------------------------------------------------------------------------------------------------|--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| CRIA UM VÍNCULO ENTRE MÓDULOS NA TABELA PRÉ-REQUISITO. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| ENTRADA: [INT] CÓDIGO DO MÓDULO; [INT] CÓDIGO DO MÓDULO PRÉ-REQUISITO. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
/* CRIAR PRE_REQUISITO */
CREATE OR REPLACE FUNCTION CRIAR_PRE_REQUISITO(CODIGO_MODULO INT, CODIGO_MODULO_PRE_REQUISITO INT)
RETURNS VOID
AS $$
BEGIN
INSERT INTO PRE_REQUISITO VALUES (DEFAULT, CODIGO_MODULO, CODIGO_MODULO_PRE_REQUISITO);
END
$$ LANGUAGE plpgsql;
--*****************************************************************************************************************************************************************--
----------------------------*************************************** << DISCIPLINA # PROFESSOR >> **************************************----------------------------
--*****************************************************************************************************************************************************************--
--|-------------------------------------------------------------------------------------------------|--
--|--- ################################### CRIAR_DISCIPLINAS ################################### ---|----------------------------------------------------------------
--|-------------------------------------------------------------------------------------------------|--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| CRIA DISCIPLINAS UNIDAS A UM MÓDULO. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| ENTRADA: [INT] CÓDIGO DO MÓDULO; [TEXT[]] NOMES DAS DISCIPLINAS; [TEXT[]] DESCRIÇÕES DAS |--
--| DISCIPLINAS. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
CREATE OR REPLACE FUNCTION CRIAR_DISCIPLINAS(CODIGO_MODULO INT, NOME_DISCIPLINA TEXT[], DESCRICAO_DISCIPLINA TEXT[])
RETURNS VOID
AS $$
DECLARE
CONTADOR INT := 1;
BEGIN
WHILE CONTADOR <= ARRAY_LENGTH(NOME_DISCIPLINA,1) LOOP
INSERT INTO DISCIPLINA VALUES (DEFAULT, NOME_DISCIPLINA[CONTADOR], DESCRICAO_DISCIPLINA[CONTADOR], CODIGO_MODULO);
CONTADOR := CONTADOR + 1;
END LOOP;
END
$$ LANGUAGE plpgsql;
--|-------------------------------------------------------------------------------------------------|--
--|--- ################################## DELETAR_DISCIPLINA ################################### ---|----------------------------------------------------------------
--|-------------------------------------------------------------------------------------------------|--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| REMOVE A DISCIPLINA. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| ENTRADA: [INT] CÓDIGO DA DISCIPLINA. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| CASOS DE EXCEÇÕES: CÓDIGO DA DISCIPLINA INVÁLIDO. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
CREATE OR REPLACE FUNCTION DELETAR_DISCIPLINA(CODIGO_DISCIPLINA INT)
RETURNS VOID
AS $$
BEGIN
IF VERIFICAR_SE_REGISTRO_EXISTE(CODIGO_DISCIPLINA, 'DISCIPLINA') IS FALSE THEN
RAISE EXCEPTION 'ESSA DISCIPLINA NÃO EXISTE, INSIRA UM COD_DISCIPLINA VÁLIDO!';
ELSE
DELETE FROM DISCIPLINA D_C WHERE D_C.COD_DISCIPLINA = CODIGO_DISCIPLINA;
END IF;
END
$$ LANGUAGE plpgsql;
--*****************************************************************************************************************************************************************--
----------------------------*************************************** << VIDEO_AULA # PROFESSOR >> **************************************----------------------------
--*****************************************************************************************************************************************************************--
--|-------------------------------------------------------------------------------------------------|--
--|--- ################################### CRIAR_VIDEO_AULAS ################################### ---|----------------------------------------------------------------
--|-------------------------------------------------------------------------------------------------|--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| CRIA VIDEOAULAS UNIDAS A DISCIPLINAS. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| ENTRADA: [INT] CÓDIGO DA DISCIPLINA; [TEXT[]] TÍTULOS DAS VIDEOAULAS; [TEXT[]] DESCRIÇÕES DAS |--
--| VIDEOAULAS; [INT[]] DURAÇÕES DAS VIDEOAULAS. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
CREATE OR REPLACE FUNCTION CRIAR_VIDEO_AULAS(CODIGO_DISCIPLINA INT, TITULO_VIDEO TEXT[], DESCRICAO TEXT[], DURACAO INT[])
RETURNS VOID
AS $$
DECLARE
CONTADOR INT := 1;
BEGIN
WHILE CONTADOR <= ARRAY_LENGTH(TITULO_VIDEO,1) LOOP -- NO ARRAY LENGHT, ESSE "1" SIGNIFICA A QUANTIDADE DE COLUNAS DA ARRAY.
INSERT INTO VIDEO_AULA VALUES (DEFAULT, TITULO_VIDEO[CONTADOR], DESCRICAO[CONTADOR], DURACAO[CONTADOR], CODIGO_DISCIPLINA);
CONTADOR := CONTADOR + 1;
END LOOP;
END
$$ LANGUAGE plpgsql;
--|-------------------------------------------------------------------------------------------------|--
--|--- ################################## DELETAR_VIDEO_AULA ################################### ---|----------------------------------------------------------------
--|-------------------------------------------------------------------------------------------------|--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| REMOVE A VIDEOAULA. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| ENTRADA: [INT] CÓDIGO DA VIDEOAULA. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| CASOS DE EXCEÇÕES: CÓDIGO DA VIDEOAULA INVÁLIDO. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
CREATE OR REPLACE FUNCTION DELETAR_VIDEO_AULA(CODIGO_VIDEO_AULA INT)
RETURNS VOID
AS $$
BEGIN
IF VERIFICAR_SE_REGISTRO_EXISTE(CODIGO_VIDEO_AULA, 'VIDEO_AULA') IS FALSE THEN
RAISE EXCEPTION 'ESSE VIDEO NÃO EXISTE, INSIRA UM COD_VIDEO_AULA VÁLIDO!';
ELSE
DELETE FROM VIDEO_AULA V_A WHERE V_A.COD_VIDEO_AULA = CODIGO_VIDEO_AULA;
END IF;
END
$$ LANGUAGE plpgsql;
--*****************************************************************************************************************************************************************--
----------------------------*************************************** << ALUNO_VIDEO_ASSISTIDO >> ***************************************----------------------------
--*****************************************************************************************************************************************************************--
--|-------------------------------------------------------------------------------------------------|--
--|--- ################################## ASSISTIR_VIDEO_AULA ################################## ---|----------------------------------------------------------------
--|-------------------------------------------------------------------------------------------------|--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| FAZ O ALUNO ASSISTIR À VIDEOAULA (FAZ UM VÍNCULO ALUNO_VIDEO_ASSISTIDO) |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| ENTRADA: [INT] CÓDIGO DO ALUNO; [INT] CÓDIGO DA VIDEOAULA. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
CREATE OR REPLACE FUNCTION ASSISTIR_VIDEO_AULA(CODIGO_ALUNO INT, CODIGO_VIDEO_AULA INT)
RETURNS VOID
AS $$
BEGIN
IF ALUNO_JA_ASSISTIU(CODIGO_ALUNO, CODIGO_VIDEO_AULA) IS FALSE THEN
INSERT INTO ALUNO_VIDEO_ASSISTIDO VALUES (DEFAULT, CODIGO_ALUNO, CODIGO_VIDEO_AULA);
END IF;
END
$$ LANGUAGE plpgsql;
--*****************************************************************************************************************************************************************--
----------------------------**************************************** << QUESTAO # PROFESSOR >> ****************************************----------------------------
--*****************************************************************************************************************************************************************--
--|-------------------------------------------------------------------------------------------------|--
--|--- ##################################### CRIAR_QUESTAO ##################################### ---|----------------------------------------------------------------
--|-------------------------------------------------------------------------------------------------|--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| CRIA UMA QUESTÃO UNIDA A UMA DISCIPLINA. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| ENTRADA: [INT] CÓDIGO DA DISCIPLINA; [TEXT] TEXTO DA QUESTÃO. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
CREATE OR REPLACE FUNCTION CRIAR_QUESTAO(CODIGO_DISCIPLINA INT, TEXTO_INSERIDO TEXT)
RETURNS VOID
AS $$
BEGIN
INSERT INTO QUESTAO VALUES (DEFAULT, TEXTO_INSERIDO, CODIGO_DISCIPLINA);
END
$$ LANGUAGE plpgsql;
--|-------------------------------------------------------------------------------------------------|--
--|--- #################################### DELETAR_QUESTAO #################################### ---|----------------------------------------------------------------
--|-------------------------------------------------------------------------------------------------|--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| REMOVE A QUESTÃO. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| ENTRADA: [INT] CÓDIGO DA QUESTÃO. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| CASOS DE EXCEÇÕES: CÓDIGO DA QUESTÃO INVÁLIDO. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
CREATE OR REPLACE FUNCTION DELETAR_QUESTAO(CODIGO_QUESTAO INT)
RETURNS VOID
AS $$
BEGIN
IF VERIFICAR_SE_REGISTRO_EXISTE(CODIGO_QUESTAO, 'QUESTAO') IS FALSE THEN
RAISE EXCEPTION 'ESSA QUESTAO NÃO EXISTE, INSIRA UM COD_QUESTAO VÁLIDO!';
ELSE
DELETE FROM QUESTAO WHERE COD_QUESTAO = CODIGO_QUESTAO;
END IF;
END
$$ LANGUAGE plpgsql;
--|-------------------------------------------------------------------------------------------------|--
--|--- ############################## LISTAR_QUESTOES_DOS_ALUNOS ############################### ---|----------------------------------------------------------------
--|-------------------------------------------------------------------------------------------------|--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| LISTA AS QUESTÕES RESPONDIDAS POR ALUNOS EM CURSOS DO PROFESSOR. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| ENTRADA: [INT] CÓDIGO DA QUESTÃO. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| SAÍDA: [TABLE(COD_QUESTAO_ALUNO INT, RESPOSTA_CORRETA VARCHAR(13), TEXTO VARCHAR(500), |--
--| RESPOSTA_ALUNO VARCHAR(500))] TABELA COM INFORMAÇÕES ÚTEIS EM UMA LISTAGEM. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
CREATE OR REPLACE FUNCTION LISTAR_QUESTOES_DOS_ALUNOS(CODIGO_PROFESSOR INT)
RETURNS TABLE(COD_QUESTAO_ALUNO INT, RESPOSTA_CORRETA VARCHAR(13), TEXTO VARCHAR(500), RESPOSTA_ALUNO VARCHAR(500))
AS $$
BEGIN
RETURN QUERY SELECT Q_A.COD_QUESTAO_ALUNO, Q_A.RESPOSTA_CORRETA, Q.TEXTO, Q_A.RESPOSTA_ALUNO FROM QUESTAO_ALUNO Q_A
INNER JOIN QUESTAO Q ON Q_A.COD_QUESTAO = Q.COD_QUESTAO INNER JOIN DISCIPLINA D_C ON Q.COD_DISCIPLINA = D_C.COD_DISCIPLINA
INNER JOIN MODULO M_D ON D_C.COD_MODULO = M_D.COD_MODULO INNER JOIN CURSO C_R ON M_D.COD_CURSO = C_R.COD_CURSO
WHERE C_R.COD_PROFESSOR = CODIGO_PROFESSOR
ORDER BY C_R.COD_CURSO, M_D.COD_MODULO, D_C.COD_DISCIPLINA, Q_A.COD_QUESTAO_ALUNO;
END
$$ LANGUAGE plpgsql;
--|-------------------------------------------------------------------------------------------------|--
--|--- #################################### CORRIGIR_QUESTAO #################################### --|----------------------------------------------------------------
--|-------------------------------------------------------------------------------------------------|--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| CORRIGE UMA QUESTAO_ALUNO COM UM TEXTO QUE REPRESENTA SE A RESPOSTA ESTÁ CORRETA. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| ENTRADA: [INT] CÓDIGO DO VÍNCULO QUESTAO_ALUNO CORRIGIDO; [TEXT] RESPOSTA CORRETA INSERIDA. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
CREATE OR REPLACE FUNCTION CORRIGIR_QUESTAO(COD_QUESTAO_ALUNO_CORRIGIDA INT, RESPOSTA_CORRETA_INSERIDA TEXT)
RETURNS VOID
AS $$
BEGIN
UPDATE QUESTAO_ALUNO SET RESPOSTA_CORRETA = RESPOSTA_CORRETA_INSERIDA WHERE COD_QUESTAO_ALUNO = COD_QUESTAO_ALUNO_CORRIGIDA;
END
$$ LANGUAGE plpgsql;
--*****************************************************************************************************************************************************************--
----------------------------************************************* << QUESTIONARIO # PROFESSOR >> **************************************----------------------------
--*****************************************************************************************************************************************************************--
--|-------------------------------------------------------------------------------------------------|--
--|--- ################################## CRIAR_QUESTIONARIO ################################### ---|------------------====------------------------------------------
--|-------------------------------------------------------------------------------------------------|--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| CRIA UM QUESTIONÁRIO UNIDO A UMA DISCIPLINA. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| ENTRADA: [INT] NOME DO QUESTIONÁRIO; [INT] CÓDIGO DA DISCIPLINA. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
CREATE OR REPLACE FUNCTION CRIAR_QUESTIONARIO(NOME_INSERIDO TEXT, COD_DISCIPLINA_INSERIDA INT)
RETURNS VOID
AS $$
BEGIN
INSERT INTO QUESTIONARIO VALUES (DEFAULT, NOME_INSERIDO, COD_DISCIPLINA_INSERIDA);
END
$$ LANGUAGE plpgsql;
--|-------------------------------------------------------------------------------------------------|--
--|--- ################################# DELETAR_QUESTIONARIO ################################## ---|----------------------------------------------------------------
--|-------------------------------------------------------------------------------------------------|--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| REMOVE UM QUESTIONÁRIO. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| ENTRADA: [INT] CÓDIGO DO QUESTIONÁRIO. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| CASOS DE EXCEÇÕES: CÓDIGO DO QUESTIONÁRIO INVÁLIDO. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
CREATE OR REPLACE FUNCTION DELETAR_QUESTIONARIO(COD_QUESTIONARIO_DELETADO INT)
RETURNS VOID
AS $$
BEGIN
IF VERIFICAR_SE_REGISTRO_EXISTE(COD_QUESTIONARIO_DELETADO, 'QUESTIONARIO') IS FALSE THEN
RAISE EXCEPTION 'ESSE QUESTIONARIO NÃO EXISTE, INSIRA UM COD_QUESTIONARIO VÁLIDO!';
ELSE
DELETE FROM QUESTIONARIO WHERE COD_QUESTIONARIO = COD_QUESTIONARIO_DELETADO;
END IF;
END
$$ LANGUAGE plpgsql;
--*****************************************************************************************************************************************************************--
----------------------------********************************* << QUESTAO_QUESTIONARIO # PROFESSOR >> **********************************----------------------------
--*****************************************************************************************************************************************************************--
--|-------------------------------------------------------------------------------------------------|--
--|--- ############################ VINCULAR_QUESTAO_A_QUESTIONARIO ############################ ---|----------------------------------------------------------------
--|-------------------------------------------------------------------------------------------------|--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| CRIA UM VÍNCULO ENTRE A QUESTÃO E O QUESTIONÁRIO NA TABELA QUESTAO_QUESTIONARIO. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| ENTRADA: [INT] CÓDIGO DO QUESTIONÁRIO VÍNCULADO; [INT] CÓDIGO DA QUESTÃO VINCULADA. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
CREATE OR REPLACE FUNCTION VINCULAR_QUESTAO_A_QUESTIONARIO(COD_QUESTIONARIO_VINCULADO INT, COD_QUESTAO_VINCULADA INT)
RETURNS VOID
AS $$
BEGIN
INSERT INTO QUESTAO_QUESTIONARIO VALUES (DEFAULT, COD_QUESTAO_VINCULADA, COD_QUESTIONARIO_VINCULADO);
END
$$ LANGUAGE plpgsql;
--|-------------------------------------------------------------------------------------------------|--
--|--- ############################# SUBMETER_RESPOSTA_DE_QUESTAO ############################## ---|----------------------------------------------------------------
--|-------------------------------------------------------------------------------------------------|--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| FAZ O ALUNO SUBMETER UMA RESPOSTA PARA UMA QUESTÃO POR MEIO DO ALUNO_QUESTAO. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
--| ENTRADA: [INT] CÓDIGO DO ALUNO; [INT] CÓDIGO DA QUESTÃO; [TEXT] RESPOSTA PARA A QUESTÃO. |--
--|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||--
CREATE OR REPLACE FUNCTION SUBMETER_RESPOSTA_DE_QUESTAO(COD_ALUNO_ANALISADO INT, COD_QUESTAO_SUBMETIDA INT, RESPOSTA_ALUNO_SUBMETIDA TEXT)
RETURNS VOID
AS $$
DECLARE
COD_QUESTAO_ALUNO_ANALISADO INT := (SELECT COD_QUESTAO_ALUNO FROM QUESTAO_ALUNO
WHERE COD_QUESTAO = COD_QUESTAO_SUBMETIDA AND COD_ALUNO = COD_ALUNO_ANALISADO);
BEGIN
IF COD_QUESTAO_ALUNO_ANALISADO IS NOT NULL THEN
UPDATE QUESTAO_ALUNO SET RESPOSTA_ALUNO = RESPOSTA_ALUNO_SUBMETIDA, RESPOSTA_CORRETA = DEFAULT
WHERE COD_QUESTAO_ALUNO = COD_QUESTAO_SUBMETIDA;
ELSE
INSERT INTO QUESTAO_ALUNO VALUES(DEFAULT, RESPOSTA_ALUNO_SUBMETIDA, DEFAULT, COD_QUESTAO_SUBMETIDA, COD_ALUNO_ANALISADO);
END IF;
END
$$ LANGUAGE plpgsql;