leoanjos

GDI

Nov 15th, 2021 (edited)
250
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 13.74 KB | None | 0 0
  1. CREATE OR REPLACE TYPE tp_diretor AS OBJECT (
  2.     id_imdb VARCHAR2(20),
  3.     nome VARCHAR2(20),
  4.     data_de_nascimento DATE,
  5.    
  6.     ORDER MEMBER FUNCTION comparar_diretor(outro tp_diretor) RETURN INTEGER
  7. );
  8. /
  9.  
  10. CREATE OR REPLACE TYPE BODY tp_diretor AS
  11.     ORDER MEMBER FUNCTION comparar_diretor(outro tp_diretor) RETURN INTEGER IS
  12.     BEGIN
  13.         RETURN STRCMP(nome, outro.nome);
  14.     END;
  15. END;
  16. /
  17.  
  18. CREATE TABLE tb_diretor OF tp_diretor (
  19.     id_imdb PRIMARY KEY
  20. );
  21. /
  22.  
  23. CREATE OR REPLACE TYPE tp_produtora AS OBJECT (
  24.     cnpj VARCHAR2(20),
  25.     nome VARCHAR2(40),
  26.     nome_fantasia VARCHAR2(40),
  27.     data_de_criacao DATE,
  28.     produz_filme INTEGER,
  29.     produz_serie INTEGER,
  30.    
  31.     ORDER MEMBER FUNCTION comparar_produtora(outro tp_produtora) RETURN INTEGER
  32. );
  33. /
  34.  
  35. CREATE OR REPLACE TYPE BODY tp_produtora AS
  36.     ORDER MEMBER FUNCTION comparar_produtora(outro tp_produtora) RETURN INTEGER IS
  37.     BEGIN
  38.         RETURN STRCMP(nome_fantasia, outro.nome_fantasia);
  39.     END;
  40. END;
  41. /
  42.  
  43. CREATE TABLE tb_produtora OF tp_produtora (
  44.     cnpj PRIMARY KEY
  45. );
  46. /
  47.  
  48. CREATE OR REPLACE TYPE tp_plano AS OBJECT (
  49.     id_plano INTEGER,
  50.     preco INTEGER,
  51.     numero_de_telas INTEGER,
  52.     qualidade_de_video VARCHAR(5),
  53.    
  54.     MAP MEMBER FUNCTION mapear_plano RETURN INTEGER
  55. );
  56. /
  57.  
  58. ALTER TYPE tp_plano MODIFY ATTRIBUTE preco NUMBER;
  59. /
  60.  
  61. CREATE OR REPLACE TYPE BODY tp_plano AS
  62.     MAP MEMBER FUNCTION mapear_plano RETURN INTEGER IS
  63.     BEGIN
  64.         RETURN id_plano;
  65.     END;
  66. END;
  67. /
  68.  
  69. CREATE TABLE tb_plano OF tp_plano (
  70.     id_plano PRIMARY KEY
  71. );
  72. /
  73.  
  74. CREATE OR REPLACE TYPE tp_nomes AS VARRAY(10) OF VARCHAR2(40);
  75. /
  76.  
  77. CREATE OR REPLACE TYPE tp_categorias AS VARRAY(10) OF VARCHAR2(20);
  78. /
  79.  
  80. CREATE OR REPLACE TYPE tp_idiomas AS VARRAY(10) OF VARCHAR2(20);
  81. /
  82.  
  83. CREATE OR REPLACE TYPE tp_legendas AS VARRAY(10) OF VARCHAR2(20);
  84. /
  85.  
  86. CREATE OR REPLACE TYPE tp_midia AS OBJECT (
  87.     id_imdb VARCHAR2(20),
  88.     data_de_lancamento DATE,
  89.     nomes tp_nomes,
  90.     categorias tp_categorias,
  91.     idiomas tp_idiomas,
  92.     legendas tp_legendas,
  93.    
  94.     FINAL MEMBER PROCEDURE inserir_nome(nome VARCHAR2),
  95.     FINAL MEMBER PROCEDURE inserir_categoria(categoria VARCHAR2),
  96.     FINAL MEMBER PROCEDURE inserir_idioma(idioma VARCHAR2),
  97.     FINAL MEMBER PROCEDURE inserir_legenda(legenda VARCHAR2),
  98.     NOT INSTANTIABLE MEMBER FUNCTION get_duracao RETURN INTEGER
  99. ) NOT FINAL NOT INSTANTIABLE;
  100. /
  101.  
  102. CREATE OR REPLACE TYPE BODY tp_midia AS
  103.     FINAL MEMBER PROCEDURE inserir_nome(nome VARCHAR2) IS
  104.     BEGIN
  105.         nomes.EXTEND(1);
  106.         nomes(nomes.COUNT) := nome;
  107.     END;
  108.    
  109.     FINAL MEMBER PROCEDURE inserir_categoria(categoria VARCHAR2) IS
  110.     BEGIN
  111.         categorias.EXTEND(1);
  112.         categorias(categorias.COUNT) := categoria;
  113.     END;
  114.    
  115.     FINAL MEMBER PROCEDURE inserir_idioma(idioma VARCHAR2) IS
  116.     BEGIN
  117.         idiomas.EXTEND(1);
  118.         idiomas(idiomas.COUNT) := idioma;
  119.     END;
  120.    
  121.     FINAL MEMBER PROCEDURE inserir_legenda(legenda VARCHAR2) IS
  122.     BEGIN
  123.         legendas.EXTEND(1);
  124.         legendas(legendas.COUNT) := legenda;
  125.     END;
  126. END;
  127. /
  128.  
  129. CREATE OR REPLACE TYPE tp_filme UNDER tp_midia (
  130.     duracao INTEGER,
  131.     prequel REF tp_filme,
  132.    
  133.     CONSTRUCTOR FUNCTION tp_filme(SELF IN OUT NOCOPY tp_filme,
  134.         id_imdb VARCHAR2, data_de_lancamento DATE, nome VARCHAR2, categoria VARCHAR2,
  135.         idioma VARCHAR2, legenda VARCHAR2, duracao INTEGER, prequel REF tp_filme
  136.     ) RETURN SELF AS RESULT,
  137.    
  138.     OVERRIDING MEMBER FUNCTION get_duracao RETURN INTEGER
  139. );
  140. /
  141.  
  142. CREATE OR REPLACE TYPE BODY tp_filme AS
  143.     CONSTRUCTOR FUNCTION tp_filme(SELF IN OUT NOCOPY tp_filme,
  144.         id_imdb VARCHAR2, data_de_lancamento DATE, nome VARCHAR2, categoria VARCHAR2,
  145.         idioma VARCHAR2, legenda VARCHAR2, duracao INTEGER, prequel REF tp_filme
  146.     ) RETURN SELF AS RESULT IS
  147.     BEGIN
  148.         SELF.id_imdb := id_imdb;
  149.         SELF.data_de_lancamento := data_de_lancamento;
  150.         SELF.nomes := tp_nomes(nome);
  151.         SELF.categorias := tp_categorias(categoria);
  152.         SELF.idiomas := tp_idiomas(idioma);
  153.         SELF.legendas := tp_legendas(legenda);
  154.         SELF.duracao := duracao;
  155.         SELF.prequel := prequel;
  156.         RETURN;
  157.     END;
  158.    
  159.     OVERRIDING MEMBER FUNCTION get_duracao RETURN INTEGER IS
  160.     BEGIN
  161.         RETURN duracao;
  162.     END;
  163. END;
  164. /
  165.  
  166. CREATE TABLE tb_filme OF tp_filme (
  167.     id_imdb PRIMARY KEY,
  168.     prequel WITH ROWID REFERENCES tb_filme
  169. );
  170. /
  171.  
  172. CREATE OR REPLACE TYPE tp_serie UNDER tp_midia (
  173.     episodios INTEGER,
  174.    
  175.     CONSTRUCTOR FUNCTION tp_serie(SELF IN OUT NOCOPY tp_serie,
  176.         id_imdb VARCHAR2, data_de_lancamento DATE, nome VARCHAR2, categoria VARCHAR2,
  177.         idioma VARCHAR2, legenda VARCHAR2, episodios INTEGER
  178.     ) RETURN SELF AS RESULT,
  179.    
  180.     OVERRIDING MEMBER FUNCTION get_duracao RETURN INTEGER
  181. );
  182. /
  183.  
  184. CREATE OR REPLACE TYPE BODY tp_serie AS
  185.     CONSTRUCTOR FUNCTION tp_serie(SELF IN OUT NOCOPY tp_serie,
  186.         id_imdb VARCHAR2, data_de_lancamento DATE, nome VARCHAR2, categoria VARCHAR2,
  187.         idioma VARCHAR2, legenda VARCHAR2, episodios INTEGER
  188.     ) RETURN SELF AS RESULT IS
  189.     BEGIN
  190.         SELF.id_imdb := id_imdb;
  191.         SELF.data_de_lancamento := data_de_lancamento;
  192.         SELF.nomes := tp_nomes(nome);
  193.         SELF.categorias := tp_categorias(categoria);
  194.         SELF.idiomas := tp_idiomas(idioma);
  195.         SELF.legendas := tp_legendas(legenda);
  196.         SELF.episodios := episodios;
  197.         RETURN;
  198.     END;
  199.    
  200.     OVERRIDING MEMBER FUNCTION get_duracao RETURN INTEGER IS
  201.     BEGIN
  202.         RETURN episodios * 40;
  203.     END;
  204. END;
  205. /
  206.  
  207. CREATE TABLE tb_serie OF tp_serie (
  208.     id_imdb PRIMARY KEY
  209. );
  210. /
  211.  
  212. CREATE OR REPLACE TYPE tp_perfil AS OBJECT (
  213.     nome VARCHAR2(40),
  214.     pode_assistir_conteudo_adulto INTEGER
  215. );
  216. /
  217.  
  218. CREATE OR REPLACE TYPE tp_perfis AS TABLE OF tp_perfil;
  219. /
  220.  
  221. CREATE OR REPLACE TYPE tp_usuario AS OBJECT (
  222.     email VARCHAR2(40),
  223.     primeiro_nome VARCHAR2(20),
  224.     ultimo_nome VARCHAR2(20),
  225.     senha VARCHAR2(20),
  226.     data_de_nascimento DATE,
  227.     plano REF tp_plano,
  228.     perfis tp_perfis,
  229.    
  230.     MEMBER FUNCTION get_perfil(nome VARCHAR2) RETURN tp_perfil
  231. );
  232. /
  233.  
  234. CREATE OR REPLACE TYPE BODY tp_usuario AS
  235.     MEMBER FUNCTION get_perfil(nome VARCHAR2) RETURN tp_perfil IS
  236.         perfil tp_perfil;
  237.     BEGIN
  238.         SELECT VALUE(P) INTO perfil FROM TABLE(perfis) P WHERE P.nome = nome;
  239.         RETURN perfil;
  240.     END;
  241. END;
  242. /
  243.  
  244. CREATE TABLE tb_usuario OF tp_usuario (
  245.     email PRIMARY KEY,
  246.     plano WITH ROWID REFERENCES tb_plano
  247. ) NESTED TABLE perfis STORE AS tb_perfis;
  248. /
  249.  
  250. CREATE TABLE tb_tem (
  251.     diretor REF tp_diretor SCOPE IS tb_diretor,
  252.     produtora REF tp_produtora SCOPE IS tb_produtora,
  253.     midia REF tp_midia
  254. );
  255. /
  256.  
  257. CREATE OR REPLACE TYPE tp_clipe AS OBJECT (
  258.     data_criacao DATE,
  259.     duracao INTEGER
  260. );
  261. /
  262.  
  263. CREATE OR REPLACE TYPE tp_clipes AS TABLE OF tp_clipe;
  264. /
  265.  
  266. CREATE OR REPLACE TYPE tp_perfil_midia AS OBJECT (
  267.     id_perfil_midia INTEGER,
  268.     data_inicio DATE,
  269.     usuario REF tp_usuario,
  270.     nome_perfil VARCHAR2(40),
  271.     midia REF tp_midia,
  272.     tempo_decorrido INTEGER,
  273.     segundo_atual INTEGER,
  274.     clipes tp_clipes
  275. );
  276. /
  277.  
  278. CREATE TABLE tb_perfil_midia OF tp_perfil_midia (
  279.     id_perfil_midia PRIMARY KEY,
  280.     usuario WITH ROWID REFERENCES tb_usuario
  281. ) NESTED TABLE clipes STORE AS tb_clipes;
  282. /
  283.  
  284. INSERT INTO tb_diretor VALUES (tp_diretor('nm1218281', 'Jon Watts', TO_DATE('28/06/1981', 'DD/MM/YYYY')));
  285. INSERT INTO tb_diretor VALUES (tp_diretor('nm0751577', 'Anthony Russo', TO_DATE('03/02/1970', 'DD/MM/YYYY')));
  286. INSERT INTO tb_diretor VALUES (tp_diretor('nm0751648', 'Joe Russo', TO_DATE('08/07/1971', 'DD/MM/YYYY')));
  287.  
  288. INSERT INTO tb_produtora VALUES (tp_produtora('12345678912345', 'Marvel', 'Marvel Cinematic Universe', TO_DATE('30/04/2008', 'DD/MM/YYYY'), 1, 1));
  289. INSERT INTO tb_produtora VALUES (tp_produtora('98765432198765', 'Disney', 'The Walt Disney Company', TO_DATE('01/01/1923', 'DD/MM/YYYY'), 1, 1));
  290.  
  291. INSERT INTO tb_plano VALUES (tp_plano(1, 27.90, 1, 'SD'));
  292. INSERT INTO tb_plano VALUES (tp_plano(2, 36.90, 2, 'HD'));
  293. INSERT INTO tb_plano VALUES (tp_plano(3, 45.90, 4, '4K'));
  294.  
  295. INSERT INTO tb_filme VALUES (tp_filme('tt4154756', TO_DATE('26/04/2018', 'DD/MM/YYYY'), 'Vingadores: Guerra Infinita',
  296.     'Fantasia', 'Português', 'Português', 8940, NULL));
  297.  
  298. INSERT INTO tb_filme VALUES (tp_filme('tt4154796', TO_DATE('25/04/2019', 'DD/MM/YYYY'), 'Vingadores: Ultimato',
  299.     'Ação', 'Português', 'Português', 10860, (SELECT REF(F) FROM tb_filme F WHERE F.id_imdb = 'tt4154756')));
  300.    
  301. INSERT INTO tb_filme VALUES (tp_filme('tt2250912', TO_DATE('06/07/2017', 'DD/MM/YYYY'), 'Homem-Aranha: De Volta para a Casa',
  302.     'Fantasia', 'Português', 'Português', 7980, NULL));
  303.  
  304. INSERT INTO tb_filme VALUES (tp_filme('tt6320628', TO_DATE('04/07/2019', 'DD/MM/YYYY'), 'Homem-Aranha: Longe de Casa',
  305.     'Ação', 'Português', 'Português', 7740, (SELECT REF(F) FROM tb_filme F WHERE F.id_imdb = 'tt2250912')));
  306.  
  307. INSERT INTO tb_filme VALUES (tp_filme('tt10872600', TO_DATE('16/12/2021', 'DD/MM/YYYY'), 'Homem-Aranha: Sem Volta para a Casa',
  308.     'Fantasia', 'Português', 'Português', 8880, (SELECT REF(F) FROM tb_filme F WHERE F.id_imdb = 'tt6320628')));
  309.  
  310. INSERT INTO tb_serie VALUES('tt2442560', TO_DATE('12/09/2013','dd/mm/yyyy'), tp_nomes('Peaky Blinders'),
  311.     tp_categorias('Drama'), tp_idiomas('Inglês'), tp_legendas('Português'), 90);
  312.  
  313. INSERT INTO tb_serie VALUES('tt2306299', TO_DATE('03/03/2013','dd/mm/yyyy'), tp_nomes('Vikings'),
  314.     tp_categorias('Ação'), tp_idiomas('Português'), tp_legendas('Inglês'), 100);
  315.  
  316. INSERT INTO tb_serie VALUES('tt0903747', TO_DATE('20/01/2008','dd/mm/yyyy'), tp_nomes('Breaking Bad'),
  317.     tp_categorias('Drama'), tp_idiomas('Inglês'), tp_legendas('Espanhol'), 90);
  318.  
  319. INSERT INTO tb_serie VALUES('tt0944947', TO_DATE('17/04/2011','dd/mm/yyyy'), tp_nomes('Game Of Thrones'),
  320.     tp_categorias('Aventura'), tp_idiomas('Espanhol'), tp_legendas('Português'), 101);
  321.  
  322. INSERT INTO tb_serie VALUES('tt9561862', TO_DATE('15/03/2019','dd/mm/yyyy'), tp_nomes('Love, Death and Robots'),
  323.     tp_categorias('Animação'), tp_idiomas('Russo'), tp_legendas('Inglês'), 50);
  324.  
  325. INSERT INTO tb_usuario VALUES('lucasmelo1997@gmail.com', 'Lucas', 'Melo', 'AJHDG5', TO_DATE('03/07/1997', 'DD/MM/YYYY'),
  326.     (SELECT REF(P) FROM tb_plano P WHERE P.id_plano = 1), tp_perfis(tp_perfil('Gigi', 1), tp_perfil('Lucas', 1), tp_perfil('Ana', 1 )));
  327.  
  328. INSERT INTO tb_usuario VALUES('gisele-beez@gmail.com', 'Gisele', 'Beez', 'AJHDASKHDG666', TO_DATE('07/07/1995', 'DD/MM/YYYY'),
  329.     (SELECT REF(P) FROM tb_plano P WHERE P.id_plano = 1), tp_perfis(tp_perfil('Gisele', 1), tp_perfil('Luquinhas', 0)));
  330.  
  331. INSERT INTO tb_usuario VALUES('titikretz@gmail.com', 'Tifany', 'Melo', 'HASGKKDG', TO_DATE('12/10/1997', 'DD/MM/YYYY'),
  332.     (SELECT REF(P) FROM tb_plano P WHERE P.id_plano = 2), tp_perfis(tp_perfil('Lily', 0), tp_perfil('Jujuba', 0)));
  333.  
  334. INSERT INTO tb_usuario VALUES('lumajuliacyra@gmail.com', 'Luisa', 'Maranha', 'IOASO1000', TO_DATE('09/02/1990', 'DD/MM/YYYY'),
  335.     (SELECT REF(P) FROM tb_plano P WHERE P.id_plano = 1), tp_perfis(tp_perfil('Luma', 1)));
  336.  
  337. INSERT INTO tb_usuario VALUES('fernanda-kitz-88@gmail.com', 'Fernanda', 'Kitz', 'KAIJSAIX90', TO_DATE('18/05/1988', 'DD/MM/YYYY'),
  338.     (SELECT REF(P) FROM tb_plano P WHERE P.id_plano = 3), tp_perfis(tp_perfil('Nanda', 1), tp_perfil('Higor', 1), tp_perfil('Pedro', 1), tp_perfil('Ana', 1)));
  339.  
  340. INSERT INTO tb_usuario VALUES('bililalindsay@gmail.com', 'Lindsay', 'Nentuck', '90887ADSUG', TO_DATE('22/09/1988', 'DD/MM/YYYY'),
  341.     (SELECT REF(P) FROM tb_plano P WHERE P.id_plano = 2), tp_perfis(tp_perfil('Dada', 0), tp_perfil('Higor', 1), tp_perfil('Lindsay', 1)));
  342.    
  343. INSERT INTO tb_tem VALUES ((SELECT REF(D) FROM tb_diretor D WHERE D.id_imdb = 'nm0751577'),
  344.     (SELECT REF(P) FROM tb_produtora P WHERE P.cnpj = '12345678912345'), (SELECT REF(F) FROM tb_filme F WHERE F.id_imdb = 'tt4154756'));
  345.    
  346. INSERT INTO tb_tem VALUES ((SELECT REF(D) FROM tb_diretor D WHERE D.id_imdb = 'nm0751648'),
  347.     (SELECT REF(P) FROM tb_produtora P WHERE P.cnpj = '12345678912345'), (SELECT REF(F) FROM tb_filme F WHERE F.id_imdb = 'tt4154756'));
  348.    
  349. INSERT INTO tb_tem VALUES ((SELECT REF(D) FROM tb_diretor D WHERE D.id_imdb = 'nm0751577'),
  350.     (SELECT REF(P) FROM tb_produtora P WHERE P.cnpj = '12345678912345'), (SELECT REF(F) FROM tb_filme F WHERE F.id_imdb = 'tt4154796'));
  351.    
  352. INSERT INTO tb_tem VALUES ((SELECT REF(D) FROM tb_diretor D WHERE D.id_imdb = 'nm0751648'),
  353.     (SELECT REF(P) FROM tb_produtora P WHERE P.cnpj = '12345678912345'), (SELECT REF(F) FROM tb_filme F WHERE F.id_imdb = 'tt4154796'));
  354.    
  355. INSERT INTO tb_tem VALUES ((SELECT REF(D) FROM tb_diretor D WHERE D.id_imdb = 'nm1218281'),
  356.     (SELECT REF(P) FROM tb_produtora P WHERE P.cnpj = '12345678912345'), (SELECT REF(F) FROM tb_filme F WHERE F.id_imdb = 'tt2250912'));
  357.    
  358. INSERT INTO tb_tem VALUES ((SELECT REF(D) FROM tb_diretor D WHERE D.id_imdb = 'nm1218281'),
  359.     (SELECT REF(P) FROM tb_produtora P WHERE P.cnpj = '12345678912345'), (SELECT REF(F) FROM tb_filme F WHERE F.id_imdb = 'tt6320628'));
  360.    
  361. INSERT INTO tb_tem VALUES ((SELECT REF(D) FROM tb_diretor D WHERE D.id_imdb = 'nm1218281'),
  362.     (SELECT REF(P) FROM tb_produtora P WHERE P.cnpj = '12345678912345'), (SELECT REF(F) FROM tb_filme F WHERE F.id_imdb = 'tt10872600'));
  363.    
  364. INSERT INTO tb_perfil_midia VALUES (1, TO_DATE('20/05/2010 12:50:42', 'DD/MM/YYYY HH24:MI:SS'),
  365.     (SELECT REF(U) FROM tb_usuario U WHERE U.email = 'fernanda-kitz-88@gmail.com'),
  366.     'Nanda', (SELECT REF(F) FROM tb_filme F WHERE F.id_imdb = 'tt4154756'), 3000, 50,
  367.     tp_clipes(tp_clipe(TO_DATE('20/05/2010 13:23:15', 'DD/MM/YYYY HH24:MI:SS'), 20)));
  368.    
  369. INSERT INTO tb_perfil_midia VALUES (2, TO_DATE('10/11/2021 23:15:12', 'DD/MM/YYYY HH24:MI:SS'),
  370.     (SELECT REF(U) FROM tb_usuario U WHERE U.email = 'bililalindsay@gmail.com'),
  371.     'Dada', (SELECT REF(F) FROM tb_filme F WHERE F.id_imdb = 'tt2250912'), 152, 152,
  372.     tp_clipes(tp_clipe(TO_DATE('11/11/2021 01:10:05', 'DD/MM/YYYY HH24:MI:SS'), 8)));
  373.  
Add Comment
Please, Sign In to add comment