Jump to content
Fivewin Brasil

Excluir um indice no SQLRDD , alguém já fez isso ?


Pablo.Softgraf

Recommended Posts

 

Não reconhece, por que quando o indice é criado , ele está sendo criado com a extensão do SQLSERVER, tem que ir na tabela de criação de indice , resgatar o IDXNAME_ , e deletar pelo PHIS_NAME_

 

Caro , Sistem.. o que seria a clausula ON no final da instrução  ?

DROP INDEX index_name ON tbl_name

Link to comment
Share on other sites

 

Senhores, boa tarde !

alguém já removeu algum index no SQLRDD ? foi criado com SET INDEX , criou normalmente, mas na hora de excluir, preciso exclui com o

mesmo nome que foi criado 

ex: "IND1"   no SQLRDD cria como "IND1_000001".

algum comando que exclua com o nome de criação . 

Pablo boa noite,

 

Uso Postgres e essa questão sempre foi uma briga minha com os índices, pq eu fazia uma bobagem de submeter o comando DBSETINDEX, após as aberturas das tabelas e este recriava os índices na tabela pg_index (veja view "SELECT * FROM PG_INDEXES "), então como vc sabe os índices da SQLRDD ficam na tabela SR_MGMNTINDEXES e uso as instruções abaixo pra manuseá-los:

Listar - SELECT * FROM SR_MGMNTINDEXES WHERE IDXNAME_ LIKE '%IND%' OR IDXNAME_ LIKE '%ind%' order by idxname_

Deletar - DELETE FROM SR_MGMNTINDEXES WHERE IDXNAME_ LIKE '%IND%' OR IDXNAME_ LIKE '%ind%'

Mas agora estou trabalhando em outra instrução pra eliminar também os índices da pg_index com a instrução abaixo, mas está dando erro de conteúdo de campos nulos, coisa que eu não tenho se elimino direto pelo PGADMIN e tento recriar os índices.

Listar - SELECT x.indEXrelid,
    x.indrelid,
    n.nspname AS schemaname,
    c.relname AS tablename,
    i.relname AS indexname,
    t.spcname AS tablespace,
    pg_get_indexdef(i.oid) AS indexdef
   FROM pg_index x
     JOIN pg_class c ON c.oid = x.indrelid
     JOIN pg_class i ON i.oid = x.indexrelid
     LEFT JOIN pg_namespace n ON n.oid = c.relnamespace
     LEFT JOIN pg_tablespace t ON t.oid = i.reltablespace
  WHERE (c.relkind = ANY (ARRAY['r'::"char", 'm'::"char"])) AND i.relkind = 'i'::"char" and i.relname like 'ind%' and c.relname='cadlote';

 

Deletar -

DELETE from pg_index where indEXrelid IN (

SELECT x.indEXrelid
   FROM pg_index x
     JOIN pg_class c ON c.oid = x.indrelid
     JOIN pg_class i ON i.oid = x.indexrelid
     LEFT JOIN pg_namespace n ON n.oid = c.relnamespace
     LEFT JOIN pg_tablespace t ON t.oid = i.reltablespace
  WHERE (c.relkind = ANY (ARRAY['r'::"char", 'm'::"char"])) AND i.relkind = 'i'::"char" and i.relname like 'ind%' and c.relname='cadlote')

Analise as instruções e tente adequar para o SGBD que vc usa.

 

[]s,

Link to comment
Share on other sites

Senhores, boa noite !

Agradeço muito a atenção de todos, por esta questão , o que eu fiz !

Fui diretamente na tabela do MNGINDEXES que o SQLRDD cria para controle dos mesmos, fiz um select na mesma com o nome de criação , 

e retornei o PHISNAME_ , e depois criei diretamente com o DROP INDEX tabela.indice_00000?? alguma coisa, sempre cria com esta extensão ,

resolvi o problema assim , mas vou dar uma olha SISTEM, no comando sugerido  Sr_dropindex(indexname) . interessante, espero que funcione.

Link to comment
Share on other sites

 

Senhores, boa noite !

Agradeço muito a atenção de todos, por esta questão , o que eu fiz !

Fui diretamente na tabela do MNGINDEXES que o SQLRDD cria para controle dos mesmos, fiz um select na mesma com o nome de criação , 

e retornei o PHISNAME_ , e depois criei diretamente com o DROP INDEX tabela.indice_00000?? alguma coisa, sempre cria com esta extensão ,

resolvi o problema assim , mas vou dar uma olha SISTEM, no comando sugerido  Sr_dropindex(indexname) . interessante, espero que funcione.

Foi justamente o que eu postei acima Paulo, bastava informar o PHISNAME_ nas instruções abaixo:

Listar - SELECT * FROM SR_MGMNTINDEXES WHERE IDXNAME_ LIKE '%IND%' OR IDXNAME_ LIKE '%ind%' order by idxname_

Deletar - DELETE FROM SR_MGMNTINDEXES WHERE IDXNAME_ LIKE '%IND%' OR IDXNAME_ LIKE '%ind%'

 

[]s,

Link to comment
Share on other sites

Meus amigos, bom dia !

Fiz através do comando SR_DROPINDEX, é bem mais prático !

Só tem um problema , se tento cria-lo novamente, ele dá um probleminha. 

    // SE EU COLOCAR ESTE TRECHO DE ABERTURA DENTRO DO FOR , ele não vai gerar o problema, sempre vai abrir e criar 

  // o índice , normalmente, agora, se deixar o NET_USE, for do loop. ele gera um erro de criação de índice, estranho né . pode ser 

// que esteja faltando alguma propriedade.

      select 0
       if !net_use(warqdel, .T., .F., 'arqdel')   // (.T.) ABRE EXCLUSIVO
          break
       endif
   
  
for x := 1 to 5
     If !SR_ExistIndex( "RECLPAR11" )
        index on CODCLI to "RECLPAR11"  
    endif  
    set index to RECLPAR11
    ? indexkey()
    arqdel->(dbAppend())
    arqdel->CODCLI := "CHARLIE"
    arqdel->(dbCommit())
    ? arqdel->CODCLI
    arqdel->(dbClearindex())
    if SR_DropIndex("RECLPAR11")
          ? "index deletada"
    endif
next

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...