Estou tentando montar uma lógica onde eu lance um numero e essa lógica me forneça o fatorial deste numero....
Estou tentando usar este comando mas não esta dando certo, se alguém puder me ajudar eu agradeço muito....
DECLARE
VA_FATORIAL NUMBER(10) :='&NUMERO';
VA_FINAL NUMBER(1) := 1;
VA_MULT NUMBER(10) := VA_FATORIAL -1;
BEGIN
LOOP
EXIT WHEN VA_FATORIAL=VA_FINAL
OR VA_FATORIAL * VA_MULT;
VA_MULT := VA_FATORIAL-1;
END LOOP;
END;
vocês tb devem ter notados que eu abri alguns tópicos é que estou fazendo um curso e comecei ver PL/SQL a duas aulas, por isso tantas dúvidas espero não estar encomodando e quem sabe mas para frente possa contribuir com o forum tirando a dúvida de outros que precisem....
Agradço muito pela ajuda que estão me dando....OBRIGADO
Create an object to do the cumulative multiplication
create or replace type cumulative_mult_type as object ( total varchar2(4000), static function ODCIAggregateInitialize(sctx IN OUT cumulative_mult_type ) return number, member function ODCIAggregateIterate(self IN OUT cumulative_mult_type , value IN NUMBER) return number, member function ODCIAggregateTerminate(self IN cumulative_mult_type , returnValue OUT NUMBER, flags IN number) return number, member function ODCIAggregateMerge(self IN OUT cumulative_mult_type, ctx2 IN cumulative_mult_type ) return number );
Define the body
create or replace type body cumulative_mult_type is static function ODCIAggregateInitialize(sctx IN OUT cumulative_mult_type) return number is begin sctx := cumulative_mult_type( 1 ); return ODCIConst.Success; end; member function ODCIAggregateIterate(self IN OUT cumulative_mult_type, value IN NUMBER ) return number is begin self.total := self.total * value; return ODCIConst.Success; end; member function ODCIAggregateTerminate(self IN cumulative_mult_type, returnValue OUT NUMBER, flags IN number) return number is begin returnValue := self.total; return ODCIConst.Success; end; member function ODCIAggregateMerge(self IN OUT cumulative_mult_type, ctx2 IN cumulative_mult_type) return number is begin self.total := self.total * ctx2.total; return ODCIConst.Success; end;end;
Create the aggregate function
CREATE or replace FUNCTION factorial(input NUMBER ) RETURN NUMBER PARALLEL_ENABLE AGGREGATE USING cumulative_mult_type;
Populate the table
SQL> create table a ( col1 NUMBER );Table created.SQL> INSERT INTO a VALUES (1);1 row created.SQL> INSERT INTO a VALUES (2);1 row created.SQL> INSERT INTO a VALUES (3);1 row created.SQL> INSERT INTO a VALUES (4);1 row created.
Now, run the factorial function
SQL> SELECT factorial( col1 ) from a;FACTORIAL(COL1)--------------- 24
Eu entendi mais ow menos o que vocês mandaram, o problema é que preciso, conseguir montar uma lógica que me pessa um numero e eu inserindo este numero ela me forneça o fatorial do mesmo......
Acho que é mais ow menos por esse caminho.....
[/i]Mas não estou conseguindo fazer com que as funções se encaixem se alguém souber onde estou errando e puder me ajudar ficaria muito grato.....
Obrigado....
DECLARE
v_teste NUMBER := 0;
FUNCTION fun_fatorial (p_nro IN NUMBER)
RETURN NUMBER
IS
v_nro NUMBER := 1;
BEGIN
FOR x IN 1..p_nro
LOOP
v_nro := v_nro * x;
END LOOP;
RETURN v_nro;
END;
BEGIN
v_teste := fun_fatorial(5);
dbms_output.put_line('Fatorial: '||v_teste);
END;
DECLARE
VA_NUM NUMBER(3) :='&NUMERO';
VA_FAT NUMBER := VA_NUM;
BEGIN
FOR VA_MULT IN 2..VA_NUM-1 LOOP
VA_FAT := VA_FAT * VA_MULT;
END LOOP;
DBMS_OUTPUT.PUT_LINE(' O FATORIAL DE '||VA_NUM||' É: '||VA_FAT);
END;
SQL> create or replace function thomas_factorial( n binary_double) return binary_double is
2 begin
3 if n<=1 then
4 return 1;
5 else
6 return n * thomas_factorial (n-1);
7 end if;
8 end;
9 /
Function created.