Conjunto de comandos DDL

Scripts Diversos para o Oracle SQL*Plus. (Relacionado a ferramenta Oracle SQL*Plus, para questões de SQL, usar o forum SQL)
Responder
rogers
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 7
Registrado em: Sáb, 14 Mai 2005 3:04 pm
Localização: RJ

Sou novo membro do forum e estou com uma dúvida.
Abri o edit do sql plus e escrevi o seguinte script :

Selecionar tudo

BEGIN

CREATE TABLE EVENTO_TIPODOC (
	COD_TIPODOC NUMBER NOT NULL ,
	TIPO_EVENTO NUMBER NOT NULL ,
	COD_MACRO NUMBER NOT NULL 
) ;


ALTER TABLE EVENTO_TIPODOC ADD 
CONSTRAINT PK_EVENTO_TIPODOC PRIMARY KEY 
( COD_TIPODOC ) ;

ALTER TABLE EVENTO_TIPODOC 
ADD CONSTRAINT FK_EVENTO_TIPODOC_TIPO_DOC FOREIGN KEY 
	( COD_TIPODOC ) REFERENCES TIPO_DOC ( COD_TIPODOC ); 

ALTER TABLE EVENTO_TIPODOC 
ADD CONSTRAINT FK_EVENTO_TIPODOC_MACRO FOREIGN KEY 
	( COD_MACRO ) REFERENCES MACRO ( COD_MACRO ); 

END;

/
Quando tentei executar levei o seguinte erro :

Selecionar tudo

CREATE TABLE EVENTO_TIPODOC (
*
ERRO na linha 2:
ORA-06550: line 2, column 1:
PLS-00103: Encountered the symbol "CREATE" when expecting one of the following:
begin case declare exit for goto if loop mod null pragma
raise return select update while with <an identifier>
<a double-quoted delimited-identifier> <a bind variable> <<
close current delete fetch lock insert open rollback
savepoint set sql execute commit forall merge
<a single-quoted SQL string> pipe
Não há como executar um conjunto de comandos DDL pelo edit do sql plus ? Sei que se eu criar um arquivo com o script sem o begin / end; e fazer um @arquivo, o script é executado.

Desculpe-me se for uma dúvida muito básica. Obrigado pela ajuda desde já.
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Tira o BEGIN no início e o END no fim e manda bala!!!

:-)
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Quando tem BEGIN e END, o sql*Plus trata como se fosse um bloco de PL/SQL. E você não pode rodar comandos DDL diretamente em PL/SQL.

Para executar comandos ddl em PL/SQL tem que usar EXECUTE IMMEDIATE. Aí vai um exemplo:

Selecionar tudo

SQL> begin
  2     execute immediate('create table a (a number(1))');
  3  end;
  4  /

PL/SQL procedure successfully completed.

Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 16 visitantes