Procedure

1. Procedure

Rafael da Silva
rafads

(usa Fedora)

Enviado em 03/07/2012 - 11:12h

Estou estudando Procedure e resolvendo uma questao de uma prova ...
Gostaria de uma ajuda na resolução, pois estou com dificuldades de fazer uma Pocedure

As tabelas do banco da questao é :

CREATE TABLE CONSULTA
(COD_CONS INTEGER NOT null,
DATA_CONS DATE NOT NULL,
COD_MED INTEGER NOT NULL,
COD_PAC INTEGER NOT null,
PRIMARY KEY (COD_CONS),
FOREIGN KEY (COD_PAC) REFERENCES PACIENTE,
FOREIGN KEY (COD_MED) REFERENCES MEDICO);

CREATE TABLE EXAME
(COD_CONS INTEGER NOT NULL,
COD_EXAME INTEGER NOT null,
NOME_EXAME VARCHAR(40),
DATA_EXAME DATE,
PRIMARY KEY (COD_CONS,COD_EXAME) );
--- Questão --
Considerando, crie uma Procedure que receba todos os dados de um Exame e faça a inserção no banco. Antes de inserir a procedure deve verificar se o codigo de consulta informado existe na tabela Consulta. Caso não exista, a inserção nao deve ser feita.

Resolvi no seguinte modo SÓ QUE NÃO ESTÁ DANDO CERTO ... OCORRE UM ERRO:

CREATE PROCEDURE insere_exame (
COD_CONS INTEGER,
COD_EXAME INTEGER,
NOME_EXAME VARCHAR(40),
DATA_EXAME DATE)
AS
DECLARE VARIABLE AUX INTEGER;
begin
SELECT COUNT(*) FROM consulta
where CONSULTA.cod_cons = EXAME.cod_cons
INTO AUX;
IF(AUX IS NOT NULL) THEN
INSERT INTO EXAME values (cod_cons,cod_exame,nome_exame,data_exame);
suspend;
end



O ERRO :
Column does not belong to referenced table.
Dynamic SQL Error.
SQL error code = -206.
Column unknown.
COD_CONS.
At line 13, column 72.

Espero a ajuda de vocês,

Att.



  


2. duvida

Everton Bruno
evesbruno

(usa Debian)

Enviado em 06/12/2012 - 14:09h

e sobre seu select ....

como vc ta juntando as duas tabelas no select da procedure ?

nao tem join la creio que so pelo where tabela1=tabela2 nao vai reconhecer
otra coisa foreing key na segunda tabela exame.....
qnd vc der count dela vai dar que nao existe coluna COD_CONS na tabela exames


3. Conserto da procedure.

Gustavo Pádua Vilas Bôas
Gustavonick

(usa Outra)

Enviado em 07/03/2014 - 22:16h

Eu acho que o erro esta na aplicação de (:) no código.
Mas claro se você usa o FIREBIRD MAESTRO.

Como exemplo, copiei o seu código e o consertei.

EXEMPLO:

CREATE PROCEDURE insere_exame (
:COD_CONS INTEGER,
:COD_EXAME INTEGER,
:NOME_EXAME VARCHAR(40),
:DATA_EXAME DATE)
AS
DECLARE VARIABLE AUX INTEGER;
begin
SELECT COUNT(*) FROM consulta
where CONSULTA.cod_cons = EXAME.cod_cons
INTO AUX;
IF(AUX IS NOT NULL) THEN
INSERT INTO EXAME values (cod_cons,cod_exame,nome_exame,data_exame);
suspend;
end

Obrigado pela atenção.
Se você não usa o FIREBIRD MAESTRO, o conserto que eu fiz não vai funcionar.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts