Aprenda PL/SQL

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
  

Mensagemem Seg, 29 Ago 2016 9:46 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.


Código: Selecionar todos
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 XXX , 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 XXX , 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 XXX , 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

Código: Selecionar todos
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;
Renata2016

Mensagemem Seg, 29 Ago 2016 9:58 am

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
spernega
Localização: São Paulo - SP

Mensagemem Seg, 29 Ago 2016 10:58 pm

Infelizmente não deu certo, o select rodou. Mas o cont não contou a quantidade
Renata2016

Mensagemem Ter, 30 Ago 2016 1:05 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:

Código: Selecionar todos
(select count(*) from TbLocacao t where t.FkCodCli = a.PkCodCli and EXTRACT(month from t.dataloc) = 8)


Ou assim:

Código: Selecionar todos
(select count(*) from TbLocacao t where t.FkCodCli = a.PkCodCli and to_char(t.dataloc,'mm') = 8)
Galako

Mensagemem Ter, 30 Ago 2016 8:08 am

Renata, nos dois exemplos citados pelo Galako retoram quantidades:

E aparentemente o DATEPART só funciona no SQLSERVER.


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


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
spernega
Localização: São Paulo - SP

Mensagemem Sex, 02 Set 2016 11:04 am

Obrigada mesmo pessoal, me ajudaram muito. Usei o comando EXTRACT e deu certo.
Renata2016



Voltar para SQL

Quem está online

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