Re: [oracle_br] Dúvida em drop / create

2019-04-18 Por tôpico Ricardo Ferro rfe...@gmail.com [oracle_br]
Leandro,

basta acrescentar uma barra ( / ) no final do bloco anônimo que vai
funcionar.

BEGIN
EXECUTE IMMEDIATE 'DROP TABLE BDD.TESTE';
EXCEPTION
WHEN OTHERS THEN NULL;
END;
*/*
(...)



Ricardo Ferro
Olinda PE
rfe...@gmail.com


Em qui, 18 de abr de 2019 às 17:20, Leandro Valiengo
leandro_valie...@yahoo.com.br [oracle_br] 
escreveu:

>
>
> Prezados,
> boa tarde.
>
> Estou tendo seguinte erro no script:
>
> BEGIN
> EXECUTE IMMEDIATE 'DROP TABLE BDD.TESTE';
> EXCEPTION
> WHEN OTHERS THEN NULL;
> END;
>
> CREATE TABLE BDD.TESTE (
> .
> .
> .
> );
>
> COMMENT ON TABLE BDD.TESTE IS 'Tabela bla bla bla';
>
> COMMENT ON TABLE BDD.TESTE IS 'Tabela bla bla bla';
> Relatório de erros -
> ORA-06550: linha 7, coluna 1:
> PLS-00103: Encountered the symbol "CREATE"
> 06550. 0 -  "line %s, column %s:\n%s"
> *Cause:Usually a PL/SQL compilation error.
> *Action:
>
> abs,
> Leandro
>
>
>


RES: [oracle_br] Re: Ajuda

2012-07-11 Por tôpico Ricardo Ferro | Vitarella
Oi Aninha,

 

Via sqlplus podes fazer assim:

 

column res new_value max_val 

SELECT MAX(ID_PK) + 1 res 

FROM   sua_tabela; 

 

drop sequence seq_sua_tabela ; 

create sequence seq_sua_tabela start with max_val;

 

 

Ricardo Ferro

www.vitarella.com.br

  mailto:rfe...@vitarella.com.br 

-Mensagem original-
De: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] Em nome 
de Ana Cássia Japiassu Diniz
Enviada em: quarta-feira, 11 de julho de 2012 14:58
Para: oracle_br@yahoogrupos.com.br
Assunto: Re: [oracle_br] Re: Ajuda

 

Obrigada a todos pela ajuda.

 

Consegui fazer praticamente toda a alteração que preciso. Falta apenas a 
criação da sequence para esta tabela, cujo o valor inicial deverá ser o último 
valor do novo atributo adicionado na tabela.

Como eu posso definir o start with da sequence com este valor?

Não posso colocar isso fixo, pois esta alteração precisarei fazer em três 
bancos que contêm dados diferentes.

 

Muito obrigada.

 

Ana

Em 11 de julho de 2012 14:13, J. Laurindo Chiappa

jlchia...@yahoo.com.br mailto:jlchia...@yahoo.com.br escreveu:

 

 **

 

 

 Bom dia, Ana - não vejo grandes problemas, mas vc deverá saber que :

 

 a) no RDBMS Oracle vc normalmente não consegue mudar a PK, então ela 

 tem que ser dropada e recriada com o novo atributo que vc quer : 

 Obviamente, então, se essa PK a ser alterada é usada como origem para 

 FK de outras tabelas, logicamente vc deverá dropar as FKs primeiro 

 (quebrando o uso da PK como pai), e depois da nova PK criada, vc vai 

 ter que recriar as FKs, apontando para a nova PK Obviamente 

 também, se a PK vai ser em cima de uma nova coluna, essa nova coluna 

 tem que ser Adicionada não só na tabela-pai MAS também nas 

 tabelas-filhas, para servir de base para a nova FK referenciando a 

 nova PK... É muito, muito frequente o pessoal se esquecer deste 

 Importante detalhe e se dar mal na hora da implementação por causa das FKs..

 

 b) vc até poderia, ao menos em parte, fazer via DBMS_REDEFINITION, mas 

 imho é mais fácil/direto executar os comandos manualmente, e também já 

 que vc quer a maneira mais segura, eu Recomendaria que vc solicitasse 

 uma janela de manutenção, em que o banco estará inacessível para vc 

 poder fazer as alterações todas sem se preocupar com locks eventuais, 

 acessos de usuário, dados sendo entrados/alterados/removidos, etc...

 

 c) como é Normal em qquer alteração, vc Tem que Ter um backup o mais 

 recente possível, Válido e testado, antes de proceder : muitas vezes 

 se agenda alterações do tipo para depois da janela de backup 

 Exatamente por esse motivo...

 

 Isto posto, um exemplo rápido - apenas notando que vc infelizmente Não 

 nos Dá a versão, então estou supondo ao menos versão 10gr2 :

 

 = criação de tabela com PK e de algumas FKs que a referenciam :

 

 SYSTEM@O10GR2::SQLcreate table T_PAI (c1 number, c2 varchar2(40), c3

 varchar2(80) );

 

 Tabela criada.

 

 SYSTEM@O10GR2::SQLalter table T_PAI add constraint T_PAI_PK primary 

 key (c1, c2);

 

 Tabela alterada.

 

 SYSTEM@O10GR2::SQLinsert into T_PAI values(1, 'Chave 1', 'Linha 1');

 

 1 linha criada.

 

 SYSTEM@O10GR2::SQLinsert into T_PAI values(2, 'Chave 2', 'Linha 2');

 

 1 linha criada.

 

 SYSTEM@O10GR2::SQLcreate table T_FILHA1 (c1 number, c2 varchar2(40), 

 c3

 varchar2(80) );

 

 Tabela criada.

 

 SYSTEM@O10GR2::SQLcreate table T_FILHA2 (c1 number, c2 varchar2(40), 

 c3

 varchar2(80) );

 

 Tabela criada.

 

 SYSTEM@O10GR2::SQLalter table T_FILHA1 add constraint T_FILHA1_FK 

 foreign key (c1, c2) references T_PAI(c1, c2);

 

 Tabela alterada.

 

 SYSTEM@O10GR2::SQLalter table T_FILHA2 add constraint T_FILHA2_FK 

 foreign key (c1, c2) references T_PAI(c1, c2);

 

 Tabela alterada.

 

 SYSTEM@O10GR2::SQLinsert into T_FILHA1 values(1, 'Chave 1', 'Filha 

 1');

 

 1 linha criada.

 

 SYSTEM@O10GR2::SQLinsert into T_FILHA2 values(2, 'Chave 2', 'Filha 

 2');

 

 1 linha criada.

 

 SYSTEM@O10GR2::SQLcommit;

 

 Commit concluido.

 

 == veja que Não Posso dropar PK usada por FKs :

 

 SYSTEM@O10GR2::SQLalter table T_PAI drop constraint T_PAI_PK; alter 

 table T_PAI drop constraint T_PAI_PK

 *

 ERRO na linha 1:

 ORA-02273: esta chave exclusiva/primaria e referenciada por algumas 

 chaves externas

 

 = vou então listar as FKs, já gerando os comandos de drop que eu só 

 copio  colo :

 

 SYSTEM@O10GR2::SQLselect 'alter table ' || table_name || ' drop 

 constraint ' || constraint_name || ';' from dba_constraints where 

 owner='SYSTEM' and r_constraint_name='T_PAI_PK';

 

 'ALTERTABLE'||TABLE_NAME||'DROPCONSTRAINT'||CONSTRAINT_NAME||';'

 --

 alter table T_FILHA1 drop constraint T_FILHA1_FK; alter table T_FILHA2 

 drop constraint T_FILHA2_FK;

 

 = o copy/paste em ação :

 

 SYSTEM@O10GR2::SQLalter table T_FILHA1 drop constraint T_FILHA1_FK;

 

 Tabela alterada.

 

 SYSTEM@O10GR2

RES: [oracle_br] Automatização geração de relatórios

2011-05-12 Por tôpico Ricardo Ferro
Cristiano,

 

Você colocou ponto e virgula (;) depois do select?

Também é necessário colocar um exit depois do spool off.

 

Sem ser via crontab você já executou manualmente para validar seu funcionamento?

# /bin/su - oracle -c sqlplus usuario/senha @/home/oracle/usr_criacao.sql  
/var/tmp/usr_criacao.log1



Atenciosamente

 

Ricardo Ferro

Administrador de Banco de Dados

Vitarella - Ind. de Alimentos Bomgosto Ltda.

Fone: (81) 3464.0149

E-mail: rfe...@vitarella.com.br mailto:rfe...@vitarella.com.br 

 

De: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] Em nome 
de Cristiano Vasconcelos
Enviada em: quinta-feira, 12 de maio de 2011 09:03
Para: GPOracle; Grupo OraOracle; José Laurindo Chiappa; Lista de Usuários 
Oracle; Mosán Santos; Oracle in Brazil; Oracle Tools; oracle_br_docs; 
oracle_fasttrack; Uncleoracle
Assunto: [oracle_br] Automatização geração de relatórios

 

  

Caros amigos,

CENÁRIO:
S.O. - Enterprise Linux Enterprise Linux AS release 4 (October Update 7)
Linux servidor.dominio.istancia.local 2.6.9-78.0.0.0.1.ELsmp #1
SMP Fri Jul 25 16:04:35 EDT 2008 x86_64 x86_64 x86_64 GNU/Linux

DB - Oracle Database 10g Release 10.2.0.3.0 - 64bit Production

CASO:
Estou precisando automatizar geração diariá de informações em arquivo texto,
onde na nomenclatura do arquivo gerado tenha nomearq_ddmmyy:hhmm.txt. Este
arquivo após ser gerado é copiado do servidor da DB para uma outra máquina e
jogado em uma área de ftp. Pois bem, este procedimento atualmente está sendo
feito manualmente, então gostaria de saber como poderia ser feito
automaticamente em determinada hora do dia sem que seja preciso intervir.

Estou em duvida de como proceder em relação a automatização da cópia a ser
realizada pelo servidor e principalmente em relação a geração do arquivo
.TXT no oracle: O procedimento pode ser feito pelo Scheduler Job do
oracle, ou poderá ser feito pela Cron do S.O. Linux disparando um shell de
conexão com SQL*Plus chamando um SCRIPT com a estrutura de SELECT a qual
gerará as informações necessárias ???.

Caso alguns dos amigos possuam essa estrutura, favor repassá-la com
instruções.

Em sugestão dadas por alguns colaboradores dos grupos, implementei a rotina
abaixo descrita na cron do linux:

##
# CRONTAB
#
# Data: 12/05/2011
##
#
53 08 12 5 4 /bin/su - oracle -c sqlplus usuario/senha
@/home/oracle/usr_criacao.sql  /var/tmp/usr_criacao.log1

Onde 15 significa: aos 15 minustos
Onde 14 significa: às 14 horas
Onde 11 significa: dia 11 do mês
Onde 5 significa: Mês 5
Onde 3 significa: Quarta-feira
Onde oracle -c significa: rodar a linha de comando após conectar usuário
oracle

Conteudo do Script:

REM Script Teste:usr_criacao.sql

spool /home/oracle/usr_criacao.txt

SELECT u.name,
D.ACCOUNT_STATUS,
D.LOCK_DATE,
TO_CHAR (u.ctime, 'dd/mm/ hh24:mi:ss') AS Criao,
TO_CHAR (u.ptime, 'dd/mm/ hh24:mi:ss') AS Modificacao
FROM sys.user$ u, dba_users d
WHERE u.name = d.username AND u.ctime = D.CREATED
AND d.created BETWEEN TO_DATE ('01/01/2009', 'dd/mm/yy')
AND TO_DATE ('31/12/2009', 'dd/mm/yy')
ORDER BY d.created

spool off

-- Saída de Log´s: ---

CENÁRIO 01

Log da rotina quando gerada pela Crontab:

# cat usr_criacao.log1

SQL*Plus: Release 10.2.0.3.0 - Production on Qui Mai 12 08:53:01 2011

Copyright (c) 1982, 2006, Oracle. All Rights Reserved.

Conectado a:
Oracle Database 10g Release 10.2.0.3.0 - 64bit Production

SQL Desconectado de Oracle Database 10g Release 10.2.0.3.0 - 64bit
Production

CENÁRIO 02

Rotina gerada sem ser pela Crontab, linha de comando executada no prompt
do sistema:

# /bin/su - oracle -c sqlplus usuario/senha @/home/oracle/usr_criacao.sql
 /var/tmp/usr_criacao.log

Log da rotina quando gerada sem ser pela Crontab:

# cat usr_criacao.log

SQL*Plus: Release 10.2.0.3.0 - Production on Qui Mai 12 08:24:42 2011

Copyright (c) 1982, 2006, Oracle. All Rights Reserved.

Conectado a:
Oracle Database 10g Release 10.2.0.3.0 - 64bit Production

SQL SQL

PERGUNTA ?

Diante dos dois cenários acima expostos, gostaria de saber o por que da não
geração das informações por parte do script, ONDE ESTÁ O ERRO, por que no
CENÁRIO 01 após a conexão ao sqlplus o script não é gerado e sim
desconectado do banco ???. Por que no CENÁRIO 02 é gerada essa saída
SQL SQL ficando a sessão ativa, como se estivesse gerando algo sem na
verdade gerar nada, tendo que ser derrubada para findar.

Aos amigos com maior experiência na plataforma, peço ajuda, acredito ser um
detalhe, só que QUAL ???

Mais uma vez AGRADEÇO A ATENÇÃO E AJUDA DISPENSADAS.

-- 
Cristiano Vasconcelos Barbosa .'.
Analista de Sistemas.

DEUS MEUMQUE JUS.'.
DÓMINI SUMUS.'.

[As partes desta mensagem que não continham texto foram removidas]





[As partes desta mensagem que não continham texto foram removidas]