Candangos
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
maio 2024
SegTerQuaQuiSexSábDom
  12345
6789101112
13141516171819
20212223242526
2728293031  

Calendário Calendário

Procurar
 
 

Resultados por:
 


Rechercher Pesquisa avançada

Últimos assuntos
» matrizes em c
PL SQL ORACLE  FUNÇOES Empty2011-11-10, 13:52 por allanyo

» matriz em c
PL SQL ORACLE  FUNÇOES Empty2011-11-08, 19:02 por allanyo

» matriz em c
PL SQL ORACLE  FUNÇOES Empty2011-11-08, 19:02 por allanyo

» [FUNÇÃO] C
PL SQL ORACLE  FUNÇOES Empty2011-09-25, 15:33 por lucas150992

» Comprare Viagra. da mulher viagra generico
PL SQL ORACLE  FUNÇOES Empty2011-08-04, 09:16 por Convidado

Navegação
 Portal
 Índice
 Membros
 Perfil
 FAQ
 Buscar

PL SQL ORACLE FUNÇOES

Ir para baixo

PL SQL ORACLE  FUNÇOES Empty PL SQL ORACLE FUNÇOES

Mensagem por Edward Phoenix 2011-03-26, 17:58

Iae pessoal!...
Ninguem mais postando no forum,que está havendo?
Hum ja sei as provas do semestre passado abalou geral né?
Pois é até eu me abalei! :O

Mas agora vamos falar de uma coisa importante,ORACLE!...
PL SQL Funçoes,pra que serve as funçoes?

Bom o conceito é abrangente por todas as linguagens de programação que existem,esses objetos,ele trabalham como leva-e-tras voce envia uma informação ou apenas chama e ela retorna uma resposta,sempre vai retornar algo pra ser usado dentro de outra função,evento,procedures enfim....

Na pratica falamos desse geito:

---

CREATE OR REPLACE FUNCTION ANNUAL_SAL(P_ID EMPLOYEES.EMPLOYEE_ID%TYPE)
RETURN NUMBER
IS
V_SAL EMPLOYEES.SALARY%TYPE;
V_COMISSAO EMPLOYEES.COMMISSION_PCT%TYPE;
BEGIN
SELECT SALARY,COMMISSION_PCT
INTO V_SAL,V_COMISSAO
FROM EMPLOYEES
WHERE EMPLOYEE_ID = P_ID;
IF(V_COMISSAO IS NULL) THEN
RETURN (V_SAL * 12);
ELSE
RETURN ((V_SAL * 12)+(V_COMISSAO * V_SAL * 12));
END IF;
END ANNUAL_SAL;

----

Vamos desossar isso!

Primeira linha:

CREATE [OR REPLACE] FUNCTION NOME(PARAMETROS [IN OUT] TIPODEDADO)

Essa linha de codigo CRIA ou ATUALIZA uma função caso a mesma exista,o nome que ela ira se chamar e os parametros
podendo ser por referencia ou por valor IN(VALOR) OUT(REFERENCIA) o nome já em bastante intuitivo...(Valor ele recebe e é usado mas o valor atual nao eh alterado,Referencia ele recebe um valor pode ser alterado e ficara alterado,ou seja,faz com que essa variavel ocupe um endereço de memoria e vai sofrendo alteração conforme foi descrito no codigo ) o TIPODEDADO é um tipo que voce esta atribuindo para o parametro,como as vezes nao sabemos qual é o valor que algum campo da tabela está configurado entao podemos 'tipar' ele conforme com o da tabela usasse essa linha (pParametro TABELA.CAMPO%TYPE)....Simples nao!...

RETURN TIPODEDADO

Retorna algum tipo de dado numerico,string...enfim... (SEMPRE VAI EXISTIR EM FUNÇOES)..

V_SAL EMPLOYEES.SALARY%TYPE;
V_COMISSAO EMPLOYEES.COMMISSION_PCT%TYPE;

Como eu disse la em cima,declarei essas variaveis de acordo com o mesmo tipo de dado que o do campo...

SELECT SALARY,COMMISSION_PCT
INTO V_SAL,V_COMISSAO
FROM EMPLOYEES
WHERE EMPLOYEE_ID = P_ID;

Faz um select em SALARY e COMMISSION_PCT ( campos de tabela ) e guarda esse valor dentro de uma variavel,na qual,eu declarei la em cima...V_SAL ( recebe o salary) V_COMISSAO (recebe o commission_pct) deve ser na MESMA ORDEM!!!!...
Entao vai ficar selecionar salario e comissao de employees aonde a identificação do funcionario for igual ao do PARAMETRO RECEBIDO ou seja o P_ID que eu declarei la em cima tambem como parametro.

IF(V_COMISSAO IS NULL) THEN
RETURN (V_SAL * 12);
ELSE
RETURN ((V_SAL * 12)+(V_COMISSAO * V_SAL * 12));
END IF;
END ANNUAL_SAL;

Verifica se a variavel V_COMISSAO é nula,se for nula entao o funcionario nao tem comissao e efetua apenas o calculo do seu salario anual
e RETORNA o valor desse calculo,senao efetua outro calculo e TAMBEM RETORNA.

em seguida o END ANNUAL_SAL; termina a função.

--- ATRIBUINDO VALORES E TESTANDO

Bom depois que eu fiz a minha função eu compilo ela e utilizo com algum bloco anonimo como mostra aseguir:

DECLARE
V_ID EMPLOYEES.EMPLOYEE_ID%TYPE := 145;
BEGIN
DBMS_OUTPUT.PUT_LINE(TO_CHAR('ID: ' || V_ID || ' - ANNUAL SALARY = ' || ANNUAL_SAL(V_ID)));
END;

Crio uma variavel pra receber um valor,posso tambem fazer um prompt pro usuario digitar o ID do funcionario e guardar em V_ID
(&V_ID) <- prompt...

Depois do BEGIN ele tem uma saida de informação contendo o V_ID concatenado com uma string e em seguida a CHAMADA DA FUNCAO com o valor que ela retornou la em cima...

Resultado:

---
ID: 145 - ANNUAL SALARY = 235200
---

Fiz as contas e da isso mesmo!..

Bom pessoal é esse o conceito de funçoes,tendo essas informaçoes e sabendo usar as querys corretamente voce faz muita coisa!..

Vou ficando por aqui depois falamos sobre PROCEDURES as irmas das funçoes que Nao retornam! hehe!..

Abraços a todos..

PHOENIX

Fonte:
EU MESMO =D
Edward Phoenix
Edward Phoenix

Mensagens : 34
Pontos : 86
Data de inscrição : 22/02/2010
Idade : 33

Ir para o topo Ir para baixo

Ir para o topo


 
Permissões neste sub-fórum
Não podes responder a tópicos