Função de comparação de dados

28/02/2011

0

olá pessoal
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

Felipe Molina

Responder

Posts

28/02/2011

Felipe Molina

enfim, só botei esse código pra saber onde declaro cada tabela, se preciso criar nova variavel, sintaxe, etc..
Responder

14/03/2011

Rm

Felipe,

    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
Responder

15/03/2011

Felipe Molina


Felipe,

    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
Responder

APRENDA A PROGRAMAR DO ZERO AO PROFISSIONAL

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar