Advertisement
Guest User

Untitled

a guest
Jul 14th, 2019
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.                             -- ################################################## --
  2.                             -- ##################### TABELAS #################### --
  3.                             -- ################################################## --
  4.  
  5.  
  6. CREATE TABLE ALUNO
  7. (  
  8.     COD_ALUNO INT NOT NULL PRIMARY KEY,
  9.     NOME VARCHAR(30) NOT NULL,
  10.     CPF VARCHAR(11),
  11.     DATA_NASCIMENTO DATE NOT NULL,
  12.     EMAIL VARCHAR(30) NOT NULL,
  13.     SENHA VARCHAR(30) NOT NULL,
  14.     SALDO FLOAT DEFAULT 0
  15. );
  16.  
  17. CREATE TABLE PROFESSOR
  18. (  
  19.     COD_PROFESSOR INT NOT NULL PRIMARY KEY,
  20.     NOME VARCHAR(30) NOT NULL,
  21.     CPF VARCHAR(11) NOT NULL,
  22.     DATA_NASCIMENTO DATE NOT NULL,
  23.     EMAIL VARCHAR(30) NOT NULL,
  24.     SENHA VARCHAR(30) NOT NULL,
  25.     SALDO FLOAT DEFAULT 0,
  26.     DATA_ULTIMO_PAGAMENTO DATE DEFAULT NULL
  27. );
  28.  
  29. CREATE TABLE CURSO
  30. (  
  31.     COD_CURSO INT NOT NULL PRIMARY KEY,
  32.     NOME VARCHAR(60) NOT NULL,
  33.     DESCRICAO VARCHAR(300),
  34.     DURACAO INT DEFAULT 0,
  35.     PRECO FLOAT,
  36.     NUMERO_MODULOS INT DEFAULT 0,
  37.     PUBLICADO BOOLEAN DEFAULT FALSE,
  38.     DISPONIBILIDADE BOOLEAN DEFAULT FALSE,
  39.     COD_PROFESSOR INT NOT NULL REFERENCES PROFESSOR(COD_PROFESSOR) ON DELETE CASCADE
  40. );
  41.  
  42. CREATE TABLE ALUNO_CURSO
  43. (  
  44.     COD_ALUNO_CURSO SERIAL PRIMARY KEY,
  45.     DATA_COMPRA DATE,
  46.     NOTA_AVALIACAO FLOAT,
  47.     COD_ALUNO INT NOT NULL REFERENCES ALUNO(COD_ALUNO) ON DELETE CASCADE,
  48.     COD_CURSO INT NOT NULL REFERENCES CURSO(COD_CURSO) ON DELETE CASCADE
  49. );
  50.  
  51. CREATE TABLE MODULO
  52. (  
  53.     COD_MODULO SERIAL PRIMARY KEY,
  54.     NOME VARCHAR(100),
  55.     DESCRICAO VARCHAR(300),
  56.     DURACAO INT,
  57.     COD_CURSO INT NOT NULL REFERENCES CURSO(COD_CURSO) ON DELETE CASCADE
  58. );
  59.  
  60. CREATE TABLE ALUNO_MODULO
  61. (
  62.     COD_ALUNO_MODULO SERIAL PRIMARY KEY,
  63.     ACESSIVEL BOOLEAN,
  64.     META_CONCLUIDA BOOLEAN,
  65.     COD_ALUNO INT NOT NULL REFERENCES ALUNO(COD_ALUNO) ON DELETE CASCADE,
  66.     COD_MODULO INT NOT NULL REFERENCES MODULO(COD_MODULO) ON DELETE CASCADE
  67. );
  68.  
  69. CREATE TABLE PRE_REQUESITO
  70. (  
  71.     COD_PRE_REQUESITO INT NOT NULL PRIMARY KEY,
  72.     COD_MODULO INT NOT NULL REFERENCES MODULO(COD_MODULO) ON DELETE CASCADE,
  73.     COD_MODULO_PRE_REQUESITO INT NOT NULL REFERENCES MODULO(COD_MODULO) ON DELETE CASCADE
  74. );
  75.  
  76. CREATE TABLE DISCIPLINA
  77. (  
  78.     COD_DISCIPLINA SERIAL PRIMARY KEY,
  79.     NOME VARCHAR(100),
  80.     DESCRICAO VARCHAR(300),
  81.     COD_MODULO INT NOT NULL REFERENCES MODULO(COD_MODULO) ON DELETE CASCADE
  82. );
  83.  
  84. CREATE TABLE VIDEO_AULA
  85. (  
  86.     COD_VIDEO_AULA SERIAL PRIMARY KEY,
  87.     NOME VARCHAR(30) NOT NULL,
  88.     DESCRICAO VARCHAR(300),
  89.     DURACAO FLOAT,
  90.     COD_DISCIPLINA INT NOT NULL REFERENCES DISCIPLINA(COD_DISCIPLINA) ON DELETE CASCADE
  91. );
  92.  
  93. CREATE TABLE ALUNO_VIDEOS_ASSISTIDOS
  94. (  
  95.     COD_ALUNO_VIDEO_ASSISTIDO SERIAL PRIMARY KEY,
  96.     COD_ALUNO INT NOT NULL REFERENCES ALUNO(COD_ALUNO) ON DELETE CASCADE,
  97.     COD_VIDEO_AULA INT NOT NULL REFERENCES VIDEO_AULA(COD_VIDEO_AULA) ON DELETE CASCADE
  98. );
  99.  
  100. CREATE TABLE QUESTAO
  101. (  
  102.     COD_QUESTAO INT NOT NULL PRIMARY KEY,
  103.     TEXTO VARCHAR(500),
  104.     COD_DISCIPLINA INT NOT NULL REFERENCES DISCIPLINA(COD_DISCIPLINA) ON DELETE CASCADE
  105. );
  106.  
  107. CREATE TABLE QUESTIONARIO
  108. (  
  109.     COD_QUESTIONARIO INT NOT NULL PRIMARY KEY,
  110.     NOME VARCHAR(30),
  111.     COD_DISCIPLINA INT NOT NULL REFERENCES DISCIPLINA(COD_DISCIPLINA) ON DELETE CASCADE
  112. );
  113.  
  114. CREATE TABLE QUESTAO_QUESTIONARIO
  115. (  
  116.     COD_QUESTAO_QUESTIONARIO INT NOT NULL PRIMARY KEY,
  117.     COD_QUESTAO INT NOT NULL REFERENCES QUESTAO(COD_QUESTAO) ON DELETE CASCADE,
  118.     COD_QUESTIONARIO INT NOT NULL REFERENCES QUESTIONARIO(COD_QUESTIONARIO) ON DELETE CASCADE
  119. );
  120.  
  121. CREATE TABLE QUESTAO_ALUNO
  122. (  
  123.     COD_QUESTAO_ALUNO INT NOT NULL PRIMARY KEY,
  124.     RESPOSTAR_ALUNO VARCHAR(500),
  125.     RESPOSTA_CORRETA BOOLEAN
  126. );
  127.  
  128.  
  129. --------------------------------------------------------------------------------------------------------------------------------
  130.                             -- ################################################## --
  131.                             -- ############ FUNCTIONS INSERT USUARIO ############ --
  132.                             -- ################################################## --
  133.                            
  134. /* CRIANDO FUNCTION INSERIR ALUNO E PROFESSOR */
  135. CREATE OR REPLACE FUNCTION INSERIR_ALUNO_E_PROFESSOR(COD_USUARIO INT,
  136. NOME TEXT, CPF TEXT, DATA_NASCIMENTO DATE, EMAIL TEXT, SENHA TEXT, TABELA TEXT)
  137. RETURNS VOID
  138. AS $$
  139. BEGIN
  140.     IF TABELA = 'ALUNO' THEN
  141.         INSERT INTO ALUNO VALUES (COD_USUARIO, NOME, CPF, DATA_NASCIMENTO, EMAIL, SENHA, DEFAULT);
  142.     END IF;
  143.  
  144.     IF TABELA = 'PROFESSOR' THEN
  145.         INSERT INTO PROFESSOR VALUES (COD_USUARIO, NOME, CPF, DATA_NASCIMENTO, EMAIL, SENHA, DEFAULT, DEFAULT);
  146.     END IF;
  147. END
  148. $$ LANGUAGE plpgsql;
  149.  
  150. /* RETORNA IDADE */
  151. CREATE OR REPLACE FUNCTION RETORNA_IDADE(DATA_NASCIMENTO DATE)
  152. RETURNS INT
  153. AS $$
  154. BEGIN
  155.     RETURN EXTRACT(YEAR FROM AGE(DATA_NASCIMENTO));
  156. END
  157. $$ LANGUAGE plpgsql;
  158.  
  159.  
  160. /* USUARIO EXISTENTE NO BD DEPENDENDO DA TABELA */
  161. CREATE OR REPLACE FUNCTION USUARIO_EXISTENTE(CPF_USUARIO TEXT, TABELA TEXT)
  162. RETURNS TABLE (CPF VARCHAR(11))
  163. AS $$
  164. BEGIN
  165.     IF TABELA = 'ALUNO' THEN
  166.         RETURN QUERY SELECT A_L.CPF FROM ALUNO A_L WHERE A_L.CPF = CPF_USUARIO;
  167.     END IF;
  168.    
  169.     IF TABELA = 'PROFESSOR' THEN
  170.         RETURN QUERY SELECT P_F.CPF FROM PROFESSOR P_F WHERE P_F.CPF = CPF_USUARIO;
  171.     END IF;
  172. END
  173. $$ LANGUAGE plpgsql;
  174.  
  175. /* EMAIL EXISTENTE NO BD DEPENDENDO DA TABELA */
  176. CREATE OR REPLACE FUNCTION EMAIL_USUARIO_EXISTENTE(EMAIL_USUARIO TEXT, TABELA TEXT)
  177. RETURNS TABLE (EMAIL VARCHAR(30))
  178. AS $$
  179. BEGIN
  180.     IF TABELA = 'ALUNO' THEN
  181.         RETURN QUERY SELECT A_L.EMAIL FROM ALUNO A_L WHERE A_L.EMAIL = EMAIL_USUARIO;
  182.     END IF;
  183.    
  184.     IF TABELA = 'PROFESSOR' THEN
  185.         RETURN QUERY SELECT P_F.EMAIL FROM PROFESSOR P_F WHERE P_F.EMAIL = EMAIL_USUARIO;
  186.     END IF;
  187. END
  188. $$ LANGUAGE plpgsql;
  189.  
  190. --------------------------------------------------------------------------------------------------------------------------------
  191.                             -- ################################################## --
  192.                             -- ############ TRIGGER INSERT USUARIOS ############# --
  193.                             -- ################################################## --
  194.                            
  195. /* FUNCTION REGRA DE NEGOCIO DA INSERÇÃO */
  196. CREATE OR REPLACE FUNCTION VERIFICA_INSERCAO()
  197. RETURNS TRIGGER
  198. AS $$
  199. DECLARE
  200.     IDADE INT := RETORNA_IDADE(NEW.DATA_NASCIMENTO);
  201.     CPF_ALUNO_EXISTENTE TEXT := USUARIO_EXISTENTE(NEW.CPF, 'ALUNO');
  202.     EMAIL_ALUNO_EXISTENTE TEXT := EMAIL_USUARIO_EXISTENTE(NEW.EMAIL, 'ALUNO');
  203.     CPF_PROFESSOR_EXISTENTE TEXT := USUARIO_EXISTENTE(NEW.CPF, 'PROFESSOR');
  204.     EMAIL_PROFESSOR_EXISTENTE TEXT := EMAIL_USUARIO_EXISTENTE(NEW.EMAIL, 'PROFESSOR');
  205. BEGIN
  206.    
  207.     IF IDADE < 18 THEN
  208.         RAISE EXCEPTION 'VOCÊ É MENOR DE IDADE CADASTRO REJEITADO!';
  209.  
  210.     ELSIF NEW.CPF = CPF_ALUNO_EXISTENTE THEN
  211.         RAISE EXCEPTION 'JÁ EXISTE UM ALUNO CADASTRADO COM ESSE CPF, INSIRA UM CPF VALIDO.';
  212.    
  213.     ELSIF NEW.EMAIL = EMAIL_ALUNO_EXISTENTE THEN
  214.         RAISE EXCEPTION 'ESSE EMAIL JÁ CONSTA EM UM CADASTRO ALUNO, INSIRA UM EMAIL VALIDO.';
  215.    
  216.     ELSIF NEW.CPF = CPF_PROFESSOR_EXISTENTE THEN
  217.         RAISE EXCEPTION 'JÁ EXISTE UM PROFESSOR CADASTRADO COM ESSE CPF, INSIRA UM CPF VALIDO.';
  218.    
  219.     ELSIF NEW.EMAIL = EMAIL_PROFESSOR_EXISTENTE THEN
  220.         RAISE EXCEPTION 'ESSE EMAIL JÁ CONSTA EM UM CADASTRO PROFESSOR, INSIRA UM EMAIL VALIDO.';
  221.     END IF;
  222.    
  223.     RETURN NEW;
  224. END
  225. $$ LANGUAGE plpgsql;
  226.  
  227. /* TREGGES INSERT ALUNO */
  228. CREATE TRIGGER EVENTOS_DE_INSERCAO_ALUNO
  229. BEFORE INSERT ON ALUNO
  230. FOR EACH ROW
  231. EXECUTE PROCEDURE VERIFICA_INSERCAO();
  232.  
  233. /* TREGGES INSERT PROFESSOR */
  234. CREATE TRIGGER EVENTOS_DE_INSERCAO_PROFESSOR
  235. BEFORE INSERT ON PROFESSOR
  236. FOR EACH ROW
  237. EXECUTE PROCEDURE VERIFICA_INSERCAO();
  238.                            
  239. -----------------------------------------------------------------------------------------------------------------------------
  240.  
  241.                             -- ################################################## --
  242.                             -- #################### FUNCTIONS ################### --
  243.                             -- ################################################## --
  244.  
  245. --------------------------------------------------------------------------------------------------------------------------------
  246.  
  247. /* RETORNA COD_PROFESSOR */
  248. CREATE OR REPLACE FUNCTION RETORNA_COD_PROFESSOR(CPF_PROFESSOR TEXT)
  249. RETURNS TABLE (PROFESSOR_CODIGO INT)
  250. AS $$
  251. BEGIN
  252.     RETURN QUERY SELECT COD_PROFESSOR FROM PROFESSOR P_F WHERE P_F.CPF = CPF_PROFESSOR;
  253. END
  254. $$ LANGUAGE plpgsql;
  255.  
  256. --------------------------------------------------------------------------------------------------------------------------------
  257.  
  258. /* CURSO EXISTENTE */
  259. CREATE OR REPLACE FUNCTION CURSO_EXISTE(CODIGO_CURSO INT)
  260. RETURNS INT
  261. AS $$
  262. DECLARE
  263.     CURSO_EXISTE INT;
  264. BEGIN
  265.     SELECT C_R.COD_CURSO INTO CURSO_EXISTE FROM CURSO C_R WHERE C_R.COD_CURSO = CODIGO_CURSO;
  266.    
  267.     IF CURSO_EXISTE IS NOT NULL THEN
  268.         RETURN CURSO_EXISTE;
  269.        
  270.     ELSE
  271.         RAISE EXCEPTION 'ESSE CURSO NÃO EXISTE! INFORME O CODIGO DE UM CURSO EXISTENTE...';
  272.     END IF;
  273. END
  274. $$ LANGUAGE plpgsql;
  275.  
  276. --------------------------------------------------------------------------------------------------------------------------------
  277.  
  278. /* MODULO EXISTENTE */
  279. CREATE OR REPLACE FUNCTION MODULO_EXISTE(CODIGO_MODULO INT)
  280. RETURNS INT
  281. AS $$
  282. DECLARE
  283.     MODULO_EXISTE INT := (SELECT C_S.COD_CURSO FROM CURSO C_S INNER JOIN MODULO M_D ON
  284.     C_S.COD_CURSO = M_D.COD_CURSO WHERE M_D.COD_MODULO = CODIGO_MODULO);
  285. BEGIN
  286.  
  287.     IF MODULO_EXISTE IS NOT NULL THEN
  288.         RETURN MODULO_EXISTE;
  289.     ELSE
  290.         RAISE EXCEPTION 'ESSE MODULO NÃO EXISTE PARA ESSE CURSO! INFORME O CODIGO DE UM MODULO EXISTENTE...';
  291.     END IF;
  292.    
  293. END
  294. $$ LANGUAGE plpgsql;
  295.  
  296. --------------------------------------------------------------------------------------------------------------------------------
  297.  
  298. /* DISCIPLINA EXISTENTE */
  299. CREATE OR REPLACE FUNCTION DISCIPLINA_EXISTENTE(CODIGO_DISCIPLINA INT)
  300. RETURNS INT
  301. AS $$
  302. DECLARE
  303.     DISCIPLINA_EXISTE INT := (SELECT D_C.COD_DISCIPLINA FROM DISCIPLINA D_C WHERE D_C.COD_DISCIPLINA = CODIGO_DISCIPLINA);
  304. BEGIN
  305.     IF DISCIPLINA_EXISTE IS NOT NULL THEN
  306.         RETURN DISCIPLINA_EXISTE;
  307.     ELSE
  308.         RAISE EXCEPTION 'ESSA DISCIPLINA NÃO EXISTE! INFORME O CODIGO DE UMA DISCIPLINA EXISTENTE...';
  309.     END IF;
  310. END
  311. $$ LANGUAGE plpgsql;
  312.  
  313. --------------------------------------------------------------------------------------------------------------------------------
  314. /* DELETANDO VIDEO */
  315. CREATE OR REPLACE FUNCTION DELETAR_VIDEO(CPF_PROFESSOR TEXT, CODIGO_VIDEO_AULA INT)
  316. RETURNS VOID
  317. AS $$
  318. DECLARE
  319.     VIDEO_EXISTE INT := (SELECT C_S.COD_CURSO FROM CURSO C_S INNER JOIN MODULO M_D ON
  320.     C_S.COD_CURSO = M_D.COD_CURSO INNER JOIN DISCIPLINA D_S ON
  321.     M_D.COD_MODULO = D_S.COD_MODULO INNER JOIN VIDEO_AULA V_A ON
  322.     D_S.COD_DISCIPLINA = V_A.COD_DISCIPLINA WHERE V_A.COD_VIDEO_AULA = CODIGO_VIDEO_AULA);
  323.     CODIGO_PROFESSOR INT := (SELECT P_F.COD_PROFESSOR FROM PROFESSOR P_F WHERE P_F.CPF = CPF_PROFESSOR);
  324.     CURSO_PERTENCE_PROF INT := (SELECT C_R.COD_CURSO FROM CURSO C_R WHERE C_R.COD_PROFESSOR = CODIGO_PROFESSOR AND
  325.     C_R.COD_CURSO = VIDEO_EXISTE);
  326. BEGIN
  327.    
  328.     IF CODIGO_PROFESSOR IS NOT NULL THEN
  329.         IF CURSO_PERTENCE_PROF IS NOT NULL THEN
  330.             IF VIDEO_EXISTE IS NOT NULL THEN
  331.                 DELETE FROM VIDEO_AULA V_A WHERE V_A.COD_VIDEO_AULA = CODIGO_VIDEO_AULA;
  332.             ELSE
  333.                 RAISE EXCEPTION 'ESSE VIDEO NÃO EXISTE, INSIRA UM COD_VIDEO_AULA VALIDO!';
  334.             END IF;
  335.         ELSE
  336.             RAISE EXCEPTION 'ESSE CURSO NÃO PERCENTE A ESSE PROFESSOR!';
  337.         END IF;
  338.     ELSE
  339.         RAISE EXCEPTION 'ESSE PROFESSOR NÃO EXISTE, INSIRA UM CPF VALIDO!';
  340.     END IF;
  341.  
  342. END
  343. $$ LANGUAGE plpgsql;
  344.  
  345. --------------------------------------------------------------------------------------------------------------------------------
  346. /* DELETANDO DISCIPLINA */
  347. CREATE OR REPLACE FUNCTION DELETAR_DISCIPLINA(CPF_PROFESSOR TEXT, CODIGO_DISCIPLINA INT)
  348. RETURNS VOID
  349. AS $$
  350. DECLARE
  351.     DISCIPLINA_EXISTENTE INT = (SELECT C_S.COD_CURSO FROM CURSO C_S INNER JOIN MODULO M_D ON
  352.     C_S.COD_CURSO = M_D.COD_CURSO INNER JOIN DISCIPLINA D_S ON
  353.     M_D.COD_MODULO = D_S.COD_MODULO WHERE D_S.COD_DISCIPLINA = CODIGO_DISCIPLINA);
  354.     CODIGO_PROFESSOR INT := (SELECT P_F.COD_PROFESSOR FROM PROFESSOR P_F WHERE P_F.CPF = CPF_PROFESSOR);
  355.     CURSO_PERTENCE_PROF INT := (SELECT C_R.COD_CURSO FROM CURSO C_R WHERE C_R.COD_PROFESSOR =
  356.     CODIGO_PROFESSOR AND C_R.COD_CURSO = DISCIPLINA_EXISTENTE );
  357. BEGIN
  358.    
  359.     IF CODIGO_PROFESSOR IS NOT NULL THEN
  360.         IF CURSO_PERTENCE_PROF IS NOT NULL THEN
  361.             IF DISCIPLINA_EXISTENTE IS NOT NULL THEN
  362.                 DELETE FROM DISCIPLINA D_C WHERE D_C.COD_DISCIPLINA = CODIGO_DISCIPLINA;
  363.             ELSE
  364.                 RAISE EXCEPTION 'ESSA DISCIPLINA NÃO EXISTE, INSIRA UM COD_DISCIPLINA VALIDO!';
  365.             END IF;
  366.         ELSE
  367.             RAISE EXCEPTION 'ESSE CURSO NÃO PERCENTE A ESSE PROFESSOR!';
  368.         END IF;
  369.     ELSE
  370.         RAISE EXCEPTION 'ESSE PROFESSOR NÃO EXISTE, INSIRA UM CPF VALIDO!';
  371.     END IF;
  372.    
  373. END
  374. $$ LANGUAGE plpgsql;
  375.  
  376. --------------------------------------------------------------------------------------------------------------------------------
  377. /* DELETANDO MODULO */
  378. CREATE OR REPLACE FUNCTION DELETAR_MODULO(CPF_PROFESSOR TEXT, CODIGO_MODULO INT)
  379. RETURNS VOID
  380. AS $$
  381. DECLARE
  382.     MODULO_EXISTE INT := (SELECT C_S.COD_CURSO FROM CURSO C_S INNER JOIN MODULO M_D ON
  383.     C_S.COD_CURSO = M_D.COD_CURSO WHERE M_D.COD_MODULO = CODIGO_MODULO);
  384.     CODIGO_PROFESSOR INT := (SELECT P_F.COD_PROFESSOR FROM PROFESSOR P_F WHERE P_F.CPF = CPF_PROFESSOR);
  385.     CURSO_PERTENCE_PROF INT := (SELECT C_R.COD_CURSO FROM CURSO C_R WHERE C_R.COD_PROFESSOR =
  386.     CODIGO_PROFESSOR AND C_R.COD_CURSO = MODULO_EXISTE );
  387. BEGIN
  388.    
  389.     IF CODIGO_PROFESSOR IS NOT NULL THEN
  390.         IF CURSO_PERTENCE_PROF IS NOT NULL THEN
  391.             IF MODULO_EXISTE IS NOT NULL THEN
  392.                 DELETE FROM MODULO M_D WHERE M_D.COD_MODULO = CODIGO_MODULO;
  393.             ELSE
  394.                 RAISE EXCEPTION 'ESSE MODULO NÃO EXISTE, INSIRA UM COD_MODULO VALIDO!';
  395.             END IF;
  396.         ELSE
  397.             RAISE EXCEPTION 'ESSE CURSO NÃO PERCENTE A ESSE PROFESSOR!';
  398.         END IF;
  399.     ELSE
  400.         RAISE EXCEPTION 'ESSE PROFESSOR NÃO EXISTE, INSIRA UM CPF VALIDO!';
  401.     END IF;
  402.    
  403. END
  404. $$ LANGUAGE plpgsql;
  405.  
  406. --------------------------------------------------------------------------------------------------------------------------------
  407.  
  408. /* ADICIONANDO VIDEO AULAS AS DISCIPLINAS  */
  409.  
  410. CREATE OR REPLACE FUNCTION ADICIONAR_VIDEO_AULA(CPF_PROFESSOR TEXT,
  411. CODIGO_DISCIPLINA INT, TITULO_VIDEO TEXT[], DESCRICAO TEXT[], DURACAO INT[])
  412. RETURNS VOID
  413. AS $$
  414. DECLARE
  415.     CODIGO_CURSO INT := (SELECT M_D.COD_CURSO FROM CURSO C_R INNER JOIN MODULO M_D ON
  416.     C_R.COD_CURSO = M_D.COD_CURSO INNER JOIN DISCIPLINA D_C ON
  417.     M_D.COD_MODULO = D_C.COD_MODULO WHERE D_C.COD_DISCIPLINA = CODIGO_DISCIPLINA);
  418.     DISCIPLINA_EXISTENTE INT = DISCIPLINA_EXISTENTE(CODIGO_DISCIPLINA);
  419.     CODIGO_PROFESSOR INT := (SELECT P_F.COD_PROFESSOR FROM PROFESSOR P_F WHERE P_F.CPF = CPF_PROFESSOR);
  420.     CURSO_PERTENCE_PROF INT := (SELECT C_R.COD_CURSO FROM CURSO C_R WHERE C_R.COD_PROFESSOR = CODIGO_PROFESSOR AND
  421.     C_R.COD_CURSO = CODIGO_CURSO);
  422.     CONTADOR INT := 1;
  423. BEGIN
  424.    
  425.     IF CODIGO_PROFESSOR IS NOT NULL THEN
  426.         IF CURSO_PERTENCE_PROF IS NOT NULL THEN
  427.             IF DISCIPLINA_EXISTENTE IS NOT NULL THEN
  428.                 WHILE CONTADOR <= ARRAY_LENGTH(TITULO_VIDEO,1) LOOP
  429.                     INSERT INTO VIDEO_AULA VALUES (DEFAULT, TITULO_VIDEO[CONTADOR], DESCRICAO[CONTADOR], DURACAO[CONTADOR],
  430.                     CODIGO_DISCIPLINA);
  431.                     CONTADOR := CONTADOR + 1;
  432.                 END LOOP;
  433.             END IF;
  434.         ELSE
  435.             RAISE EXCEPTION 'ESSE CURSO NÃO PERCENTE A ESSE PROFESSOR!';
  436.         END IF;
  437.     ELSE
  438.         RAISE EXCEPTION 'ESSE PROFESSOR NÃO EXISTE, INSIRA UM CPF VALIDO!';
  439.     END IF;
  440. END
  441. $$ LANGUAGE plpgsql;
  442.  
  443.  
  444. --------------------------------------------------------------------------------------------------------------------------------
  445.  
  446. /* CRIANDO UMA DISCIPLINAS PARA ALGUM MODULO */
  447. CREATE OR REPLACE FUNCTION CRIAR_DISCIPLINAS(CPF_PROFESSOR TEXT,
  448. CODIGO_MODULO INT, NOME_DISCIPLINA TEXT[], DESCRICAO_DISCIPLINA TEXT[])
  449. RETURNS VOID
  450. AS $$
  451. DECLARE
  452.     CODIGO_CURSO INT := (SELECT C_S.COD_CURSO FROM CURSO C_S INNER JOIN MODULO M_D ON
  453.     C_S.COD_CURSO = M_D.COD_CURSO WHERE M_D.COD_MODULO = CODIGO_MODULO);
  454.     MODULO_EXISTENTE INT := MODULO_EXISTE(CODIGO_MODULO);
  455.     CODIGO_PROFESSOR INT := (SELECT P_F.COD_PROFESSOR FROM PROFESSOR P_F WHERE P_F.CPF = CPF_PROFESSOR);
  456.     CURSO_PERTENCE_PROF INT := (SELECT C_R.COD_CURSO FROM CURSO C_R WHERE C_R.COD_PROFESSOR = CODIGO_PROFESSOR AND C_R.COD_CURSO = CODIGO_CURSO);
  457.     CONTADOR INT := 1;
  458. BEGIN
  459.    
  460.     IF CODIGO_PROFESSOR IS NOT NULL THEN
  461.         IF CURSO_PERTENCE_PROF IS NOT NULL THEN
  462.             IF MODULO_EXISTENTE IS NOT NULL THEN
  463.                 WHILE CONTADOR <= ARRAY_LENGTH(NOME_DISCIPLINA,1) LOOP
  464.                     INSERT INTO DISCIPLINA VALUES (DEFAULT, NOME_DISCIPLINA[CONTADOR], DESCRICAO_DISCIPLINA[CONTADOR],
  465.                     CODIGO_MODULO);
  466.                     CONTADOR := CONTADOR + 1;
  467.                 END LOOP;
  468.             END IF;
  469.         ELSE
  470.             RAISE EXCEPTION 'ESSE CURSO NÃO PERCENTE A ESSE PROFESSOR!';
  471.         END IF;
  472.     ELSE
  473.         RAISE EXCEPTION 'ESSE PROFESSOR NÃO EXISTE, INSIRA UM CPF VALIDO!';
  474.     END IF;
  475. END
  476. $$ LANGUAGE plpgsql;
  477.  
  478. -----------------------------------------------------------------------------------------------------------------------------
  479.                         -- ############################################################### --
  480.                         -- ##################### TRIGGER ALUNO_MODULO #################### --
  481.                         -- ############################################################### --
  482.                        
  483.  
  484. CREATE OR REPLACE FUNCTION STATUS_ALUNO_MODULO(CODIGO_ALUNO INT, CODIGO_CURSO INT)
  485. RETURNS VOID
  486. AS $$
  487. DECLARE
  488.     REGISTRO_COD_MODULO RECORD;
  489.     CONTADOR INT := 1;
  490. BEGIN
  491.    
  492.     FOR REGISTRO_COD_MODULO IN (SELECT * FROM CURSO C_S INNER JOIN MODULO M_D ON C_S.COD_CURSO = M_D.COD_CURSO WHERE M_D.COD_CURSO = CODIGO_CURSO) LOOP
  493.         IF CONTADOR = 1 THEN
  494.             INSERT INTO ALUNO_MODULO VALUES (DEFAULT, TRUE, FALSE, CODIGO_ALUNO, REGISTRO_COD_MODULO.COD_MODULO);
  495.             CONTADOR := CONTADOR + 1;
  496.         ELSE
  497.             INSERT INTO ALUNO_MODULO VALUES (DEFAULT, FALSE, FALSE, CODIGO_ALUNO, REGISTRO_COD_MODULO.COD_MODULO);
  498.         END IF;
  499.     END LOOP;
  500.    
  501. END
  502. $$ LANGUAGE plpgsql;
  503.  
  504. CREATE OR REPLACE FUNCTION EVENTOS_ALUNO_CURSO()
  505. RETURNS TRIGGER
  506. AS $$
  507. BEGIN
  508.    
  509.     IF TG_OP = 'INSERT' THEN
  510.         PERFORM STATUS_ALUNO_MODULO(NEW.COD_ALUNO, NEW.COD_CURSO);
  511.     END IF;
  512.    
  513.     RETURN NEW;
  514.  
  515. END
  516. $$ LANGUAGE plpgsql;
  517.  
  518. CREATE TRIGGER EVENTO_ALUNO_CURSO
  519. AFTER INSERT OR UPDATE ON ALUNO_CURSO
  520. FOR EACH ROW
  521. EXECUTE PROCEDURE EVENTOS_ALUNO_CURSO();
  522.  
  523. /* UPDATE QUANDO FOR SATISFEITO A MEDIA DE VIDEOS ASSISTIDOS PELO MODULO PARA ALTERAR O BOOLEAN
  524. META_CONCLUIDA */
  525.  
  526. --------------------------------------------------------------------------------------------------------------------------------
  527.  
  528. /* CRIAR MODULOS */
  529. CREATE OR REPLACE FUNCTION CRIAR_MODULO(CPF_PROFESSOR TEXT,
  530. CODIGO_CURSO INT, NOME_MODULO TEXT[], DESCRICAO_MODULO TEXT[], DURACAO_MODULO INT[])
  531. RETURNS VOID
  532. AS $$
  533. DECLARE
  534.     CURSO_EXISTE INT := CURSO_EXISTE(CODIGO_CURSO);
  535.     CODIGO_PROFESSOR INT := (SELECT P_F.COD_PROFESSOR FROM PROFESSOR P_F WHERE P_F.CPF = CPF_PROFESSOR);
  536.     CURSO_PERTENCE_PROF INT := (SELECT C_R.COD_CURSO FROM CURSO C_R WHERE C_R.COD_PROFESSOR = CODIGO_PROFESSOR AND C_R.COD_CURSO = CODIGO_CURSO);
  537.     CONTADOR INT := 1;
  538. BEGIN
  539.     IF CODIGO_PROFESSOR IS NOT NULL THEN
  540.         IF CURSO_EXISTE IS NOT NULL THEN
  541.             IF CURSO_PERTENCE_PROF IS NOT NULL THEN
  542.                 WHILE CONTADOR <= ARRAY_LENGTH(NOME_MODULO,1) LOOP
  543.                     INSERT INTO MODULO VALUES (DEFAULT, NOME_MODULO[CONTADOR],
  544.                     DESCRICAO_MODULO[CONTADOR], DURACAO_MODULO[CONTADOR], CODIGO_CURSO);
  545.                     CONTADOR := CONTADOR + 1;
  546.                 END LOOP;
  547.             ELSE
  548.                 RAISE EXCEPTION 'ESSE CURSO NÃO PERCENTE A ESSE PROFESSOR!';
  549.             END IF;
  550.         ELSE
  551.             RAISE EXCEPTION 'ESSE CURSO NÃO EXISTE, DIGITE UM COD_CURSO VALIDO!';
  552.         END IF;
  553.     ELSE
  554.         RAISE EXCEPTION 'ESSE PROFESSOR NÃO EXISTE, INSIRA UM CPF VALIDO!';
  555.     END IF;
  556. END
  557. $$ LANGUAGE plpgsql;
  558.  
  559. --------------------------------------------------------------------------------------------------------------------------------
  560.  
  561. /* CRIAR CURSO */
  562. CREATE OR REPLACE FUNCTION CRIAR_CURSO(CPF_PROFESSOR TEXT, COD_CURSO INT, NOME_CURSO TEXT,
  563. DESCRICAO TEXT, PRECO FLOAT)
  564. RETURNS VOID
  565. AS $$
  566. DECLARE
  567.     COD_PROFESSOR INT := (SELECT P_F.COD_PROFESSOR FROM PROFESSOR P_F WHERE P_F.CPF = CPF_PROFESSOR);
  568. BEGIN
  569.    
  570.     IF COD_PROFESSOR IS NOT NULL THEN
  571.         INSERT INTO CURSO VALUES (COD_CURSO, NOME_CURSO, DESCRICAO, DEFAULT,
  572.         PRECO, DEFAULT, DEFAULT, DEFAULT, COD_PROFESSOR);
  573.     ELSE
  574.         RAISE EXCEPTION 'ESSE PROFESSOR NÃO EXISTE, CPF INVALIDO!';
  575.     END IF;
  576. END
  577. $$ LANGUAGE plpgsql;
  578.  
  579. --------------------------------------------------------------------------------------------------------------------------------
  580.  
  581. /* PUBLICAR CURSO */
  582. CREATE OR REPLACE FUNCTION PUBLICAR_CURSO(CPF_PROFESSOR TEXT, CODIGO_CURSO INT)
  583. RETURNS VOID
  584. AS $$
  585. DECLARE
  586.     COD_PROFESSOR INT := (SELECT P_F.COD_PROFESSOR FROM PROFESSOR P_F WHERE P_F.CPF = CPF_PROFESSOR);
  587.     CURSO_EXISTE INT := CURSO_EXISTE(CODIGO_CURSO);
  588.     DISPONIBILIDADE BOOLEAN := (SELECT C_S.DISPONIBILIDADE FROM CURSO C_S WHERE C_S.COD_CURSO = CODIGO_CURSO);
  589. BEGIN
  590.  
  591.     IF COD_PROFESSOR IS NOT NULL THEN
  592.         IF CURSO_EXISTE IS NOT NULL THEN
  593.             IF DISPONIBILIDADE = TRUE THEN
  594.                 UPDATE CURSO SET PUBLICADO = TRUE WHERE COD_CURSO = CODIGO_CURSO;
  595.             ELSE
  596.                 RAISE EXCEPTION 'O CURSO NÃO ATENDE OS REQUESITOS NO MOMENTO PARA SER PUBLICADO, ATENDA OS REQUESITOS';
  597.             END IF;
  598.         ELSE
  599.             RAISE EXCEPTION 'ESSE CURSO NÃO EXISTE, DIGITE UM COD_CURSO VALIDO!';
  600.         END IF;
  601.     ELSE
  602.         RAISE EXCEPTION 'ESSE PROFESSOR NÃO EXISTE, CPF INVALIDO!';
  603.     END IF;
  604.    
  605. END
  606. $$ LANGUAGE plpgsql;
  607.  
  608. ------------------------------------------------------------------------------------------------------------------------------------------------------------
  609. /* MODULO DISPONIVEL */
  610. CREATE OR REPLACE FUNCTION MODULO_STATUS_ALUNO(CODIGO_MODULO INT)
  611. RETURNS BOOLEAN
  612. AS $$
  613. DECLARE
  614.     STATUS BOOLEAN;
  615. BEGIN
  616.     SELECT M_D.STATUS INTO STATUS FROM MODULO M_D WHERE M_D.COD_MODULO = CODIGO_MODULO;
  617.     RETURN STATUS;
  618. END
  619. $$ LANGUAGE plpgsql;
  620.  
  621. ----------------------------------------------------------------------------------------------------------------------------------------------------------
  622.  
  623. /* ALUNO JÁ ASSITIU AO VIDEO */
  624.  
  625. CREATE OR REPLACE FUNCTION ALUNO_JA_ASSISTIU(CODIGO_VIDEO_AULA INT)
  626. RETURNS BOOLEAN
  627. AS $$
  628. DECLARE
  629.     REGISTRO_VIDEO RECORD;
  630. BEGIN
  631.    
  632.     FOR REGISTRO_VIDEO IN (SELECT * FROM ALUNO_VIDEOS_ASSISTIDOS) LOOP
  633.         IF REGISTRO_VIDEO.COD_VIDEO_AULA = CODIGO_VIDEO_AULA THEN
  634.             RETURN TRUE;
  635.         END IF;
  636.     END LOOP;
  637.     RETURN FALSE;
  638. END
  639. $$ LANGUAGE plpgsql;
  640.  
  641. /* ASSISTIR VIDEOS */
  642.  
  643. CREATE OR REPLACE FUNCTION ALUNO_ASSISTIR_VIDEO(CPF_ALUNO TEXT, CODIGO_VIDEO_AULA INT)
  644. RETURNS VOID
  645. AS $$
  646. DECLARE
  647.     VIDEO_EXISTE INT := (SELECT V_L.COD_VIDEO_AULA FROM VIDEO_AULA V_L WHERE V_L.COD_VIDEO_AULA = CODIGO_VIDEO_AULA);
  648.     ALUNO_EXISTE INT := (SELECT A_L.COD_ALUNO FROM ALUNO A_L WHERE A_L.CPF = CPF_ALUNO);
  649.     DISCIPLINA INT := (SELECT V_L.COD_DISCIPLINA FROM DISCIPLINA D_C INNER JOIN VIDEO_AULA V_L ON D_C.COD_DISCIPLINA =
  650.     V_L.COD_DISCIPLINA WHERE V_L.COD_VIDEO_AULA = CODIGO_VIDEO_AULA);
  651.     MODULO INT := (SELECT D_C.COD_MODULO FROM DISCIPLINA D_C INNER JOIN VIDEO_AULA V_L ON D_C.COD_DISCIPLINA =
  652.     V_L.COD_DISCIPLINA WHERE V_L.COD_VIDEO_AULA = CODIGO_VIDEO_AULA);
  653.     MODULO_ACESSIVEL BOOLEAN := (SELECT A_M.ACESSIVEL FROM ALUNO_MODULO A_M INNER JOIN MODULO M_D ON
  654.     A_M.COD_MODULO = M_D.COD_MODULO WHERE A_M.COD_MODULO = MODULO AND A_M.COD_ALUNO = ALUNO_EXISTE);
  655. BEGIN
  656.  
  657.     IF ALUNO_EXISTE IS NOT NULL THEN
  658.         IF VIDEO_EXISTE IS NOT NULL THEN
  659.             IF MODULO_ACESSIVEL = TRUE THEN
  660.                 IF ALUNO_JA_ASSISTIU(CODIGO_VIDEO_AULA) = FALSE THEN
  661.                     INSERT INTO ALUNO_VIDEOS_ASSISTIDOS VALUES (DEFAULT, ALUNO_EXISTE, CODIGO_VIDEO_AULA);
  662.                 END IF;
  663.             ELSE
  664.                 RAISE EXCEPTION 'VOCÊ NÃO ATINGIU A META OBRIGATORIA DE VIDEOS ASSISTIDOS!';
  665.             END IF;
  666.         ELSE
  667.             RAISE EXCEPTION 'ESSE VIDEO AULA NÃO EXISTE!';
  668.         END IF;
  669.     ELSE
  670.         RAISE EXCEPTION 'ESSE ALUNO NÃO EXISTE, CPF INVALIDO!';
  671.     END IF;
  672. END
  673. $$ LANGUAGE plpgsql;
  674.  
  675. ------------------------------------------------------------------------------------------------------------------------------------------------------------
  676.                         -- ############################################################### --
  677.                         -- #################### META MODULO CONCLUIDA #################### --
  678.                         -- ############################################################### --
  679.  
  680. CREATE OR REPLACE FUNCTION QUANTIDADE_VIDEOS_MODULO(CODIGO_VIDEO_AULA INT)
  681. RETURNS INT
  682. AS $$
  683. DECLARE
  684.     MODULO INT := (SELECT D_C.COD_MODULO FROM DISCIPLINA D_C INNER JOIN VIDEO_AULA V_L ON D_C.COD_DISCIPLINA =
  685.     V_L.COD_DISCIPLINA WHERE V_L.COD_VIDEO_AULA = CODIGO_VIDEO_AULA);
  686.     REGISTRO_DISCIPLINA RECORD;
  687.     REGISTRO_VIDEO RECORD;
  688.     CONTADOR INT := 0;
  689. BEGIN
  690.    
  691.     FOR REGISTRO_DISCIPLINA IN (SELECT * FROM DISCIPLINA D_C WHERE D_C.COD_MODULO = MODULO) LOOP
  692.         FOR REGISTRO_VIDEO IN (SELECT * FROM VIDEO_AULA V_D WHERE V_D.COD_DISCIPLINA = REGISTRO_DISCIPLINA.COD_DISCIPLINA) LOOP
  693.             CONTADOR := CONTADOR + 1;
  694.         END LOOP;
  695.     END LOOP;
  696.  
  697.     RETURN CONTADOR;
  698.    
  699. END
  700. $$ LANGUAGE plpgsql;
  701.  
  702.  
  703. CREATE OR REPLACE FUNCTION QUANTIDADE_VIDEOS_ASSISTINDOS(CODIGO_ALUNO INT)
  704. RETURNS INT
  705. AS $$
  706. DECLARE
  707.     REGISTRO_VIDEO_ASSISTIDO RECORD;
  708.     CONTADOR INT := 0;
  709. BEGIN
  710.    
  711.     FOR REGISTRO_VIDEO_ASSISTIDO IN (SELECT * FROM ALUNO_VIDEOS_ASSISTIDOS A_V_A WHERE A_V_A.COD_ALUNO = CODIGO_ALUNO) LOOP
  712.         CONTADOR := CONTADOR + 1;
  713.     END LOOP;
  714.    
  715.     RETURN CONTADOR;
  716.    
  717. END
  718. $$ LANGUAGE plpgsql;
  719.  
  720.  
  721. CREATE OR REPLACE FUNCTION EVENTO_MODULO_META_CONCLUIDA()
  722. RETURNS TRIGGER
  723. AS $$
  724. DECLARE
  725.     CODIGO_MODULO INT := (SELECT M_D.COD_MODULO FROM MODULO M_D INNER JOIN DISCIPLINA D_C ON
  726.     M_D.COD_MODULO = D_C.COD_MODULO INNER JOIN VIDEO_AULA V_L ON D_C.COD_DISCIPLINA =
  727.     V_L.COD_DISCIPLINA WHERE V_L.COD_VIDEO_AULA = NEW.COD_VIDEO_AULA);
  728.     CODIGO_ALUNO INT := (SELECT A_L.COD_ALUNO FROM ALUNO A_L INNER JOIN ALUNO_CURSO A_C ON
  729.     A_L.COD_ALUNO = A_C.COD_ALUNO WHERE A_C.COD_ALUNO = NEW.COD_ALUNO);
  730.     META_MODULO_PORCENTAGEM FLOAT := TRUNC((QUANTIDADE_VIDEOS_ASSISTINDOS(CODIGO_ALUNO)::DECIMAL / QUANTIDADE_VIDEOS_MODULO(NEW.COD_VIDEO_AULA)::DECIMAL), 1);
  731. BEGIN
  732.    
  733.     IF TG_OP = 'INSERT' THEN
  734.         RAISE NOTICE 'QUANTIDADE VIDEOS MODULO: %', QUANTIDADE_VIDEOS_MODULO(NEW.COD_VIDEO_AULA);
  735.         RAISE NOTICE 'QUANTIDADE VIDEOS ASSISTIDOS: %', QUANTIDADE_VIDEOS_ASSISTINDOS(CODIGO_ALUNO);
  736.         RAISE NOTICE 'RESULTADO DIVISÃO: %', META_MODULO_PORCENTAGEM;
  737.         IF META_MODULO_PORCENTAGEM >= 0.6 THEN
  738.             UPDATE ALUNO_MODULO SET META_CONCLUIDA = TRUE WHERE COD_ALUNO = NEW.COD_ALUNO AND COD_MODULO = CODIGO_MODULO;
  739.         END IF;
  740.     END IF;
  741.     RETURN NEW;
  742.  
  743. END
  744. $$ LANGUAGE plpgsql;
  745.  
  746. CREATE TRIGGER MODULO_META_CONLUIDA
  747. AFTER INSERT ON ALUNO_VIDEOS_ASSISTIDOS
  748. FOR EACH ROW
  749. EXECUTE PROCEDURE EVENTO_MODULO_META_CONCLUIDA();
  750.  
  751. --------------------------------------------------------------------------------------------------------------------------------
  752.                                                
  753.                         -- ############################################################### --
  754.                         -- #################### COMPRAR CURSO ALUNO ###################### --
  755.                         -- ############################################################### --
  756.                            
  757. /* VERIFICA DE EXISTE ALGUM REGISTRO DE DETERMINADA TABELA */
  758. CREATE OR REPLACE FUNCTION VERIFICAR_SE_REGISTRO_EXISTE(COD_ANALISADO INT, TABELA TEXT)
  759. RETURNS BOOLEAN
  760. AS $$
  761. DECLARE
  762.     REGISTRO RECORD;
  763. BEGIN
  764.     IF TABELA = 'ALUNO' THEN
  765.         SELECT * INTO REGISTRO FROM ALUNO WHERE COD_ALUNO = COD_ANALISADO;
  766.         IF REGISTRO IS NOT NULL THEN
  767.             RETURN TRUE;
  768.         ELSE
  769.             RETURN FALSE;
  770.         END IF;
  771.     ELSIF TABELA = 'CURSO' THEN
  772.         SELECT * INTO REGISTRO FROM CURSO WHERE COD_CURSO = COD_ANALISADO;
  773.         IF  REGISTRO IS NOT NULL THEN
  774.             RETURN TRUE;
  775.         ELSE
  776.             RETURN FALSE;
  777.         END IF;
  778.     END IF;
  779. END
  780. $$ LANGUAGE plpgsql;
  781.  
  782. --------------------------------------------------------------------------------------------------------------------------------
  783. /* ATUALIZA SALDO INCREMENTANDO O VALOR DE SALDO A ALTERAR */
  784. CREATE OR REPLACE FUNCTION ATUALIZAR_SALDO(VALOR_SALDO_A_ALTERAR FLOAT, CODIGO INT, TABELA TEXT)
  785. RETURNS VOID
  786. AS $$
  787. BEGIN
  788.     IF TABELA = 'ALUNO' THEN
  789.         UPDATE ALUNO SET SALDO = SALDO + VALOR_SALDO_A_ALTERAR WHERE COD_ALUNO = CODIGO;
  790.     ELSIF TABELA = 'PROFESSOR' THEN
  791.         UPDATE PROFESSOR SET SALDO = SALDO + VALOR_SALDO_A_ALTERAR WHERE COD_PROFESSOR = CODIGO;
  792.     END IF;
  793. END
  794. $$ LANGUAGE plpgsql;
  795.  
  796. --------------------------------------------------------------------------------------------------------------------------------
  797. /* SACA TODO O SALDO DA TABELA */
  798. CREATE OR REPLACE FUNCTION SACAR_SALDO(CODIGO INT, TABELA TEXT)
  799. RETURNS TEXT
  800. AS $$
  801. DECLARE
  802.     SALDO_SACADO FLOAT;
  803. BEGIN
  804.     IF TABELA = 'ALUNO' THEN
  805.         SELECT SALDO INTO SALDO_SACADO FROM ALUNO WHERE CODIGO = COD_ALUNO;
  806.     ELSIF TABELA = 'PROFESSOR' THEN
  807.         SELECT SALDO INTO SALDO_SACADO FROM PROFESSOR WHERE CODIGO = COD_PROFESSOR;
  808.     END IF;
  809.    
  810.     IF SALDO_SACADO = 0 THEN
  811.         RETURN 'SEM SALDO!';
  812.     ELSE
  813.         PERFORM ATUALIZAR_SALDO(-SALDO_SACADO, CODIGO, TABELA);
  814.         RETURN 'FORAM SACADOS R$ ' || CAST(SALDO_SACADO AS TEXT) || '!';
  815.     END IF;
  816. END
  817. $$ LANGUAGE plpgsql;
  818.  
  819. --------------------------------------------------------------------------------------------------------------------------------
  820.  
  821. /* VERIFICA SE DETERMINADO SALDO É SUFICIENTE TENDO EM VISTA O VALOR REQUERIDO */
  822. CREATE OR REPLACE FUNCTION SALDO_SUFICIENTE_PARA_COMPRA(SALDO FLOAT, VALOR_REQUERIDO FLOAT)
  823. RETURNS BOOLEAN
  824. AS $$
  825. BEGIN
  826.     IF SALDO >= VALOR_REQUERIDO THEN
  827.         RETURN TRUE;
  828.     ELSE
  829.         RETURN FALSE;
  830.     END IF;
  831.     RETURN FALSE;
  832. END
  833. $$ LANGUAGE plpgsql;
  834.  
  835. --------------------------------------------------------------------------------------------------------------------------------------------------------------------
  836. /* SELECIONA O SALDO DA TABELA */
  837. CREATE OR REPLACE FUNCTION SELECIONAR_SALDO(COD_ANALISADO INT, TABELA TEXT)
  838. RETURNS FLOAT
  839. AS $$
  840. DECLARE
  841.     SALDO_SELECIONADO FLOAT;
  842. BEGIN
  843.     IF TABELA = 'ALUNO' THEN
  844.         SELECT SALDO INTO SALDO_SELECIONADO FROM ALUNO WHERE COD_ANALISADO = COD_ALUNO;
  845.     ELSIF TABELA = 'PROFESSOR' THEN
  846.         SELECT SALDO INTO SALDO_SELECIONADO FROM PROFESSOR WHERE COD_ANALISADO = COD_PROFESSOR;
  847.     END IF;
  848.     RETURN SALDO_SELECIONADO;
  849. END
  850. $$ LANGUAGE plpgsql;
  851.  
  852. --------------------------------------------------------------------------------------------------------------------------------------------------------------------
  853. /* SELECIONA O PRECO DO CURSO*/
  854. CREATE OR REPLACE FUNCTION SELECIONAR_PRECO(COD_CURSO_ANALISADO INT)
  855. RETURNS FLOAT
  856. AS $$
  857. DECLARE
  858.     PRECO_SELECIONADO FLOAT;
  859. BEGIN
  860.     SELECT PRECO INTO PRECO_SELECIONADO FROM CURSO WHERE COD_CURSO_ANALISADO = COD_CURSO;
  861.     RETURN PRECO_SELECIONADO;
  862. END
  863. $$ LANGUAGE plpgsql;
  864.  
  865. -------------------------------------------------------------------------------------------------------------------------------------------------------------------
  866. /* VERIFICA SE DETERMINADO CURSO E ALUNO JÁ ESTÃO FORMANDO UMA LINHA NA TABELA ALUNO_CURSO */
  867. CREATE OR REPLACE FUNCTION VERIFICAR_VINCULO_ALUNO_CURSO(COD_ALUNO_ANALISADO INT, COD_CURSO_ANALISADO INT)
  868. RETURNS BOOLEAN
  869. AS $$
  870. DECLARE
  871.     ALUNO_CURSO_ANALISADO RECORD;
  872. BEGIN
  873.     SELECT * INTO ALUNO_CURSO_ANALISADO FROM ALUNO_CURSO WHERE COD_ALUNO_ANALISADO = COD_ALUNO AND COD_CURSO_ANALISADO = COD_CURSO;
  874.  
  875.     IF ALUNO_CURSO_ANALISADO IS NULL THEN
  876.         RETURN FALSE;
  877.     ELSE
  878.         RETURN TRUE;
  879.     END IF;
  880. END
  881. $$ LANGUAGE plpgsql;
  882.  
  883. ------------------------------------------------------------------------------------------------------------------------------------------------------------------
  884. /* VERIFICA SE AINDA É VÁLIDO O PERÍODO NESSE CURSO */
  885. CREATE OR REPLACE FUNCTION PERIODO_CURSANDO_VALIDO(COD_ALUNO_ANALISADO INT, COD_CURSO_ANALISADO INT)
  886. RETURNS BOOLEAN
  887. AS $$
  888. DECLARE
  889.     DATA_COMPRA_ALUNO_CURSO_ANALISADA DATE;
  890.     DURACAO_CURSO_ANALISADA INT;
  891. BEGIN
  892.     SELECT DATA_COMPRA INTO DATA_COMPRA_ALUNO_CURSO_ANALISADA FROM ALUNO_CURSO WHERE COD_ALUNO_ANALISADO = COD_ALUNO AND COD_CURSO_ANALISADO = COD_CURSO;
  893.     SELECT DURACAO INTO DURACAO_CURSO_ANALISADA FROM CURSO WHERE COD_CURSO_ANALISADO = COD_CURSO;
  894.    
  895.     IF DATA_COMPRA_ALUNO_CURSO_ANALISADA + DURACAO_CURSO_ANALISADA >= DATE(NOW()) THEN  -- <<<<<<<<<<<<<<<<<<<<<<<  OBS: DEIXAR DURACAO COMO INT  <<<<<<<<<<<<<<<<<<<<<<<<<<<<
  896.         RETURN TRUE;
  897.     ELSE
  898.         RETURN FALSE;
  899.     END IF;
  900. END
  901. $$ LANGUAGE plpgsql;
  902.  
  903. -----------------------------------------------------------------------------------------------------------------------------------------------------------------
  904. /* VERIFICA SE ALUNO AINDA ESTÁ CURSANDO */
  905. CREATE OR REPLACE FUNCTION ALUNO_AINDA_CURSANDO(COD_ALUNO_ANALISADO INT, COD_CURSO_ANALISADO INT)
  906. RETURNS BOOLEAN
  907. AS $$
  908. BEGIN
  909.     IF VERIFICAR_VINCULO_ALUNO_CURSO(COD_ALUNO_ANALISADO, COD_CURSO_ANALISADO) IS TRUE AND PERIODO_CURSANDO_VALIDO(COD_ALUNO_ANALISADO, COD_CURSO_ANALISADO) IS TRUE THEN
  910.         RETURN TRUE;
  911.     ELSE
  912.         RETURN FALSE;
  913.     END IF;
  914. END
  915. $$ LANGUAGE plpgsql;
  916.  
  917.  
  918. -----------------------------------------------------------------------------------------------------------------------------------------------------------------
  919. /* VERIFICA SE CURSO ESTÁ DISPONIVEL */
  920. CREATE OR REPLACE FUNCTION CURSO_DISPONIVEL(COD_CURSO_ANALISADO INT)
  921. RETURNS BOOLEAN
  922. AS $$
  923. DECLARE
  924.     DISPONIBILIDADE_CURSO_ANALISADO BOOLEAN;
  925. BEGIN
  926.     SELECT DISPONIBILIDADE INTO DISPONIBILIDADE_CURSO_ANALISADO FROM CURSO WHERE COD_CURSO = COD_CURSO_ANALISADO;
  927.     RETURN DISPONIBILIDADE_CURSO_ANALISADO;
  928. END
  929. $$ LANGUAGE plpgsql;
  930.  
  931.  
  932. ----------------------------------------------------------------------------------------------------------------------------------------------------------------
  933. /* VERIFICA SE ALUNO JÁ CURSOU (E NÃO CURSA MAIS) O CURSO. */
  934. CREATE OR REPLACE FUNCTION ALUNO_JA_CURSOU(COD_ALUNO_ANALISADO INT, COD_CURSO_ANALISADO INT)
  935. RETURNS BOOLEAN
  936. AS $$
  937. BEGIN
  938.     IF VERIFICAR_VINCULO_ALUNO_CURSO(COD_ALUNO_ANALISADO, COD_CURSO_ANALISADO) = TRUE AND PERIODO_CURSANDO_VALIDO(COD_ALUNO_ANALISADO, COD_CURSO_ANALISADO) != TRUE THEN
  939.         RETURN TRUE;
  940.     ELSE
  941.         RETURN FALSE;
  942.     END IF;
  943. END
  944. $$ LANGUAGE plpgsql;
  945.  
  946.  
  947. --------------------------------------------------------------------------------------------------------------------------------
  948. /* INSERIR OU ATUALIZAR ALUNO_CURSO QUANDO ALUNO FOR COMPRAR O CURSO */
  949. CREATE OR REPLACE FUNCTION COMPRAR_CURSO(COD_ALUNO_ANALISADO INT, COD_CURSO_ANALISADO INT)
  950. RETURNS VOID
  951. AS $$
  952. BEGIN
  953.     IF VERIFICAR_SE_REGISTRO_EXISTE(COD_ALUNO_ANALISADO, 'ALUNO') IS FALSE THEN
  954.         RAISE EXCEPTION 'ESSE ALUNO AINDA NÃO FOI CADASTRADO!';
  955.  
  956.     ELSIF VERIFICAR_SE_REGISTRO_EXISTE(COD_CURSO_ANALISADO, 'CURSO') IS FALSE THEN
  957.         RAISE EXCEPTION 'ESSE CURSO AINDA NÃO FOI CADASTRADO!';
  958.  
  959.     ELSIF ALUNO_AINDA_CURSANDO(COD_ALUNO_ANALISADO, COD_CURSO_ANALISADO) IS TRUE THEN
  960.         RAISE EXCEPTION 'VOCÊ AINDA ESTÁ CURSANDO ESSE CURSO. COMPRA DO CURSO REJEITADA!';
  961.  
  962.     ELSIF CURSO_DISPONIVEL(COD_CURSO_ANALISADO) != TRUE THEN
  963.         RAISE EXCEPTION 'CURSO INDISPONÍVEL PARA NOVAS COMPRAS!';
  964.  
  965.     ELSIF ALUNO_JA_CURSOU(COD_ALUNO_ANALISADO, COD_CURSO_ANALISADO) = TRUE THEN
  966.         PERFORM ATUALIZAR_SALDO(-SELECIONAR_PRECO(COD_CURSO_ANALISADO), COD_ALUNO_ANALISADO, 'ALUNO');
  967.         UPDATE ALUNO_CURSO SET DATA_COMPRA = DATE(NOW()), NOTA_AVALIACAO = NULL WHERE COD_ALUNO = COD_ALUNO_ANALISADO AND COD_CURSO = COD_CURSO_ANALISADO;
  968.  
  969.     ELSE
  970.         PERFORM ATUALIZAR_SALDO(-SELECIONAR_PRECO(COD_CURSO_ANALISADO), COD_ALUNO_ANALISADO, 'ALUNO');
  971.         INSERT INTO ALUNO_CURSO VALUES (DEFAULT, DATE(NOW()), NULL, COD_ALUNO_ANALISADO, COD_CURSO_ANALISADO);
  972.     END IF;
  973.  
  974. END
  975. $$ LANGUAGE plpgsql;
  976.  
  977. --------------------------------------------------------------------------------------------------------------------------------
  978. /* CALCULA A DATA_ULTIMO_PAGAMENTO DO PAGAMENTO MAIS RECENTE NO DIA 01 */
  979. CREATE OR REPLACE FUNCTION CALCULAR_DATA_PAGAMENTO_ATUAL()
  980. RETURNS DATE
  981. AS $$
  982. DECLARE
  983.     MES_DATA_PAGAMENTO_ATUAL INT;
  984.     ANO_DATA_PAGAMENTO_ATUAL INT;
  985.     DATA_PAGAMENTO_ATUAL DATE;
  986. BEGIN
  987.     MES_DATA_PAGAMENTO_ATUAL := EXTRACT(MONTH FROM DATE(NOW()));
  988.     ANO_DATA_PAGAMENTO_ATUAL := EXTRACT(YEAR FROM DATE(NOW()));
  989.  
  990.     DATA_PAGAMENTO_ATUAL := CAST(CAST(ANO_DATA_PAGAMENTO_ATUAL AS VARCHAR(4)) || '-' || CAST(MES_DATA_PAGAMENTO_ATUAL AS VARCHAR(2)) || '-01' AS DATE);
  991.     RETURN DATA_PAGAMENTO_ATUAL;
  992. END
  993. $$ LANGUAGE plpgsql;
  994.  
  995.  
  996. --------------------------------------------------------------------------------------------------------------------------------
  997. /* FAZ O PROFESSOR RECEBER O SALÁRIO */
  998. CREATE OR REPLACE FUNCTION PROFESSOR_RECEBER_SALARIO(COD_PROFESSOR_ANALISADO INT)
  999. RETURNS VOID
  1000. AS $$
  1001. DECLARE
  1002.     DATA_ULTIMO_PAGAMENTO_ANALISADO DATE;
  1003.     DATA_PAGAMENTO_ATUAL DATE;
  1004.     SALARIO_A_PAGAR FLOAT;
  1005. BEGIN
  1006.     SELECT DATA_ULTIMO_PAGAMENTO INTO DATA_ULTIMO_PAGAMENTO_ANALISADO FROM PROFESSOR WHERE COD_PROFESSOR = COD_PROFESSOR_ANALISADO;
  1007.     DATA_PAGAMENTO_ATUAL := CALCULAR_DATA_PAGAMENTO_ATUAL();
  1008.  
  1009.     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;
  1010.     UPDATE PROFESSOR SET SALDO = SALDO + SALARIO_A_PAGAR, DATA_ULTIMO_PAGAMENTO = DATA_PAGAMENTO_ATUAL WHERE COD_PROFESSOR = COD_PROFESSOR_ANALISADO;
  1011. END
  1012. $$ LANGUAGE plpgsql;
  1013.  
  1014.  
  1015. ---------------------------------------------------------------------------------------------------------------------------------------------------------------
  1016.  
  1017.                         -- ############################################################### --
  1018.                         -- ############ FUNCTIONS DA TRIGGER DISPONIBILIDADE ############# --
  1019.                         -- ############################################################### --
  1020.  
  1021. CREATE OR REPLACE FUNCTION VALIDAR_DISCIPLINA(CODIGO_DISCIPLINA INT)
  1022. RETURNS BOOLEAN
  1023. AS $$
  1024. DECLARE
  1025.     NUM_VIDEOS INT := (SELECT COUNT(*) FROM VIDEO_AULA V_A WHERE V_A.COD_DISCIPLINA = CODIGO_DISCIPLINA);
  1026. BEGIN
  1027.    
  1028.     IF NUM_VIDEOS >= 3 THEN
  1029.         RAISE NOTICE 'TRUE';
  1030.         RETURN TRUE;
  1031.     ELSE
  1032.         RAISE NOTICE 'FALSE';
  1033.         RETURN FALSE;
  1034.     END IF;
  1035. END
  1036. $$ LANGUAGE plpgsql;
  1037.  
  1038. CREATE OR REPLACE FUNCTION VALIDAR_MODULO(CODIGO_MODULO INT)
  1039. RETURNS BOOLEAN
  1040. AS $$
  1041. DECLARE
  1042.     NUM_DISCIPLINAS_VALIDAS INT := 0;
  1043.     REGISTRO_DISCIPLINA RECORD;
  1044. BEGIN
  1045.    
  1046.     FOR REGISTRO_DISCIPLINA IN (SELECT * FROM DISCIPLINA D_P WHERE D_P.COD_MODULO = CODIGO_MODULO) LOOP
  1047.         IF VALIDAR_DISCIPLINA(REGISTRO_DISCIPLINA.COD_DISCIPLINA) = TRUE THEN
  1048.             NUM_DISCIPLINAS_VALIDAS := NUM_DISCIPLINAS_VALIDAS + 1;
  1049.         END IF;
  1050.     END LOOP;
  1051.    
  1052.     IF NUM_DISCIPLINAS_VALIDAS >= 3 THEN
  1053.         RAISE NOTICE 'TRUE';
  1054.         RETURN TRUE;
  1055.     ELSE
  1056.         RAISE NOTICE 'FALSE';
  1057.         RETURN FALSE;
  1058.     END IF;
  1059. END
  1060. $$ LANGUAGE plpgsql;
  1061.  
  1062. CREATE OR REPLACE FUNCTION VALIDAR_CURSO(CODIGO_CURSO INT)
  1063. RETURNS BOOLEAN
  1064. AS $$
  1065. DECLARE
  1066.     NUM_MODULOS_VALIDOS INT := 0;
  1067.     REGISTRO_MODULO RECORD;
  1068. BEGIN
  1069.    
  1070.     FOR REGISTRO_MODULO IN (SELECT * FROM MODULO M_D WHERE M_D.COD_CURSO = CODIGO_CURSO) LOOP
  1071.         IF VALIDAR_MODULO(REGISTRO_MODULO.COD_MODULO) = TRUE THEN
  1072.             NUM_MODULOS_VALIDOS := NUM_MODULOS_VALIDOS + 1;
  1073.         END IF;
  1074.     END LOOP;
  1075.    
  1076.     IF NUM_MODULOS_VALIDOS >= 3 THEN
  1077.         RAISE NOTICE 'TRUE';
  1078.         RETURN TRUE;
  1079.     ELSE
  1080.         RAISE NOTICE 'FALSE';
  1081.         RETURN FALSE;
  1082.     END IF;
  1083. END
  1084. $$ LANGUAGE plpgsql;
  1085.  
  1086. --------------------------------------------------------------------------------------------------------------------------------------------------------------
  1087.                             -- ################################################## --
  1088.                             -- ######## TRIGGER COM AFTER DISPONIBILIDADE ####### --
  1089.                             -- ################################################## --
  1090.  
  1091. CREATE OR REPLACE FUNCTION EVENTO_MODULO_CURSO()
  1092. RETURNS TRIGGER
  1093. AS $$
  1094. BEGIN
  1095.    
  1096.     IF TG_OP = 'DELETE' THEN
  1097.         IF VALIDAR_CURSO(OLD.COD_CURSO) = FALSE THEN
  1098.             UPDATE CURSO SET DISPONIBILIDADE = FALSE WHERE COD_CURSO = OLD.COD_CURSO;
  1099.             UPDATE CURSO SET PUBLICADO = FALSE WHERE COD_CURSO = OLD.COD_CURSO;
  1100.         END IF;
  1101.     END IF;
  1102.    
  1103.     RETURN NEW;
  1104.  
  1105. END
  1106. $$ LANGUAGE plpgsql;
  1107.  
  1108. CREATE OR REPLACE FUNCTION EVENTO_DISCIPLINA_CURSO()
  1109. RETURNS TRIGGER
  1110. AS $$
  1111. DECLARE
  1112.     OLD_COD_CURSO INT := (SELECT COD_CURSO FROM MODULO M_D WHERE M_D.COD_MODULO = OLD.COD_MODULO);
  1113. BEGIN
  1114.    
  1115.     IF TG_OP = 'DELETE' THEN
  1116.         IF VALIDAR_CURSO(OLD_COD_CURSO) = FALSE THEN
  1117.             UPDATE CURSO SET DISPONIBILIDADE = FALSE WHERE COD_CURSO = OLD_COD_CURSO;
  1118.             UPDATE CURSO SET PUBLICADO = FALSE WHERE COD_CURSO = OLD_COD_CURSO;
  1119.         END IF;
  1120.     END IF;
  1121.  
  1122.     RETURN NEW;
  1123.    
  1124. END
  1125. $$ LANGUAGE plpgsql;
  1126.  
  1127. CREATE OR REPLACE FUNCTION EVENTO_VIDEO_CURSO()
  1128. RETURNS TRIGGER
  1129. AS $$
  1130. DECLARE
  1131.     NEW_COD_CURSO INT := (SELECT M_D.COD_CURSO FROM MODULO M_D WHERE M_D.COD_MODULO =
  1132.     (SELECT D_C.COD_MODULO FROM DISCIPLINA D_C WHERE D_C.COD_DISCIPLINA = NEW.COD_DISCIPLINA));
  1133.     OLD_COD_CURSO INT := (SELECT COD_CURSO FROM MODULO M_D WHERE M_D.COD_MODULO =
  1134.     (SELECT D_C.COD_MODULO FROM DISCIPLINA D_C WHERE D_C.COD_DISCIPLINA = OLD.COD_DISCIPLINA));
  1135. BEGIN
  1136.    
  1137.     IF TG_OP = 'INSERT' THEN
  1138.         IF VALIDAR_CURSO(NEW_COD_CURSO) = TRUE THEN
  1139.             UPDATE CURSO SET DISPONIBILIDADE = TRUE WHERE COD_CURSO = NEW_COD_CURSO;
  1140.         END IF;
  1141.        
  1142.     ELSIF TG_OP = 'DELETE' THEN
  1143.         IF VALIDAR_CURSO(OLD_COD_CURSO) = FALSE THEN
  1144.             UPDATE CURSO SET DISPONIBILIDADE = FALSE WHERE COD_CURSO = OLD_COD_CURSO;
  1145.             UPDATE CURSO SET PUBLICADO = FALSE WHERE COD_CURSO = OLD_COD_CURSO;
  1146.         END IF;
  1147.     END IF;
  1148.    
  1149.     RETURN NEW;
  1150.  
  1151. END
  1152. $$ LANGUAGE plpgsql;
  1153.  
  1154. -------------------------------------------------------------------------------------------------------------------------------------------------------------
  1155.                             -- ################################################## --
  1156.                             -- ############# TRIGGER DISPONIBILIDADE ############ --
  1157.                             -- ################################################## --
  1158.  
  1159. CREATE TRIGGER EVENTO_ANALISA_DISPONIBILIDADE_CURSO_VIDEO
  1160. AFTER INSERT OR DELETE ON VIDEO_AULA
  1161. FOR EACH ROW
  1162. EXECUTE PROCEDURE EVENTO_VIDEO_CURSO();
  1163.  
  1164. CREATE TRIGGER EVENTO_ANALISA_DISPONIBILIDADE_CURSO_DISCIPLINA
  1165. AFTER DELETE ON DISCIPLINA
  1166. FOR EACH ROW
  1167. EXECUTE PROCEDURE EVENTO_DISCIPLINA_CURSO();
  1168.  
  1169. CREATE TRIGGER EVENTO_ANALISA_DISPONIBILIDADE_CURSO_MODULO
  1170. AFTER DELETE ON MODULO
  1171. FOR EACH ROW
  1172. EXECUTE PROCEDURE EVENTO_MODULO_CURSO();
  1173.  
  1174. -------------------------------------------------------------------------------------------------------------------------------
  1175.                             -- ################################################## --
  1176.                             -- ######### TRIGGER PROFESSOR RECEBER SALDO ######## --
  1177.                             -- ################################################## --
  1178.  
  1179. CREATE OR REPLACE FUNCTION EVENTO_PROFESSOR_RECEBER_SALARIO()
  1180. RETURNS TRIGGER
  1181. AS $$
  1182. DECLARE
  1183.     COD_PROFESSOR_ANALISADO INT;
  1184. BEGIN
  1185.     SELECT P_F.COD_PROFESSOR INTO COD_PROFESSOR_ANALISADO FROM ALUNO_CURSO A_C INNER JOIN CURSO C_R ON A_C.COD_CURSO = C_R.COD_CURSO INNER JOIN PROFESSOR P_F ON C_R.COD_PROFESSOR = P_F.COD_PROFESSOR WHERE A_C.COD_ALUNO_CURSO = NEW.COD_ALUNO_CURSO;
  1186.     PERFORM PROFESSOR_RECEBER_SALARIO(COD_PROFESSOR_ANALISADO);
  1187.     RETURN NEW;
  1188. END;
  1189. $$ LANGUAGE plpgsql;
  1190.  
  1191. CREATE TRIGGER ALUNO_ATIVAR_EVENTO_PROFESSOR_RECEBER_SALARIO
  1192. AFTER INSERT OR UPDATE
  1193. ON ALUNO_CURSO FOR EACH ROW
  1194. EXECUTE PROCEDURE EVENTO_PROFESSOR_RECEBER_SALARIO();
  1195.  
  1196. -------------------------------------------------------------------------------------------------------------------------------------------------------------
  1197.                             -- ################################################## --
  1198.                             -- ################### EXECUÇÕES #################### --
  1199.                             -- ################################################## --
  1200.  
  1201. SELECT * FROM ALUNO_MODULO
  1202. SELECT * FROM ALUNO_CURSO
  1203. SELECT * FROM ALUNO
  1204. SELECT * FROM PROFESSOR
  1205. SELECT * FROM CURSO
  1206. SELECT * FROM MODULO
  1207. SELECT * FROM DISCIPLINA
  1208. SELECT * FROM VIDEO_AULA
  1209. SELECT * FROM ALUNO_VIDEOS_ASSISTIDOS
  1210.  
  1211.  
  1212. /* PARAMENTROS COD_ALUNO, NOME, CPF, DATA_NASCIMENTO, EMAIL, SENHA, TABELA */
  1213. SELECT FROM INSERIR_ALUNO_E_PROFESSOR
  1214. (1, 'NELSON', '1122334455', '1992-07-23', 'NELSON@GMAIL.COM', '123', 'ALUNO');
  1215. SELECT FROM INSERIR_ALUNO_E_PROFESSOR
  1216. (2, 'CARLOS', '5544332211', '2000-01-23', 'CARLOS@GMAIL.COM', '123', 'ALUNO');
  1217. SELECT FROM INSERIR_ALUNO_E_PROFESSOR
  1218. (1, 'GEOVANE', '123456', '1990-05-02', 'GEOVANE@GMAIL.COM', '123', 'PROFESSOR');
  1219. SELECT FROM INSERIR_ALUNO_E_PROFESSOR
  1220. (2, 'VILARINHO', '654321', '1999-03-10', 'VILARINHO@GMAIL.COM', '123', 'PROFESSOR');
  1221.  
  1222. /* PARAMENTROS CPF, TITULO_CURSO, DESCRICAO_CURSO, VALOR_CURSO */
  1223. SELECT FROM CRIAR_CURSO
  1224. ('123456', 1, 'MATEMATICA', 'APRENDENDO A FAZER CALCULOS', 100);
  1225.  
  1226. /* PARAMETROS CPF_PROFESSOR, COD_CURSO, ARRAY DE MODULO/S, ARRAY DESCRICAO/OES, ARRAY TEMPO_MODULO */
  1227. SELECT FROM CRIAR_MODULO
  1228. ('123456', 1,
  1229. ARRAY ['MODULO 1', 'MODULO 2', 'MODULO 3'],
  1230. ARRAY ['DESCRICAO 1', 'DESCRICAO 2', 'DESCRICAO 3'],
  1231. ARRAY [10, 20, 30]);
  1232.  
  1233. /* PARAMETROS CPF_PROFESSOR, CODIGO_MODULO, ARRAY DISCIPLINA/S ARRAY DESCRICAO/OES */
  1234. SELECT FROM CRIAR_DISCIPLINAS
  1235. ('123456', 1,
  1236. ARRAY ['APRENDENDO A SOMAR', 'APRENDENDO A DIVIDIR', 'APRENDENDO A SUBTRAIR'],
  1237. ARRAY ['DESCRICAO 1', 'DESCRICAO 2', 'DESCRICAO 3'])
  1238. SELECT FROM CRIAR_DISCIPLINAS
  1239. ('123456', 2,
  1240. ARRAY ['APRENDENDO A DERIVADA', 'APRENDENDO A BASKARA', 'APRENDENDO A ALGEBRA'],
  1241. ARRAY ['DESCRICAO 1', 'DESCRICAO 2', 'DESCRICAO 3'])
  1242. SELECT FROM CRIAR_DISCIPLINAS
  1243. ('123456', 3,
  1244. ARRAY ['APRENDENDO A EQUAÇÃO', 'APRENDENDO GEOMETRIA', 'APRENDENDO A PRODUTO CARTEZIADO'],
  1245. ARRAY ['DESCRICAO 1', 'DESCRICAO 2', 'DESCRICAO 3'])
  1246.  
  1247. /* PARAMETROS CPF_PROFESSOR,COD_DISCIPLINA, ARRAY VIDEO/S, ARRAY DESCRICAO/OES, ARRAY TEMPO_VIDEO
  1248. ADICIONAR O CODIGO DA DISCIPLINA DOS MODULOS VINGENTES */
  1249. SELECT FROM ADICIONAR_VIDEO_AULA
  1250. ('123456', 9,
  1251. ARRAY ['TESTE'],
  1252. ARRAY ['DESC 1'],
  1253. ARRAY [10]);
  1254.  
  1255. SELECT FROM ADICIONAR_VIDEO_AULA
  1256. ('123456', 13,
  1257. ARRAY ['VIDEO 1', 'VIDEO 2', 'VIDEO 3'],
  1258. ARRAY ['DESC 1', 'DESC 2', 'DESC 3'],
  1259. ARRAY [10, 5, 3]);
  1260.  
  1261. /* PARAMETROS CPF, COD_VIDEO_AULA */
  1262. SELECT FROM DELETAR_VIDEO('123456', 37)
  1263.  
  1264. /* PARAMETROS CPF, COD_DISCIPLINA */
  1265. SELECT FROM DELETAR_DISCIPLINA('123456', 1)
  1266.  
  1267. /* PARAMETROS CPF, COD_MODULO */
  1268. SELECT FROM DELETAR_MODULO('123456', 1)
  1269.  
  1270. /* PARAMETROS CPF, COD_CURSO*/
  1271. SELECT FROM PUBLICAR_CURSO('123456', 1)
  1272.  
  1273. /* ALUNO COMPRANDO CURSO  PARAMETROS COD_ALUNO, COD_CURSO*/
  1274. SELECT FROM COMPRAR_CURSO(2, 1);
  1275.  
  1276. /* ALUNO ASSISTIR VIDEO AULA */
  1277. SELECT FROM ALUNO_ASSISTIR_VIDEO('1122334455', 15)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement