Alguém poderia me ajudar a criar uma procedure onde esta deve receberá como parâmetro valores de campos de uma tabela.
Ex:
E estes valores são CHAR.
Variaveis
PCodigo NUMBER
PEndereco CHAR
PNumero CHAR
Alguém pode me dar uma mão?
Obrigado.
PCodigo NUMBER
PEndereco CHAR
PNumero CHAR
CREATE OR REPLACE PROCEDURE sua_proc
(p_codigo IN NUMBER ,
p_endereco IN CHAR,
p_numero IN CHAR)
IS
BEGIN
...
END sua_proc;
/
essa parte ai eu não entendi.. pra que então o tipo dele e char r não number??Só que em especial, a variável PNumero embora ela aceite CHAR eu preciso com que obrigatóriamente passe a fazer uma validação antes de gravar na tabela, pois não pode ir para a tabela valores que não sejam números.
ORA-01722 - INVALID_NUMBER
It isn't a number even though you are treating it like one to trying to turn it into one
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 CHAR, -> Eu preciso que essa variavel aqui quando trazer uma informação seja validado como número...
PTGPR_SISTEMA IN CHAR
)
AS
vBuscaInt NUMBER; -> pra i sso, eu criei essa variável que é do tipo numerico
BEGIN
vBuscaInt := NVL(vDSHEADERHARQUIVO,0); --> caso ele receba um valor que não seja numerico... ele vai cair na excecao lá em baixo... ÍSSO QUE EU FIZ ESTÁ CERTO?
SELECT GERAL.INTEGRA_SQ_GERATITULO.NEXTVAL
INTO PTGPR_SQPROCESSO
FROM DUAL;
INSERT INTO GERAL.TI_GERATITULOS_TGPR(
TGPR_SQPROCESSO ,
TGPR_NUREGRECUPERADOS ,
TGPR_NUREGPROCESSADOS ,
TGPR_NMARQUIVO ,
TGPR_PATHARQUIVO ,
TGPR_DSHEADERARQUIVO ,
TGPR_DTGERACAO ,
TGPR_USUARIOGERACAO ,
TGPR_SISTEMA
)
VALUES(
PTGPR_SQPROCESSO ,
PTGPR_NUREGRECUPERADOS ,
PTGPR_NUREGPROCESSADOS ,
PTGPR_NMARQUIVO ,
PTGPR_PATHARQUIVO ,
PTGPR_DSHEADERARQUIVO ,
SYSDATE,
USER,
PTGPR_SISTEMA);
EXCEPTION
WHEN OTHERS THEN
END;
/
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 CHAR,
PTGPR_SISTEMA IN CHAR
)
AS
vBuscaInt NUMBER;
BEGIN
BEGIN
select to_number(PTGPR_DSHEADERARQUIVO) into vBuscaInt from dual;
EXCEPTION
WHEN INVALID_NUMBER THEN
PTGPR_DSHEADERARQUIVO := 0;
END;
SELECT GERAL.INTEGRA_SQ_GERATITULO.NEXTVAL
INTO PTGPR_SQPROCESSO
FROM DUAL;
INSERT INTO GERAL.TI_GERATITULOS_TGPR(
TGPR_SQPROCESSO ,
TGPR_NUREGRECUPERADOS ,
TGPR_NUREGPROCESSADOS ,
TGPR_NMARQUIVO ,
TGPR_PATHARQUIVO ,
TGPR_DSHEADERARQUIVO ,
TGPR_DTGERACAO ,
TGPR_USUARIOGERACAO ,
TGPR_SISTEMA
)
VALUES(
PTGPR_SQPROCESSO ,
PTGPR_NUREGRECUPERADOS ,
PTGPR_NUREGPROCESSADOS ,
PTGPR_NMARQUIVO ,
PTGPR_PATHARQUIVO ,
PTGPR_DSHEADERARQUIVO ,
SYSDATE,
USER,
PTGPR_SISTEMA);
EXCEPTION
WHEN OTHERS THEN
END;
/
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 CHAR,
PTGPR_SISTEMA IN CHAR
)
AS
vBuscaInt NUMBER;
BEGIN
SELECT TO_NUMBER(PTGPR_DSHEADERARQUIVO)
INTO vBuscaInt
FROM DUAL;
SELECT GERAL.INTEGRA_SQ_GERATITULO.NEXTVAL
INTO PTGPR_SQPROCESSO
FROM DUAL;
INSERT INTO GERAL.TI_GERATITULOS_TGPR(
TGPR_SQPROCESSO ,
TGPR_NUREGRECUPERADOS ,
TGPR_NUREGPROCESSADOS ,
TGPR_NMARQUIVO ,
TGPR_PATHARQUIVO ,
TGPR_DSHEADERARQUIVO ,
TGPR_DTGERACAO ,
TGPR_USUARIOGERACAO ,
TGPR_SISTEMA
)
VALUES(
PTGPR_SQPROCESSO ,
PTGPR_NUREGRECUPERADOS ,
PTGPR_NUREGPROCESSADOS ,
PTGPR_NMARQUIVO ,
PTGPR_PATHARQUIVO ,
PTGPR_DSHEADERARQUIVO ,
SYSDATE,
USER,
PTGPR_SISTEMA);
EXCEPTION
WHEN OTHERS THEN
END;
/
EXCEPTION
WHEN OTHERS THEN
err_code := SQLCODE;
err_msg := substr(SQLERRM, 1, 200);
DBMS_OUTPUT.PUT_LINE ('Exception, status=' || err_code || ' - mensagem: '|| err_msg);
END;
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
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
Usuários navegando neste fórum: Nenhum usuário registrado e 6 visitantes