Algumas instruções, como criar tabela, inserir no etc, levam um ponto e vírgula no final:
CREATE TABLE employees_demo
( employee_id NUMBER(6)
, first_name VARCHAR2(20)
, last_name VARCHAR2(25)
CONSTRAINT emp_last_name_nn_demo NOT NULL
) ;
enquanto outros gostam
set echo on
connect system/manager
passar sem o ponto e vírgula também.
Qual é o raciocínio por trás disso? Como posso decidir onde colocar o ponto-e-vírgula e onde não?
oracle
oracle-11g-r2
sqlplus
lazer
fonte
fonte
Respostas:
A execução da instância local na devolução. Comandos de várias linhas para o servidor são executados em ponto e vírgula
Comandos especiais, conforme detalhado no manual SQL * Plus, são os únicos que não aceitam ponto e vírgula. Onde os comandos SQL devem terminar com um
;
para serem analisados pelo servidor.fonte
Quando você está inserindo uma instrução SQL no SQL * Plus, ele precisa saber quando você termina, especialmente se o comando abrange várias linhas. Portanto, requer um caractere de caractere de terminal que pode ser definido com o
set sqlterminator
. Por padrão, esse caractere é o ponto e vírgula:Agora, alterando esse caractere de terminal para
#
:A instrução SQL foi finalizada (finalizada) com a
#
.Você pergunta: por que
set sqlterminator #
não foi seguido por um ponto e vírgula? Resposta, porque esta não é uma instrução SQL. As instruções relacionadas ao SQL * Plus e seu comportamento, saída e conexão asf (comoset echo on
econnect system/manager
) não são instruções SQL e, portanto, são inseridas sem o ponto e vírgula.O que isso tem a ver com o
/
?Quando você inseriu uma instrução SQL, o SQL * plus preencheu algo que chama de buffer. Este buffer pode ser mostrado com o
list
comando:(Nota: eu entrei apenas na lista , o restante é retornado)
O
/
agora executa o que está atualmente no buffer. Vamos tentar isso:Como pode ser visto, a mesma consulta é executada.
fonte
O ponto e vírgula é o ponto de sequência do analisador SQL, enquanto os comandos executados no SQL * Plus são executados imediatamente de qualquer maneira. Como analogia, compare os pontos e vírgulas em um programa C com os comandos inseridos no shell.
fonte
Pelo que entendi, o analisador SQL geral compartilha muito em comum com o analisador javascript geral, pois gostaria de um ponto-e-vírgula após cada local apropriado, mas não é necessário, exceto em determinadas circunstâncias. Quando fui ensinado a escrever SQL, disseram-me que um ponto e vírgula fazia parte da linguagem, e não um operador extra que poderíamos ignorar.
fonte