- Este tópico contém 6 respostas, 3 vozes e foi atualizado pela última vez 16 anos, 10 meses atrás por
Anônimo.
-
AutorPosts
-
12 de fevereiro de 2009 às 4:40 pm #85279
thianolima
ParticipanteOla 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 attributAlguem pode me ajudar???? [/code]
12 de fevereiro de 2009 às 5:17 pm #85282Anônimo
dá uma olhada nesse link, tem uns exemplos.
12 de fevereiro de 2009 às 5:57 pm #85286rerodrig
ParticipanteCara, 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
12 de fevereiro de 2009 às 6:01 pm #85288thianolima
ParticipanteOpa 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?
12 de fevereiro de 2009 às 7:47 pm #85295Anô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)
1MEUTIPO(‘testando’)
2MEUTIPO(‘S’)
3MEUTIPO(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)
1MEUTIPO(‘testando’)
2MEUTIPO(‘S’)
3MEUTIPO(NULL)
CODIGO
CAMPO2(TIPOCAMPO)
4MEUTIPO(‘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 …
12 de fevereiro de 2009 às 11:27 pm #85301thianolima
ParticipanteDesa 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
13 de fevereiro de 2009 às 4:36 pm #85306Anô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 campoporém, veja o link
http://thinkoracle.blogspot.com/2005/07 … olean.html -
AutorPosts
- Você deve fazer login para responder a este tópico.