Jump to content

gestão de aluguer de automóveis


amvm
 Share

Recommended Posts

boa tarde.

tenho como trabalho a realização de uma base de dados para gestão de aluguer de automoveis e, como não entendo nada e não nos foi nada grande informação para o mesmo trabalho, estamos com dificuldades em começar. ja fizemos o modelo de dados, criamos as tabelas  e preenchemos com alguns dados... no entanto a nivel de funções, triggers, sequencias, cursores, não fazemos a mínima ideia de onde os implementar. Alguem que possa dar umas luzes?

desde já um obrigado...

Link to comment
Share on other sites

amvm, tens de ser mais claro nas tuas dúvidas caso contrário não vai ser possível ajudar.

Sem saber mais informação também ninguém conseguirá dizer se necessitas, ou não, de determinada função ou trigger.

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Link to comment
Share on other sites

estou com um problema na inserção de datas... por exemplo tenho a tabela

create table Clientes(
Numero char(7) not null ,
Nome varchar(40) not null ,
data_validade_documento date not null,
pais_emissor_documento varchar(20));

essa data de validade do documento é a do bi, cartao do cidadao por aí a fora... e na inserçao dos dados da tabela, por exemplo

INSERT INTO Clientes (Numero,ID_tipo_documento,Nome,Endereço,Observações,numero_documento,data_validade,pais_emissor_documento) VALUES
(0000001,0000001,'Alzira Costa','Rua das Flores Nº198','...',13928237,'08.21.2010' ,'Portugal');

diz q a data é invalida :S

Link to comment
Share on other sites

A data não é inválida, apenas estas a inseri-la no formato errado.

Experimenta usar '2010-08-21', se não der tens de ver qual o formato de data que tens configurado na base de dados e usá-lo.

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Link to comment
Share on other sites

já resolvi o meu problema 😉 tenho outra duvida:

'Aquando da entrega do automóvel, qualquer anomalia verificada no automóvel é registada, bem como se é da responsabilidade do condutor/cliente ou não, registando-se posteriormente a resolução da anomalia.' ( o contrato é realizado por um cliente e é necessário indicar o ou os condutores autorizados.

a minha duvida é mesmo  na responsabilidade da anomalia porque não sei tenho certezas de como fazer, nem depois, que tipo de dados inserir relativamente á tabela que criei.

--anomalia

create table anomalia(

ID_anomalia char(7) not null,

ID_contrato_aluguer char(7) not null,

responsavel varchar (10) not null,

descricao varchar (50),

data_validade_anomalia date not null,

ID_tipo_anomalia char(7) not null);

eu indiquei um "responsavel" mas não sei depois como atribuir essa tal responsabilidade, ou mesmo se ela existir. Reparei agora nesse facto quando inseria dados nesta tabela

Link to comment
Share on other sites

Pelo que compreendi do enunciado, apenas o cliente pode ser responsável, assim não necessitas de ter o responsável como varchar, basta marcar com um bit/booleano, se o responsável é o cliente ou não.

Se essa flag estiver marcada, então o responsável é o cliente, caso contrário não é o cliente.

Como tens uma chave para contracto de aluguer, consegues saber quem é o cliente.

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Link to comment
Share on other sites

só um comentário..

as data devem ser manipuladas como datas.. e não strings.. inserts, updates .. and so on.

P: porquê?

R: porque se tratarem as datas como string, tipo isto, '17-11-2010', pode até funcionar numa base de dados.. mas depois se instalarem a vossa base de dados.. já toda kitada.. cheia de procedimentos, funções, triggers.. tudo impacável.. mas rebenta por todos os lados.. e qual é o problema.. vai-se a ver, a configuração da base de dados é difente.. a data está definida com outro formato (definições NLS..), configurações de instalação.. etc.. e pronto.. está o caldo entornado.

fica a chamada de atenção! 😉

Inté!

Link to comment
Share on other sites

jsWizard muito obrigada, já corrigi  🙂

alguem me pode dizer o porque de isto estar mal? (triggrer para permitir q nao seja inserida uma data inferior a actual)

create or replace TRIGGER data_invalida_anomalia

Before Insert OR UPDATE on anomalia

FOR EACH ROW

Declare

data_inserida number;

data_actual number;

Begin

select to_number( TO_CHAR(new:data_inserida, 'yyyymmdd')) into data_inserida from dual;

select to_number( TO_CHAR(sysdate, 'yyyymmdd')) into data_actual from dual;

If ( data_inserida <= data_actual ) Then

Raise_Application_Error(-20000,'-->>> A data inserida não pode ser inferior que a actual <<<---' );

End If;

End;

Link to comment
Share on other sites

Não precisas de converter as datas para NUMBER. Podes comparar directamente os valores.

Isso está mal porque estás a assumir que vais colocar um NUMBER na tabela, quando na realidade lhe estás a passar um DATE.

Isto claro, a julgar pelo tipo que vejo na tabela que tens aí no post.

De qualquer forma e a título de curiosidade, internamente a BD Oracle guarda os tipos DATE como inteiros. Por isso é possível fazer:

SELECT (SYSDATE+1)-SYSDATE FROM DUAL

🙂

Abr

Link to comment
Share on other sites

pois bem, já corri o meu erro e não sei agora o que tenho de mal, pois ao inserir um valor para testar o trigger da.me  erro:

create or replace TRIGGER data_invalida_documento

Before Insert OR UPDATE on Clientes

FOR EACH ROW

Declare

data_validade_documento date;

data_actual date;

Begin

select TO_date(:new.data_validade_documento, 'yyyymmdd') into data_validade_documento from dual;

select to_date(sysdate, 'yyyymmdd') into data_actual from dual;

If ( data_validade_documento <= data_actual ) Then

Raise_Application_Error(-20000,'-->>> A data inserida não pode ser inferior que a actual <<<---' );

End If;

End;

valores que tentei inserir: INSERT INTO Clientes (Numero,ID_tipo_documento,Nome,Endereço,Observações,numero_documento,data_validade_documento,pais_emissor_documento) VALUES

(cli.nextval,TPo.nextval,'PEDRA LASCADA-SOCIEDADE DE CONSTRUÇÕES','Rua major monteiro leite nº 105','Empresa',14522459,'2008-04-24','Portugal');

erro:

Error starting at line 242 in command:

INSERT INTO Clientes (Numero,ID_tipo_documento,Nome,Endereço,Observações,numero_documento,data_validade_documento,pais_emissor_documento) VALUES

(cli.nextval,TPo.nextval,'PEDRA LASCADA-SOCIEDADE DE CONSTRUÇÕES','Rua major monteiro leite nº 105','Empresa',14522459,'2008-04-24','Portugal')

Error report:

SQL Error: ORA-01858: a non-numeric character was found where a numeric was expected

ORA-06512: at "SYSTEM.DATA_INVALIDA_DOCUMENTO", line 6

ORA-04088: error during execution of trigger 'SYSTEM.DATA_INVALIDA_DOCUMENTO'

01858. 00000 -  "a non-numeric character was found where a numeric was expected"

*Cause:    The input data to be converted using a date format model was

          incorrect.  The input data did not contain a number where a number was

          required by the format model.

*Action:  Fix the input data or the date format model to make sure the

          elements match in number and type.  Then retry the operation.

Link to comment
Share on other sites

e que tal assim:

create or replace TRIGGER data_invalida_documento
Before Insert OR UPDATE on Clientes
FOR EACH ROW

If ( :new.data_validade_documento <= current_timestamp ) Then
        Raise_Application_Error(-20001, '-->>> A data inserida não pode ser inferior que a actual <<<---' );
End If;

End;

estou a assumir que a coluna "data_validade_documento" é do tipo data ou timestamp.. se não é, não deveria ser? e queres mesmo que seja varchar2, então muda para isto:

create or replace TRIGGER data_invalida_documento
Before Insert OR UPDATE on Clientes
FOR EACH ROW

If ( to_timestamp(:new.data_validade_documento, 'YYYY-MM-DD') <= current_timestamp ) Then
        Raise_Application_Error(-20001, '-->>> A data inserida não pode ser inferior que a actual <<<---' );
End If;

End;

mas, como já disse, não me parece boa cena manipular datas como string.

Inté!

Link to comment
Share on other sites

Quando fazes o Insert, se lhe vais meter uma data tens de converter a STRING para DATE.

Para isso usas a função TO_DATE.PEgando no teu INSERT ficaria algo assim:

INSERT INTO Clientes (Numero,ID_tipo_documento,Nome,Endereço,Observações,numero_documento,data_validade_documento,pais_emissor_documento) VALUES
(cli.nextval,TPo.nextval,'PEDRA LASCADA-SOCIEDADE DE CONSTRUÇÕES','Rua major monteiro leite nº 105','Empresa',14522459,TO_DATE('2008-04-24','YYYY-MM-DD'),'Portugal');

Tenta e dps diz qualquer coisa.

Abr

Link to comment
Share on other sites

Black-Wolf e Baderous já consegui meter aquilo a dar muito obrigada. 🙂

vou tentar mostrar um exemplo simples de uma duvida que tenho.... vamos supor que um funcionario pode "fazer" varios contratos e estou usando uma sequencia para implementar as chaves primarias em todas as minhas tabelas...

o problema é que eu inseri 7 funcionarios.

e na tabela:

reate table Contrato_Aluguer(

ID_contrato_aluguer char(7) not null,

Numero char(7) not null ,

data_inicio date not null,

data_fim date not null,

valor_aluguer numeric not null,

ID_funcionarios char(7) not null ,

ID_automovel char(7) not null);

á medida q vou inserindo dados só me deixa introdu<ir até 7, porque esta a atribuir a cada contrato um funcionário diferente. o problema é q eu queria, por exemplo, que o funcionario x fizesse o contrato 2, 3 e 4.

isto está-me acontecendo para todas as tabelas, suponho eu q o erro deva ser muito idiota :S

cumpt

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.