Olá Pessoal,
Estou tentando fazer isso no Oracle Forms e estou tendo alguns erros. Estou gravando o campo limpo no BD, sem máscaras, só números, no entanto, além desse campo ser uma PK, ele foi criado como VARCHAR2. Tentei várias maneiras de apresentar o campo com máscara para o usuário e gravá-lo sem a máscara, porém sem sucesso. Vale lembrar que uso o mesmo campo tanto para CPF quanto para CNPJ, me valendo de uma check box, que se checada diz que é pessoa física, se não checada, diz que é pessoa jurídica. Será que estou usando as triggers certas? Segue o problema:
1-Para apresentar o campo formatado quando trago ele na tela, estou codificando na trigger "When-New-Record-Instance" a nível de bloco.
Selecionar tudo
IF :VIEW_CLI_ISAIAS.CLI_TIPO_ID = 'F' THEN
l_prc_alerta('Entrou como CPF');
/*SELECT Decode(:VIEW_CLI_ISAIAS.CLI_ID, NULL, NULL,
Translate(To_Char(:VIEW_CLI_ISAIAS.CLI_ID/100,
'000,000,000.00'), ',.', '.-'))
into :VIEW_CLI_ISAIAS.CLI_ID
from dual;*/
/* SELECT DECODE(LENGTH(:VIEW_CLI_ISAIAS.cli_id),14, SUBSTR(:VIEW_CLI_ISAIAS.cli_id,1,2)||'.'||
SUBSTR(:VIEW_CLI_ISAIAS.cli_id,3,3)||'.'||
SUBSTR(:VIEW_CLI_ISAIAS.cli_id,5,3)||'/'||
SUBSTR(:VIEW_CLI_ISAIAS.cli_id,8,4)||'-'||
SUBSTR(:VIEW_CLI_ISAIAS.cli_id,12,2)
,0)
into :VIEW_CLI_ISAIAS.CLI_ID
from dual;*/
SET_ITEM_PROPERTY('CLI_ID', FORMAT_MASK, '000"."000"."000"-"00');
ELSIF :VIEW_CLI_ISAIAS.CLI_TIPO_ID = 'J' THEN
l_prc_alerta('Entrou como CNPJ');
/* SELECT DECODE(LENGTH(:VIEW_CLI_ISAIAS.cli_id),14, SUBSTR(:VIEW_CLI_ISAIAS.cli_id,1,2)||'.'||
SUBSTR(:VIEW_CLI_ISAIAS.cli_id,3,3)||'.'||
SUBSTR(:VIEW_CLI_ISAIAS.cli_id,5,3)||'/'||
SUBSTR(:VIEW_CLI_ISAIAS.cli_id,8,4)||'-'||
SUBSTR(:VIEW_CLI_ISAIAS.cli_id,12,2)
,0)
into :VIEW_CLI_ISAIAS.CLI_ID
from dual;*/
set_item_property('CLI_ID', FORMAT_MASK, '00"."000"."000"/"0000"-"00');
END IF;
ERRO APRESENTADO:
FRM-40105: Unable to resolve reference to item 45704205836 <------(isso é um CPF)
2-Tiro a máscara para gravação na trigger "Pre-Insert" e "Pre-Update" também a nível de bloco (isso está dando certo!).
Selecionar tudo
IF :VIEW_CLI_ISAIAS.CLI_TIPO_ID = 'F' THEN
SELECT REPLACE(Translate(:VIEW_CLI_ISAIAS.CLI_ID,'.-',' '),' ')
INTO :VIEW_CLI_ISAIAS.CLI_ID
FROM dual;
ELSIF :VIEW_CLI_ISAIAS.CLI_TIPO_ID = 'J' THEN
SELECT REPLACE(Translate(:VIEW_CLI_ISAIAS.CLI_ID,'./-',' '),' ')
INTO :VIEW_CLI_ISAIAS.CLI_ID
FROM dual;
END IF;
3-Para apresentar um campo que está sendo inserido ou atualizado para o usuário, codifico a máscara na trigger "When-Validate_Item" do Item em questão.
Selecionar tudo
IF :VIEW_CLI_ISAIAS.CLI_TIPO_ID = 'F' THEN
SET_ITEM_PROPERTY(:VIEW_CLI_ISAIAS.CLI_ID, FORMAT_MASK, '000"."000"."000"-"00');
/*SELECT DECODE(LENGTH(:VIEW_CLI_ISAIAS.cli_id),11, SUBSTR(:VIEW_CLI_ISAIAS.cli_id,1,3)||'.'||
SUBSTR(:VIEW_CLI_ISAIAS.cli_id,4,3)||'.'||
SUBSTR(:VIEW_CLI_ISAIAS.cli_id,7,3)||'-'||
SUBSTR(:VIEW_CLI_ISAIAS.cli_id,10,2)
,0)
into :VIEW_CLI_ISAIAS.CLI_ID
from dual;*/
ELSIF :VIEW_CLI_ISAIAS.CLI_TIPO_ID = 'J' THEN
SET_ITEM_PROPERTY(:VIEW_CLI_ISAIAS.CLI_ID, FORMAT_MASK, '00"."000"."000"/"0000"-"00');
/*SELECT DECODE(LENGTH(:VIEW_CLI_ISAIAS.cli_id),14, SUBSTR(:VIEW_CLI_ISAIAS.cli_id,1,2)||'.'||
SUBSTR(:VIEW_CLI_ISAIAS.cli_id,3,3)||'.'||
SUBSTR(:VIEW_CLI_ISAIAS.cli_id,5,3)||'/'||
SUBSTR(:VIEW_CLI_ISAIAS.cli_id,8,4)||'-'||
SUBSTR(:VIEW_CLI_ISAIAS.cli_id,12,2)
,0)
into :VIEW_CLI_ISAIAS.CLI_ID
from dual;*/
END IF;
ERRO APRESENTADO:
FRM-40735: WHEN-VALIDATE-ITEM trigger raised unhandled exception ORA-01722
Percebam que tentei de várias maneiras em nenhuma delas consigo ter sucesso conforme os erros reportados!
Me ajudem aí por favor!