Select da erro, me ajudem.

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
Renata2016
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 7
Registrado em: Seg, 29 Ago 2016 9:28 am

Eu criei um select no SQL server e ele funciona direitinho, mas quando tento rodar no oracle ele da erro, já tentei de tudo e não funciona.

Vou mandar as tabelas e os insert abaixo.

Selecionar tudo

create table TBCLASSIFICACAO(
  PKCODCLASS integer not null, 
  NOMECLASS varchar2(15), 
  VALORDIARIA number(15,2),
  constraint TBCLASSIFICACAO_pk primary key (PKCODCLASS)
);

create table TBCLIENTE(
  PKCODCLI integer not null, 
  NOMECLI varchar2(30), 
  ENDCLI varchar2(30),
  CIDADECLI varchar2(25),
  UFCLI varchar2(2),
  constraint TBCLIENTE_PK primary key (PKCODCLI)
);

create table TBGENERO(
  PKCODGEN integer not null, 
  NOMEGEN varchar2(20),
  constraint TBGENERO_PK primary key (PKCODGEN)
);
 
 create table TBFILME(
  PKCODFILME integer not null, 
  TITULO varchar2(40),
  FKCODGEN integer,
  FKCODCLASS integer,  
  constraint TBFILME_PK primary key (PKCODFILME)
);
 
 
 create table TBLOCACAO(
  PKCODLOC integer not null, 
  DATALOC date,
  FKCODCLI integer, 
  constraint TBLOCACAO_PK primary key (PKCODLOC)
);

 
 create table TBRELFILMELOC(
  PKCODREL integer not null, 
  FKCODFILME integer,
  FKCODLOC integer, 
  constraint TBRELFILMELOC_PK primary key (PKCODREL)
); 
 
alter table TBFILME add constraint TBFILME_FKCODGEN_FK foreign key(FKCODGEN) references TBGENERO(PKCODGEN);
alter table TBFILME add constraint TBFILME_FKCODCLASS_FK foreign key(FKCODCLASS) references TBCLASSIFICACAO(PKCODCLASS);
alter table TBLOCACAO add constraint TBLOCACAO_FKCODCLI_FK foreign key(FKCODCLI) references TBCLIENTE(PKCODCLI);
alter table TBRELFILMELOC add constraint TBRELFILMELOC_FKCODFILME_FK foreign key(FKCODFILME) references TBFILME(PKCODFILME);
alter table TBRELFILMELOC add constraint TBRELFILMELOC_FKCODLOC_FK foreign key(FKCODLOC) references TBLOCACAO(PKCODLOC);



 


INSERT INTO TBCLASSIFICACAO (PKCODCLASS, NOMECLASS, VALORDIARIA) VALUES (1, 'Lancamento', 9.60);
INSERT INTO TBCLASSIFICACAO (PKCODCLASS, NOMECLASS, VALORDIARIA) VALUES (2, 'Destaque', 5.22);
INSERT INTO TBCLASSIFICACAO (PKCODCLASS, NOMECLASS, VALORDIARIA) VALUES (3, 'Antigo', 2.99);
INSERT INTO TBCLASSIFICACAO (PKCODCLASS, NOMECLASS, VALORDIARIA) VALUES (4, 'Muito Antigo', 1.76);



INSERT INTO TBCLIENTE (PKCODCLI, NOMECLI, ENDCLI, CIDADECLI, UFCLI) VALUES (1, 'Emilio G. Medici', 'Rua AAA , 70', 'Porto Alegre', 'RS');
INSERT INTO TBCLIENTE (PKCODCLI, NOMECLI, ENDCLI, CIDADECLI, UFCLI) VALUES (2, 'Ernesto Geisel', 'AV yyyy, 500', 'Canoas', 'RS');
INSERT INTO TBCLIENTE (PKCODCLI, NOMECLI, ENDCLI, CIDADECLI, UFCLI) VALUES (3, 'Joao Figueiredo', 'Rua wwww, 65', 'Sapucaia', 'RS');
INSERT INTO TBCLIENTE (PKCODCLI, NOMECLI, ENDCLI, CIDADECLI, UFCLI) VALUES (4, 'Tancredo Neves', 'AV yyyy, 800', 'Porto Alegre', 'RS');
INSERT INTO TBCLIENTE (PKCODCLI, NOMECLI, ENDCLI, CIDADECLI, UFCLI) VALUES (5, 'Jose Sarney', 'AV yyyy, 739', 'Sapucaia', 'RS');
INSERT INTO TBCLIENTE (PKCODCLI, NOMECLI, ENDCLI, CIDADECLI, UFCLI) VALUES (6, 'Fernando Collor', 'Rua AAA , 120', 'Porto Alegre', 'RS');
INSERT INTO TBCLIENTE (PKCODCLI, NOMECLI, ENDCLI, CIDADECLI, UFCLI) VALUES (7, 'Itamar Franco', 'AV. qqq, 5', 'Porto Alegre', 'RS');
INSERT INTO TBCLIENTE (PKCODCLI, NOMECLI, ENDCLI, CIDADECLI, UFCLI) VALUES (8, 'Fernando Henrique Cardoso', 'Rua AAA , 90', 'Camboriu', 'SC');
INSERT INTO TBCLIENTE (PKCODCLI, NOMECLI, ENDCLI, CIDADECLI, UFCLI) VALUES (9, 'Luiz Inacio Lula da Silva', 'AV. hhhh 88', 'Camboriu', 'SC');
INSERT INTO TBCLIENTE (PKCODCLI, NOMECLI, ENDCLI, CIDADECLI, UFCLI) VALUES (10, 'Dilma Rousseff', 'Rua abc, 44', 'Canoas', 'RS');


INSERT INTO TBGENERO (PKCODGEN, NOMEGEN) VALUES (1, 'Aventura');
INSERT INTO TBGENERO (PKCODGEN, NOMEGEN) VALUES (2, 'Acao');
INSERT INTO TBGENERO (PKCODGEN, NOMEGEN) VALUES (3, 'Romance');
INSERT INTO TBGENERO (PKCODGEN, NOMEGEN) VALUES (4, 'Drama');




INSERT INTO TBFILME (PKCODFILME, TITULO, FKCODGEN, FKCODCLASS) VALUES (1, 'Um Sonho de Liberdade', 1, 1);
INSERT INTO TBFILME (PKCODFILME, TITULO, FKCODGEN, FKCODCLASS) VALUES (2, '12 Homens e uma Sentenca ', 4, 3);
INSERT INTO TBFILME (PKCODFILME, TITULO, FKCODGEN, FKCODCLASS) VALUES (3, '2001, uma Odisseia no Espaco', 2, 2);
INSERT INTO TBFILME (PKCODFILME, TITULO, FKCODGEN, FKCODCLASS) VALUES (4, 'O Poderoso Chefao 2', 3, 2);
INSERT INTO TBFILME (PKCODFILME, TITULO, FKCODGEN, FKCODCLASS) VALUES (5, 'Star Wars: Episodio V ', 2, 4);
INSERT INTO TBFILME (PKCODFILME, TITULO, FKCODGEN, FKCODCLASS) VALUES (6, 'Cantando na Chuva', 2, 3);
INSERT INTO TBFILME (PKCODFILME, TITULO, FKCODGEN, FKCODCLASS) VALUES (7, 'O Poderoso Chefao', 1, 3);
INSERT INTO TBFILME (PKCODFILME, TITULO, FKCODGEN, FKCODCLASS) VALUES (8, 'Era Uma Vez em Toquio', 3, 2);
INSERT INTO TBFILME (PKCODFILME, TITULO, FKCODGEN, FKCODCLASS) VALUES (9, 'O Senhor dos Aneis', 3, NULL);
INSERT INTO TBFILME (PKCODFILME, TITULO, FKCODGEN, FKCODCLASS) VALUES (10, 'Os Sete Samurais', 1, 2);
INSERT INTO TBFILME (PKCODFILME, TITULO, FKCODGEN, FKCODCLASS) VALUES (11, 'Rastros de Odio ', 2, NULL);
INSERT INTO TBFILME (PKCODFILME, TITULO, FKCODGEN, FKCODCLASS) VALUES (12, 'Matrix', 4, 1);
INSERT INTO TBFILME (PKCODFILME, TITULO, FKCODGEN, FKCODCLASS) VALUES (13, 'Os Suspeitos ', 4, 1);
INSERT INTO TBFILME (PKCODFILME, TITULO, FKCODGEN, FKCODCLASS) VALUES (14, 'A Lista de Schindler', 3, 4);
INSERT INTO TBFILME (PKCODFILME, TITULO, FKCODGEN, FKCODCLASS) VALUES (15, 'Batman Cavaleiro das Trevas', 2, 4);






INSERT INTO TBLOCACAO (PKCODLOC, DATALOC, FKCODCLI) VALUES (1, '01/07/2012', 3);
INSERT INTO TBLOCACAO (PKCODLOC, DATALOC, FKCODCLI) VALUES (2, '01/07/2012', 2);
INSERT INTO TBLOCACAO (PKCODLOC, DATALOC, FKCODCLI) VALUES (3, '10/07/2012', 3);
INSERT INTO TBLOCACAO (PKCODLOC, DATALOC, FKCODCLI) VALUES (4, '20/08/2012', 8);
INSERT INTO TBLOCACAO (PKCODLOC, DATALOC, FKCODCLI) VALUES (5, '20/08/2012', 8);
INSERT INTO TBLOCACAO (PKCODLOC, DATALOC, FKCODCLI) VALUES (6, '25/08/2012', 1);
INSERT INTO TBLOCACAO (PKCODLOC, DATALOC, FKCODCLI) VALUES (7, '01/09/2012', 8);
INSERT INTO TBLOCACAO (PKCODLOC, DATALOC, FKCODCLI) VALUES (8, '01/09/2012', 7);
INSERT INTO TBLOCACAO (PKCODLOC, DATALOC, FKCODCLI) VALUES (9, '10/09/2012', 7);
INSERT INTO TBLOCACAO (PKCODLOC, DATALOC, FKCODCLI) VALUES (10, '15/09/2012', 3);
INSERT INTO TBLOCACAO (PKCODLOC, DATALOC, FKCODCLI) VALUES (11, '20/09/2012', 8);
INSERT INTO TBLOCACAO (PKCODLOC, DATALOC, FKCODCLI) VALUES (12, '20/09/2012', 1);
INSERT INTO TBLOCACAO (PKCODLOC, DATALOC, FKCODCLI) VALUES (13, '23/09/2012', 9);
INSERT INTO TBLOCACAO (PKCODLOC, DATALOC, FKCODCLI) VALUES (14, '26/09/2012', 10);
INSERT INTO TBLOCACAO (PKCODLOC, DATALOC, FKCODCLI) VALUES (15, '28/09/2012', 9);
INSERT INTO TBLOCACAO (PKCODLOC, DATALOC, FKCODCLI) VALUES (16, '28/09/2012', 8);
INSERT INTO TBLOCACAO (PKCODLOC, DATALOC, FKCODCLI) VALUES (17, '30/09/2012', 9);
INSERT INTO TBLOCACAO (PKCODLOC, DATALOC, FKCODCLI) VALUES (18, '07/10/2012', 10);
INSERT INTO TBLOCACAO (PKCODLOC, DATALOC, FKCODCLI) VALUES (19, '07/10/2012', 9);
INSERT INTO TBLOCACAO (PKCODLOC, DATALOC, FKCODCLI) VALUES (20, '07/10/2012', 10);



INSERT INTO TBRELFILMELOC (PKCODREL, FKCODFILME, FKCODLOC) VALUES (1, 2, 1);
INSERT INTO TBRELFILMELOC (PKCODREL, FKCODFILME, FKCODLOC) VALUES (2, 11, 1);
INSERT INTO TBRELFILMELOC (PKCODREL, FKCODFILME, FKCODLOC) VALUES (3, 4, 1);
INSERT INTO TBRELFILMELOC (PKCODREL, FKCODFILME, FKCODLOC) VALUES (4, 10, 1);
INSERT INTO TBRELFILMELOC (PKCODREL, FKCODFILME, FKCODLOC) VALUES (5, 13, 1);
INSERT INTO TBRELFILMELOC (PKCODREL, FKCODFILME, FKCODLOC) VALUES (6, 1, 2);
INSERT INTO TBRELFILMELOC (PKCODREL, FKCODFILME, FKCODLOC) VALUES (7, 5, 2);
INSERT INTO TBRELFILMELOC (PKCODREL, FKCODFILME, FKCODLOC) VALUES (8, 11, 3);
INSERT INTO TBRELFILMELOC (PKCODREL, FKCODFILME, FKCODLOC) VALUES (9, 12, 3);
INSERT INTO TBRELFILMELOC (PKCODREL, FKCODFILME, FKCODLOC) VALUES (10, 4, 3);
INSERT INTO TBRELFILMELOC (PKCODREL, FKCODFILME, FKCODLOC) VALUES (11, 6, 4);
INSERT INTO TBRELFILMELOC (PKCODREL, FKCODFILME, FKCODLOC) VALUES (12, 3, 5);
INSERT INTO TBRELFILMELOC (PKCODREL, FKCODFILME, FKCODLOC) VALUES (13, 7, 5);
INSERT INTO TBRELFILMELOC (PKCODREL, FKCODFILME, FKCODLOC) VALUES (14, 4, 6);
INSERT INTO TBRELFILMELOC (PKCODREL, FKCODFILME, FKCODLOC) VALUES (15, 1, 7);
INSERT INTO TBRELFILMELOC (PKCODREL, FKCODFILME, FKCODLOC) VALUES (16, 6, 7);
INSERT INTO TBRELFILMELOC (PKCODREL, FKCODFILME, FKCODLOC) VALUES (17, 9, 7);
INSERT INTO TBRELFILMELOC (PKCODREL, FKCODFILME, FKCODLOC) VALUES (18, 3, 8);
INSERT INTO TBRELFILMELOC (PKCODREL, FKCODFILME, FKCODLOC) VALUES (19, 1, 9);
INSERT INTO TBRELFILMELOC (PKCODREL, FKCODFILME, FKCODLOC) VALUES (20, 7, 9);
INSERT INTO TBRELFILMELOC (PKCODREL, FKCODFILME, FKCODLOC) VALUES (21, 4, 9);
INSERT INTO TBRELFILMELOC (PKCODREL, FKCODFILME, FKCODLOC) VALUES (22, 5, 10);
INSERT INTO TBRELFILMELOC (PKCODREL, FKCODFILME, FKCODLOC) VALUES (23, 2, 11);
INSERT INTO TBRELFILMELOC (PKCODREL, FKCODFILME, FKCODLOC) VALUES (24, 1, 12);
INSERT INTO TBRELFILMELOC (PKCODREL, FKCODFILME, FKCODLOC) VALUES (25, 12, 12);
INSERT INTO TBRELFILMELOC (PKCODREL, FKCODFILME, FKCODLOC) VALUES (26, 3, 13);
INSERT INTO TBRELFILMELOC (PKCODREL, FKCODFILME, FKCODLOC) VALUES (27, 5, 13);
INSERT INTO TBRELFILMELOC (PKCODREL, FKCODFILME, FKCODLOC) VALUES (28, 3, 14);
INSERT INTO TBRELFILMELOC (PKCODREL, FKCODFILME, FKCODLOC) VALUES (29, 14, 14);
INSERT INTO TBRELFILMELOC (PKCODREL, FKCODFILME, FKCODLOC) VALUES (30, 5, 14);
INSERT INTO TBRELFILMELOC (PKCODREL, FKCODFILME, FKCODLOC) VALUES (31, 7, 14);
INSERT INTO TBRELFILMELOC (PKCODREL, FKCODFILME, FKCODLOC) VALUES (32, 15, 14);
INSERT INTO TBRELFILMELOC (PKCODREL, FKCODFILME, FKCODLOC) VALUES (33, 12, 14);
INSERT INTO TBRELFILMELOC (PKCODREL, FKCODFILME, FKCODLOC) VALUES (34, 3, 15);
INSERT INTO TBRELFILMELOC (PKCODREL, FKCODFILME, FKCODLOC) VALUES (35, 2, 16);
INSERT INTO TBRELFILMELOC (PKCODREL, FKCODFILME, FKCODLOC) VALUES (36, 2, 17);
INSERT INTO TBRELFILMELOC (PKCODREL, FKCODFILME, FKCODLOC) VALUES (37, 6, 17);
INSERT INTO TBRELFILMELOC (PKCODREL, FKCODFILME, FKCODLOC) VALUES (38, 5, 17);
INSERT INTO TBRELFILMELOC (PKCODREL, FKCODFILME, FKCODLOC) VALUES (39, 13, 18);
INSERT INTO TBRELFILMELOC (PKCODREL, FKCODFILME, FKCODLOC) VALUES (40, 2, 19);
INSERT INTO TBRELFILMELOC (PKCODREL, FKCODFILME, FKCODLOC) VALUES (41, 9, 19);
INSERT INTO TBRELFILMELOC (PKCODREL, FKCODFILME, FKCODLOC) VALUES (42, 11, 20);
INSERT INTO TBRELFILMELOC (PKCODREL, FKCODFILME, FKCODLOC) VALUES (43, 10, 20);


Abaixo temos o select que criei no sql server, me ajudem a fazer pegar no oracle por favor

Selecionar tudo

Select 
	a.NomeCli, 	

	(select count(*) from TbLocacao t where t.FkCodCli = a.PkCodCli and DATEPART(month,t.dataloc) = 8) as 'Quantidade de locação mês 8',
	
        (select count(*) from TbLocacao t where t.FkCodCli = a.PkCodCli and DATEPART(month,t.dataloc) = 9) as 'Quantidade de locação mês 9',
	
        (select count(*) from TbLocacao t where t.FkCodCli = a.PkCodCli and DATEPART(month,t.dataloc) = 10) as 'Quantidade de locação mês 10' 
        
from TbCliente a 

group by a.PkCodCli, a.NomeCli;
spernega
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Ter, 19 Jun 2007 2:12 pm
Localização: São Paulo - SP

Bom dia Renata,

Substitua o alias dos campos
de: as 'Quantidade de locação mês 8'
para: "Quantidade de locação mês 8"

Para todos os três meses.

Eu testei no banco 10, mas o DATEPART não existe, acho que só a partir do 11.
Teste como to_char(t.dataloc,'mm') = 8.
Mas a substituição da aspas deve funcionar
Renata2016
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 7
Registrado em: Seg, 29 Ago 2016 9:28 am

Infelizmente não deu certo, o select rodou. Mas o cont não contou a quantidade
Galako
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 5
Registrado em: Seg, 29 Ago 2016 10:13 am

Olá Renata,

Testei no 11g porém não encontrou a função DATEPART.

Você pode fazer de duas maneiras para trocas esta função utilizando o to_char(t.dataloc,'mm') = &mês, ou utilizar a função EXTRACT(month from t.dataloc) = &mês (troque &mês pelo mês que você quer).

Creio que seu count deva ficar assim:

Selecionar tudo

(select count(*) from TbLocacao t where t.FkCodCli = a.PkCodCli and EXTRACT(month from t.dataloc) = 8)
Ou assim:

Selecionar tudo

(select count(*) from TbLocacao t where t.FkCodCli = a.PkCodCli and to_char(t.dataloc,'mm') = 8)
spernega
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Ter, 19 Jun 2007 2:12 pm
Localização: São Paulo - SP

Renata, nos dois exemplos citados pelo Galako retoram quantidades:

E aparentemente o DATEPART só funciona no SQLSERVER.

Selecionar tudo

Select a.NomeCli,    a.PkCodCli, 
      (select count(*) from TbLocacao t where t.FkCodCli = a.PkCodCli and TO_CHAR(t.dataloc,'MM') = '08') "Quantidade de locação mês 8",
      (select count(*) from TbLocacao t where t.FkCodCli = a.PkCodCli and TO_CHAR(t.dataloc,'MM') = '09') "Quantidade de locação mês 9",
      (select count(*) from TbLocacao t where t.FkCodCli = a.PkCodCli and TO_CHAR(t.dataloc,'MM') = '10') "Quantidade de locação mês 10" 
from TbCliente a 
/

NOMECLI                          PKCODCLI Quantidade de locação mês 8 Quantidade de locação mês 9 Quantidade de locação mês 10
------------------------------ ---------- --------------------------- --------------------------- ----------------------------
Emilio G. Medici                        1                           1                           1                            0
Ernesto Geisel                          2                           0                           0                            0
Joao Figueiredo                         3                           0                           1                            0
Tancredo Neves                          4                           0                           0                            0
Jose Sarney                             5                           0                           0                            0
Fernando Collor                         6                           0                           0                            0
Itamar Franco                           7                           0                           2                            0
Fernando Henrique Cardoso               8                           2                           3                            0
Luiz Inacio Lula da Silva               9                           0                           3                            1
Dilma Rousseff                         10                           0                           1                            2

Selecionar tudo

Select a.NomeCli,    a.PkCodCli, 
      (select count(*) from TbLocacao t where t.FkCodCli = a.PkCodCli and EXTRACT(month from t.dataloc) = 8) "Quantidade de locação mês 8",
      (select count(*) from TbLocacao t where t.FkCodCli = a.PkCodCli and EXTRACT(month from t.dataloc) = 9) "Quantidade de locação mês 9",
      (select count(*) from TbLocacao t where t.FkCodCli = a.PkCodCli and EXTRACT(month from t.dataloc) = 10) "Quantidade de locação mês 10" 
from TbCliente a 
/

NOMECLI                          PKCODCLI Quantidade de locação mês 8 Quantidade de locação mês 9 Quantidade de locação mês 10
------------------------------ ---------- --------------------------- --------------------------- ----------------------------
Emilio G. Medici                        1                           1                           1                            0
Ernesto Geisel                          2                           0                           0                            0
Joao Figueiredo                         3                           0                           1                            0
Tancredo Neves                          4                           0                           0                            0
Jose Sarney                             5                           0                           0                            0
Fernando Collor                         6                           0                           0                            0
Itamar Franco                           7                           0                           2                            0
Fernando Henrique Cardoso               8                           2                           3                            0
Luiz Inacio Lula da Silva               9                           0                           3                            1
Dilma Rousseff                         10                           0                           1                            2
Renata2016
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 7
Registrado em: Seg, 29 Ago 2016 9:28 am

Obrigada mesmo pessoal, me ajudaram muito. Usei o comando EXTRACT e deu certo.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 5 visitantes