Criando Type

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
Reinke
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 2
Registrado em: Seg, 14 Jan 2008 7:28 pm
Localização: RS

Boa Noite pessoal, seguinte estou criando um type fora de uma package e estou tendo algumas dificuldades.

Ex:

Selecionar tudo

Create Or Replace Type "TP_teste" As Object
(
 campo1     tabela.id%type,
 campo2     tabela.desc%type
)
Ou seja estou tendando dizer que o campo1 deve ser do mesmo tipo e tamanho do campo da tabela.id. há como fazer algo desse tipo ????

Quando tento compilar ocorre o seguinte erro:
Compilation errors for TYPE TP_teste

Error: PLS-00201: identifier 'tabela.id' must be declared
Line: 8
Text: campo1 tabela.id,

Error: PL/SQL: Compilation unit analysis terminated
Line: 1
Text: Create Or Replace Type "TP_teste" As Object

Alguém já conseguiu fazer um type referênciando um campo dessa forma ????


Desde já agradeço qualquer ajuda.
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Brother,

Seguinte, creio que não consiga criar o Type referenciando uma coluna de uma tabela.

O que dá pra ser feito, velho, é, referenciar mesmo os datatypes OU, criar um Tipo que é do tipo de um outro Tipo existente e até, criar Subtipos.
Não sei se deu pra entender muito bem, então, fiz um exemplo abaixo:

Selecionar tudo

CREATE TYPE EMPREGADO_TY AS OBJECT (NOME      VARCHAR2(25),
                                    CPF       NUMBER);

CREATE TYPE  EMPREGADOS_NT AS TABLE OF EMPREGADO_TY;
                        
CREATE TYPE DEPARTAMENTO_TY AS OBJECT (NOME          VARCHAR2(25), 
                                       EMPREGADOS    EMPREGADOS_NT );                        

Caso você crie um type referenciando uma coluna da tabela, ele até cria (fiz como exemplo no 10g), porém, com "warnings" e fica inválido:

Selecionar tudo

CREATE TYPE t_teste AS OBJECT (cod_emp emp.empno%TYPE,
                               nome    emp.ename%TYPE);
Objeto (seleção da User_objects - Inválido) :

Selecionar tudo

T_TESTE 	 	52617                                 	                                      	TYPE 	14-jan-2008 22:05:39	14-jan-2008 22:05:39	2008-01-14:22:05:39 	INVALID 	N 	N 	N
Reinke
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 2
Registrado em: Seg, 14 Jan 2008 7:28 pm
Localização: RS

Obrigado pela dica trevisolli mas realmente minha dúvida era quanto a referenciar uma coluna de uma tabela, notei que as vezes compila porem com warnings mas como você mesmo disse o type fica inválido.

Grande abraço,
cron_rj
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 25
Registrado em: Qua, 19 Dez 2007 9:10 am
Localização: Rio de Janeiro RJ

Geralmente eu consigo referênciar colunas em tabelas ao declarar variáveis dessa forma:
TABELA.COLUNA%TYPE
Sempre funcionou sem problemas. O problema ai pode ser de schema, se uma tabela for de domínio de outro usuário do banco, não vai compilar, a não ser que você dê um GRANT ou recrie ela para o usuário que está usando.

Pode ser que seu caso não seja este também =/
:D
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Então, cron.

No caso, tentei a criação do Type com o schema do SCOTT,na tabela emp.
Ou seja, não era pra ter este tipo de problema não.
Provavelmente a criação de Tipo não aceita %type.
qualquer coisa, manda ai.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante