transações

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
truflas
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 8
Registrado em: Qua, 09 Fev 2011 4:39 pm
Localização: Porto

Boa noite , eu tenho as seguintes tabelas :

Selecionar tudo

CREATE TABLE clientes (
	numero_cliente NOT NULL PRIMARY KEY,
	nome_cliente VARCHAR(255),
	telefone_cliente VARCHAR(255),
	email_cliente VARCHAR(255),
	morada_cliente VARCHAR(255)
);

CREATE TABLE vendas (
	codigo_venda NOT NULL  PRIMARY KEY,
	codigo_utilizador INTEGER,
	numero_cliente INTEGER,
	total_pagar FLOAT
);

CREATE TABLE utilizadores (
	codigo_utilizador NOT NULL  PRIMARY KEY,
	nome_utilizador VARCHAR(255),
	telefone_utilizador VARCHAR(255),
	morada_utilizador VARCHAR(255),
	email_utilizador VARCHAR(255)
);

CREATE TABLE linha_vendas (
	codigo_linha_venda NOT NULL  PRIMARY KEY,
	codigo_livro INTEGER,
	codigo_venda INTEGER,
	quantidade INTEGER,
	preço FLOAT,
	iva FLOAT,
	descriçao VARCHAR(255)
);

CREATE TABLE livros2 (
	codigo_livro NOT NULL  PRIMARY KEY,
	titulo_livro VARCHAR(255),
	codigo_manuscrito INTEGER,
	autor VARCHAR(255),
	editora VARCHAR(255),
	genero VARCHAR(255),
	ediçao INTEGER,
	stock INTEGER
	
)

CREATE TABLE manuscrito (
	codigo_manuscrito NOT NULL  PRIMARY KEY,
	codigo_revisao INTEGER,
	codigo_livro INTEGER,
	media_nota_manuscrito FLOAT
e gostava de saber como faço uma transação ? e de que forma se fazem transações .. como se passa-se 1000 euros pra uma conta , e tivesse de retirar 1000 na minha , e incrementar 1000 para a outra -
muito obrigado pela atenção[/img]
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Boa tarde, truflas.

Não sei se entendi direito mas, creio que deva ter várias formas de resolver o seu problema.

Uma delas seria utilizar um Trigger na tua tabela de Movimentação e, caso haja algum tipo de transação nela (Insert, Update ou Delete), você toma a decisão no trigger, ou, numa procedure em PL/SQL que dispare no teu trigger.

Se não for isso, manda pra gente qual é o cenário que você se encontra direitinho que, tentaremos ajudar.
truflas
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 8
Registrado em: Qua, 09 Fev 2011 4:39 pm
Localização: Porto

sim .. é exactamente isso que eu quero .. o problema é que não estou a conseguir arranjar uma relação entre estas tabelas para aplicar isso .. nem sei como hei-de programar isso .. se tivesse algum exemplo agradecia imenso
truflas
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 8
Registrado em: Qua, 09 Fev 2011 4:39 pm
Localização: Porto

Imagine por exemplo , ao vender um livro na tabela vendas quero que na tabela livros seja retirado 1 do stock por exemplo ..
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Então, uma idéia é colocar um TRIGGER na tabela Vendas que, sempre que tiver um tipo de Movimento = Saída, você insira uma linha na tabela de Movimentos dando uma saída nesse livro.

Aqui no fórum tem vários exemplos de trigger.

Caso não localize algo, retorna pra gente que a gente ajuda.
truflas
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 8
Registrado em: Qua, 09 Fev 2011 4:39 pm
Localização: Porto

eu já andei a pesquisar , mas eu sou muito fraco ainda nesta programação .. eu não devia de usar uma funçao e depois chamar no trigger? na minha tabela linha_vendas ao vender um livro , na tabela livros devo retirar uma unidade no campo stock .. você tem algum trigger ou funçao que possa disponibilizar para me ajudar?
truflas
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 8
Registrado em: Qua, 09 Fev 2011 4:39 pm
Localização: Porto

CREATE TABLE linha_vendas (
codigo_linha_venda NOT NULL PRIMARY KEY,
codigo_livro INTEGER,
codigo_venda INTEGER,
quantidade INTEGER,
preço FLOAT,
iva FLOAT,
descriçao VARCHAR(255)
);

CREATE TABLE livros2 (
codigo_livro NOT NULL PRIMARY KEY,
titulo_livro VARCHAR(255),
codigo_manuscrito INTEGER,
autor VARCHAR(255),
editora VARCHAR(255),
genero VARCHAR(255),
ediçao INTEGER,
stock INTEGER

);

bem o meu problema é o seguinte .. vou tentar explicar direitinho .. o que eu quero mesmo é ao vender um livro na tabela linha_vendas quero retirar no tabela livros no stock ..ou seja quero criar uma transaçao em PL/SQL..

mais ou menos isto ...

Transacção para incrementar e decrementar a quantidade de reserva

START TRANSACTION;
insert into reserve (establishment_id, cat_establishement_id, prod_id, client_id, quantity)
values (1, 1, 1, 1, 1);
update establishment set places_num = places_num - 1
where establishment_id = 1;
COMMIT;

Transacção para incrementar e decrementar o número de lugares

START TRANSACTION;
update establishment set places_num = places_num + 1
where establishment_id = 1;

mas queria isto aplicado em PL/SQL e para o meu conteudo .. alguém tem uma ideia? obrigado pela atenção
Responder
  • Informação
  • Quem está online

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