Cursor com tratamento CASE não está retornando na rowtype

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
ceess_1
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 37
Registrado em: Seg, 10 Ago 2009 3:15 pm
Localização: São Paulo - SP

Pessoal, tenho um cursor que faço um tratamendo com case em um dos campos, gravo isso na rowtype e depois faço a chamada dos campos que necessito, quanto faço isso aparece a mensagem de que o campo que tratei com CASE não está sendo reconhecido, alguém pode me ajudar?
Segue o codigo abaixo:

Selecionar tudo

SELECT CIDADE         ,
       OPER           ,
       CASE LENGTH(UNID_OPER )
      WHEN 1 THEN LPAD(( UNID_OPER),7,'0') 
      WHEN 2 THEN LPAD(( UNID_OPER),7,'0')
      WHEN 3 THEN LPAD(( UNID_OPER),7,'0')
      WHEN 4 THEN LPAD(( UNID_OPER),7,'0')
      WHEN 5 THEN LPAD(( UNID_OPER),7,'0')
      WHEN 6 THEN LPAD(( UNID_OPER),7,'0')
      WHEN 7 THEN LPAD(( UNID_OPER),7,'0')
      WHEN 8 THEN to_char(UNID_OPER) END, 
            DT_INI_ATIVIDADE       ,
            DT_FIM_ATIVIDADE       ,
            DS_UNID_OPER           ,
            AD_PESSOA
     FROM   OPERACIONAL 
     WHERE  TRUNC(TS_ULT_ALZ)  = TRUNC(SYSDATE)-1
     AND    AD_PESSOA  IS NOT NULL
     ORDER BY CD_IATA_UNID_OPER,DT_INI_ATIVIDADE,SG_IATA_CIDADE;
  REG1 C1%ROWTYPE;

Chamo a saida do campo que necessito da seguinte forma: REG1.UNID_OPER ****
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5018
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Pode usar CAST, veja esse exemplo:

Selecionar tudo

select cast(120 as number(10,3)) from dual;

Selecionar tudo

select cast( '22-Aug-2003' AS varchar2(30) ) from dual;
Outra forma é usar um TYPE com CAST:

Selecionar tudo

CREATE OR REPLACE TYPE district_t AS OBJECT (
region_no NUMBER(2),
title VARCHAR2(35),
cost NUMBER(7,2));
/

CREATE TYPE DistList_t AS TABLE OF district_t;
/

CREATE TYPE DistrictList AS VARRAY(10) OF district_t;
/

CREATE TABLE region_tab (
reg_id NUMBER(2),
reg_name VARCHAR2(15),
district DistrictList);

set describe depth all linenum on indent on

desc region_tab

SELECT * FROM region_tab;

INSERT INTO region_tab
VALUES(30, 'Northwest',
DistrictList (District_t(1, 'Alaska', 3250),
District_t(2, 'Washington', 12350),
District_t(3, 'Oregon', 2750),
District_t(4, 'Idaho', 1425)));

INSERT INTO region_tab
VALUES(40, 'Southwest',
DistrictList (District_t(1, 'Arizona', 3250),
District_t(2, 'California', 12350),
District_t(3, 'Nevada', 2750),
District_t(4, 'New Mexico', 1425)));

SELECT CAST(s.district AS DistList_t)
FROM region_tab s
WHERE s.reg_id = 30;
Exemplo retirado do PSOUG: http://www.psoug.org/reference/cast.html
ceess_1
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 37
Registrado em: Seg, 10 Ago 2009 3:15 pm
Localização: São Paulo - SP

Muito obrigado Dr. Gori, consegui resolver de uma outra forma, quando eu trato o campo com o CASE ele assume como nome do campo a declaração do CASE, par resolver eu defini um alias para o campo após o encerramento da instrução case e fiz a chamada através desse alias.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 5 visitantes