Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

THEBRANCO

[Resolvido] Procedure não compila !

Recommended Posts

Ola pessoal eu sou meio leigo em oracle.. e gostaria de uma ajudinha d vcs.

Criei um tablespace no meu bando de dados e gostaria de mover as tabelas do tablespace antigo para este novo..

 

estou tentando criar uma procedure que faz isso pra mim, mas ela não esta compilando..

o erro é o seguinte:

Compilation errors for PROCEDURE BRANCO.MUDA_TABLESPACE

Error: PLS-00103: Encontrado o símbolo "ALTER" quando um dos seguintes símbolos era esperado:

 

begin case declare end exit for goto if loop mod null pragma

raise return select update while with <um identificador>

<um identificador delimitado por aspas duplas>

<uma variável de ligação> << close current delete fetch

lock insert open rollback savepoint set sql execute commit

forall merge pipe

Line: 10

Text: ALTER TABLE V_TABLE MOVE TABLESPACE TBS_BRANCO;

 

CREATE OR REPLACE PROCEDURE MUDA_TABLESPACE
IS 
V_TABELA VARCHAR2(30);
CURSOR CUR_TAB IS SELECT TABLE_NAME FROM USER_TABLES;
begin
  OPEN CUR_TAB;
    LOOP
      FETCH CUR_TAB INTO V_TABELA;
       DBMS_OUTPUT.put_line(V_TABELA);        
        ALTER TABLE V_TABLE MOVE TABLESPACE TBS_BRANCO;
      EXIT WHEN CUR_TAB%NOTFOUND;
    END LOOP;
  CLOSE CUR_TAB;    
end MUDA_TABLESPACE;

Grato

 

Branco

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara,

Utilize o execute immediate no comando alter. Aqui compilou desta maneira, aí precisa testar para ver se o resultado é atingido:

 

CREATE OR REPLACE PROCEDURE MUDA_TABLESPACE IS

V_TABELA VARCHAR2(30);

CURSOR CUR_TAB IS

SELECT TABLE_NAME

FROM USER_TABLES;

 

begin

OPEN CUR_TAB;

LOOP

FETCH CUR_TAB INTO V_TABELA;

DBMS_OUTPUT.put_line(V_TABELA);

execute immediate 'ALTER TABLE :V_TABLE MOVE TABLESPACE TBS_BRANCO' using in v_tabela;

EXIT WHEN CUR_TAB%NOTFOUND;

END LOOP;

CLOSE CUR_TAB;

end MUDA_TABLESPACE;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Comandos de DDL (Data Definition Language) não são suportados diretamente em PLSQL para isto use, como disse o cadurubeuiro13, o EXECUTE IMMEDIATE.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom pessoal ao procedure compilou..porem num ta dando certo quando eu executo ela da o seguinte erro:

JB/SQL version 1.0.2.8

Connected to:

Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production

SQL> execute muda_tablespace;

execute muda_tablespace

*

ORA-00903: nome de tabela inválido

ORA-06512: em "BRANCO.MUDA_TABLESPACE", line 11

ORA-06512: em line 1

 

OLEO_DIESEL

SQL>

 

O QUE PODE SER ?

 

gRATO

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei a síntaxe exta mas uma SP não é a melhor forma de fazer isto.

 

Use um programa gerenciador do Oracle para fazer isto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei a síntaxe exta mas uma SP não é a melhor forma de fazer isto.

 

Use um programa gerenciador do Oracle para fazer isto.

 

 

 

ok Motta vou fazer isso, por enquanto mto obrigado pela ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.