I think it's easier for you to simply declare the parameter as a number ... if the program that calls the procedure send a character other than a number, it will give an error in implicit conversion.
Select all
CREATE OR REPLACE PROCEDURE GERAL.INSTI_GERATITULOS_TGPR
(
PTGPR_SQPROCESSO IN OUT NUMBER,
PTGPR_NUREGRECUPERADOS IN NUMBER,
PTGPR_NUREGPROCESSADOS IN NUMBER,
PTGPR_NMARQUIVO IN CHAR,
PTGPR_PATHARQUIVO IN CHAR,
PTGPR_DSHEADERARQUIVO IN NUMBER, -> Eu preciso que essa variavel aqui quando trazer uma informação seja validado como número...
PTGPR_SISTEMA IN CHAR
)
AS
But even so ... the best is
change the column type of the table to number .
If you do not have any way ... Put a check construct in the column as below:
Select all
SQL> -- cria tabela de exemplo
SQL> create table ti_geratitulos_tgpr (tgpr_dsheaderarquivo varchar2(30));
Table created
SQL> -- criação da função de verificação
SQL> CREATE OR REPLACE FUNCTION testa_numero(p_char IN VARCHAR2) RETURN NUMBER IS
2 v_temp NUMBER;
3 BEGIN
4 v_temp := to_number(p_char);
5 RETURN 1;
6 EXCEPTION
7 WHEN invalid_number THEN
8 RETURN 0;
9 END;
10 /
Function created
SQL> -- criação da check constraint
SQL> alter table ti_geratitulos_tgpr add constraint ck_header_is_number check (to_number(tgpr_dsheaderarquivo) = to_number(tgpr_dsheaderarquivo));
Table altered
SQL> -- testa inserção na tabela
SQL> insert into ti_geratitulos_tgpr (tgpr_dsheaderarquivo) values ('123');
1 row inserted
SQL> insert into ti_geratitulos_tgpr (tgpr_dsheaderarquivo) values ('123.45');
1 row inserted
SQL> insert into ti_geratitulos_tgpr (tgpr_dsheaderarquivo) values ('1,5');
insert into ti_geratitulos_tgpr (tgpr_dsheaderarquivo) values ('1,5')
ORA-01722: invalid number
SQL> insert into ti_geratitulos_tgpr (tgpr_dsheaderarquivo) values ('.2');
1 row inserted
SQL> insert into ti_geratitulos_tgpr (tgpr_dsheaderarquivo) values ('0.4');
1 row inserted
SQL> select tgpr_dsheaderarquivo from ti_geratitulos_tgpr;
TGPR_DSHEADERARQUIVO
------------------------------
123
123.45
.2
0.4
again: The correct is to change the column to number. It's simple and it's the right thing to do.