Função de comparação de dados
28/02/2011
0
to iniciando agora com Oracle e tá me surgindo dúvidas em relação as FUNCTIONS
eu criei uma tabela simles que contem CODIGO, CPF, NOME
CREATE TABLE USUARIO
( CODIGO NUMBER NOT NULL,
CPF VARCHAR2(11) NOT NULL ,
NOME VARCHAR2(111) NOT NULL ,
CONSTRAINT "CODIGO_PK" PRIMARY KEY ("CODIGO") ENABLE
)
Em seguida criei uma VIEW identica a essa tabela, dando um select em todas as colunas
CREATE VIEW VW_USUARIO AS SELECT * FROM USUARIO
agora eu gostaria de criar uma função que compare a coluna CPF entre essas duas tabelas, só por prática mesmo, pra saber fazer comparação entre colunas de tabelas diferentes
lendo sobre oracle vi que ele não possui BOOLEAN, ae nesse caso muitas pessoas usam NUMBER, retornando 1 ou 0
testei algumas funções que crueu, mas sempre dá algum tipo de erro, por isso vim aqui pedir ajuda, pois tneho dúvidas nas declarações de funções, principalmente de sintaxe
fui seguindo assim (sei que ela tá bem errada ainda, peço desculpa pela dúvida de principiante), ainda não sei como declarar essas duas colunas já existentes na função...
CREATE OR REPLACE FUNCTION FN_AUTENTICA (
P_CPF VW_USUARIO.CPF%VARCHAR2
)
RETURN NUMBER
RETORNA_VALOR NUMBER;
BEGIN
SELECT CPF
INTO
P_CPF
FROM VW_USUARIO
IF
CPF == P_CPF
THEN
RETORNA_VALOR := 1;
ELSE
RETORNA_VALOR := 0;
END IF;
RETURN RETORNA_VALOR;
END FN_AUTENTICA;
toda ajuda é bem vinda
att. Felipe
Felipe Molina
Posts
28/02/2011
Felipe Molina
14/03/2011
Rm
Uma view em termos de dados é o espelho da tabela, ou seja, o resultado da sua comparação sempre será igual, porem entendi que voce quer apenas treinar o pl/sql. Na sua função existe alguns erros de sintaxe:
Na linha CREATE OR REPLACE FUNCTION FN_AUTENTICA(P_CPF VW_USUARIO.CPF%VARCHAR2)
esta deveria ser escrita assim
CREATE OR REPLACE FUNCTION FN_AUTENTICA(P_CPF VW_USUARIO.CPF%TYPE)
ou
CREATE OR REPLACE FUNCTION FN_AUTENTICA(P_CPF varchar2)
No trecho
IF CPF == P_CPF THEN RETORNA_VALOR := 1;
ELSE RETORNA_VALOR := 0;
END IF;
Voce deveria ter feito assim
declarado uma váriável
p_cpf_vw varchar2;
e colocalo no seu select.
ai voce iria comparar os dois cpf. O código ficaria assim:
CREATE OR REPLACE FUNCTION FN_AUTENTICA(P_CPF VW_USUARIO.CPF%TYPE)
RETURN NUMBER IS
RETORNA_VALOR NUMBER;
P_CPF_VW VARCHAR2;
BEGIN
SELECT CPF
INTO P_CPF_VW
FROM VW_USUARIO;
IF P_CPF_VW = P_CPF THEN
RETORNA_VALOR := 1;
ELSE
RETORNA_VALOR := 0;
END IF;
RETURN RETORNA_VALOR;
END FN_AUTENTICA;
Espero ter ajudado
Rodrigo Mesquita
15/03/2011
Felipe Molina
Uma view em termos de dados é o espelho da tabela, ou seja, o resultado da sua comparação sempre será igual, porem entendi que voce quer apenas treinar o pl/sql. Na sua função existe alguns erros de sintaxe:
Na linha CREATE OR REPLACE FUNCTION FN_AUTENTICA(P_CPF VW_USUARIO.CPF%VARCHAR2)
esta deveria ser escrita assim
CREATE OR REPLACE FUNCTION FN_AUTENTICA(P_CPF VW_USUARIO.CPF%TYPE)
ou
CREATE OR REPLACE FUNCTION FN_AUTENTICA(P_CPF varchar2)
No trecho
IF CPF == P_CPF THEN RETORNA_VALOR := 1;
ELSE RETORNA_VALOR := 0;
END IF;
Voce deveria ter feito assim
declarado uma váriável
p_cpf_vw varchar2;
e colocalo no seu select.
ai voce iria comparar os dois cpf. O código ficaria assim:
CREATE OR REPLACE FUNCTION FN_AUTENTICA(P_CPF VW_USUARIO.CPF%TYPE)
RETURN NUMBER IS
RETORNA_VALOR NUMBER;
P_CPF_VW VARCHAR2;
BEGIN
SELECT CPF
INTO P_CPF_VW
FROM VW_USUARIO;
IF P_CPF_VW = P_CPF THEN
RETORNA_VALOR := 1;
ELSE
RETORNA_VALOR := 0;
END IF;
RETURN RETORNA_VALOR;
END FN_AUTENTICA;
Espero ter ajudado
Rodrigo Mesquita
obrigado rodrigo :]
me ajudou bastante
Clique aqui para fazer login e interagir na Comunidade :)