Pular para o conteúdo
Visualizando 7 posts - 1 até 7 (de 7 do total)
  • Autor
    Posts
  • #85279
    thianolima
    Participante

      Ola galera sou novo no forum e novo no oracle.
      Trabalho a 3 anos com firebir/interbase e estou acostumado a criar oq chamamos de Domiains para padronizar os tipos dos campos iguais em diversas tabelas e depois quando precisar alterar um campo q seje comum em todas elas como pro exemplo campo Monetario que vai passar 15,2 para 15,4 em todo o sistema basta ir no domain e fazer essa alteração. Procurei na iternet e acabei encontrando algo parecido no Oracle que sao os Types mas so vi eles sendo usado com Objetos Hierarquicos e eu queria usa-los com Tabelas normais para nao ter que sofrer em ter q mudar em diversas tabelas qdo uma chave primaria aumentar o tamanho. Tenei da seguinte Maneira:


      CREATE OR REPLACE
      TYPE RECNO AS TABLE OF INTEGER NOT NULL;

      CREATE TABLE GRUPOUSUARIO (
      GUS_RECNO INTEGER NOT NULL,
      GUS_TESTE RECNO,
      GUS_NOME VARCHAR(50),
      PRIMARY KEY(GUS_RECNO));

      E esta me gerando o seguinte erro:

      Error report:
      SQL Error: ORA-22913: must specify table name for nested table column or attribute
      22913. 00000 – “must specify table name for nested table column or attribute”
      *Cause: The storage clause is not specified for a nested table column
      or attribute.
      *Action: Specify the nested table storage clause for the nested table
      column or attribut

      Alguem pode me ajudar???? [/code]

      #85282
      Anônimo

        dá uma olhada nesse link, tem uns exemplos.

        http://www.psoug.org/reference/type.html

        #85286
        rerodrig
        Participante

          Cara, segue um exemplo básico:

          --criação do tipo
          create or replace type tp_endereco as object (
          logradouro varchar2(100),
          numero varchar2(10),
          cep varchar2(8)
          );

          --criação da tabela com a coluna tipada
          create table t_empresas(
          id_empresa number(9),
          razao_social varchar2(250),
          endereco tp_endereco
          )

          --alteração o tipo
          alter type tp_endereco modify attribute logradouro varchar2(200) cascade;

          Qualquer coisa posta aí…abraços

          #85288
          thianolima
          Participante

            Opa brigadao pelo link, eu fiz os teste


            CREATE OR REPLACE TYPE ssn_t AS OBJECT (
            ssn_type CHAR(11));

            CREATE TABLE ssn (
            per_id NUMBER(10),
            per_ssn ssn_t);

            e funcionou perfeito, porem qdo tentei criar um tipo mais complexo como o abaixo deu erro:


            CREATE OR REPLACE TYPE T_BOOLEAN AS OBJECT (
            BOOLEAN_TYPE CHAR(1) DEFAULT 'N'
            CONSTRAINT CKN_FNC_DELETE NOT NULL
            CONSTRAINT CK_FNC_DELETE CHECK(BOOLEAN_TYPE IN ('S', 'N'))
            );

            Naquela documentacao tinha um exemplo aonde pelo q entendi ele criava metodos contrutores para o objeto, é so dessa forma q eu vou conseguir para criar checks para os types?

            #85295
            Anônimo

              Olha um teste !!!

              SQL> create type meutipo as object ( tipocampo varchar2(10)) ; create table teste
              2 ( codigo number(10) primary key,
              3* campo2 meutipo default meutipo(‘teste’) ) /

              Tabela criada.

              SQL> insert into teste values ( 1, meutipo( ‘testando’) ) ;

              1 linha criada.

              SQL> insert into teste values ( 2, meutipo( ‘S’) ) ;

              1 linha criada.

              SQL> insert into teste values ( 3, meutipo( ”) ) ;

              • perceba que nesse insert eu passei o NULL como valor do campo e ele VAI gravar assim

              1 linha criada.

              SQL> select * from teste ;

              CODIGO

              CAMPO2(TIPOCAMPO)

                   1                                                                      
              

              MEUTIPO(‘testando’)

                   2                                                                      
              

              MEUTIPO(‘S’)

                   3                                                                      
              

              MEUTIPO(NULL) insert into teste (codigo) values ( 4 ) ;

              • agora mais um insert sem passar o valor do campo,
                como o meu default é ‘teste’ …

              1 linha criada.

              SQL> select * from teste ;

              CODIGO

              CAMPO2(TIPOCAMPO)

                   1                                                                      
              

              MEUTIPO(‘testando’)

                   2                                                                      
              

              MEUTIPO(‘S’)

                   3                                                                      
              

              MEUTIPO(NULL)

              CODIGO

              CAMPO2(TIPOCAMPO)

                   4                                                                      
              

              MEUTIPO(‘teste’) <– … ele assume 'teste' aqui no insert…

              se não me engano ( o que não é difícil ), a cláusula CONSTRAINT não é usada na criação de tipos … mas vou dar um pesquisada melhor …

              #85301
              thianolima
              Participante

                Desa forma eu resolvo a questao do default… ae fica o problema dos constraints como vc citou…. Obrigado pelas dicas vou procurar se encontro mais coisas caso alguem saiba por favor me ajude pois acabei de criar 15 tabelas e esse campo de exemplo q eu mostrei existe em praticamente todas e se um dia surgir uma nova letra pq vcs sabme como e a cabeca de usuario to lascado

                #85306
                Anônimo

                  se vc quiser mesmo utilizar o type com check constraint, tente :

                  create table TESTE.TESTE
                  (
                  CODIGO NUMBER(10, 0) NOT NULL ,
                  CAMPO2 MEUTIPO check ( campo2 in (meutipo(‘S’),meutipo(‘N’))) )
                  tablespace TESTE
                  isso só permitira ‘S’ ou ‘N’ no campo

                  porém, veja o link
                  http://thinkoracle.blogspot.com/2005/07 … olean.html

                Visualizando 7 posts - 1 até 7 (de 7 do total)
                • Você deve fazer login para responder a este tópico.