Certaines instructions comme create table, insert into etc prennent un point-virgule à la fin:
CREATE TABLE employees_demo
( employee_id NUMBER(6)
, first_name VARCHAR2(20)
, last_name VARCHAR2(25)
CONSTRAINT emp_last_name_nn_demo NOT NULL
) ;
tandis que d'autres aiment
set echo on
connect system/manager
passer aussi sans le point-virgule.
Quel est le raisonnement derrière cela? Comment puis-je décider moi-même où mettre le point-virgule et où pas?
oracle
oracle-11g-r2
sqlplus
Lazer
la source
la source
Réponses:
Les commants de l'instance locale s'exécutent au retour. Les commandes multilignes au serveur s'exécutent sur le point-virgule
Les commandes spéciales décrites dans le manuel SQL * Plus sont les seules qui n'acceptent pas les points-virgules. Whereas Les commandes SQL doivent se terminer par un
;
afin d'être analysées par le serveur.la source
Lorsque vous saisissez une instruction SQL dans SQL * Plus, elle doit savoir quand vous en avez terminé, en particulier si la commande s'étend sur plusieurs lignes. Par conséquent, il nécessite un caractère de caractère terminal qui peut être défini avec le
set sqlterminator
. Par défaut, ce caractère est le point-virgule:Maintenant, changer ce caractère terminal en un
#
:L'instruction SQL s'est terminée (fin exécutée) par un
#
.Vous demandez: pourquoi n'a
set sqlterminator #
pas été suivi d'un point-virgule? Répondez, car ce n'est pas une instruction SQL. Les instructions qui se rapportent à SQL * Plus et à son comportement, à la sortie, à la connexion asf (commeset echo on
etconnect system/manager
) ne sont pas des instructions SQL et sont donc entrées sans le point-virgule.Qu'est-ce que cela a à voir avec le
/
?Lorsque vous avez entré une instruction SQL, SQL * plus a rempli ce qu'il appelle un tampon. Ce tampon peut être affiché avec la
list
commande:(Remarque: je n'ai entré que la liste , le reste est retourné)
L'
/
exécute maintenant ce qui est actuellement dans le tampon. Essayons cela:Comme on peut le voir, la même requête est exécutée.
la source
Le point-virgule est le point de séquence de l'analyseur SQL, tandis que les commandes qui sont exécutées dans SQL * Plus sont exécutées de toute façon immédiatement. Par analogie, comparez les points-virgules d'un programme C aux commandes entrées dans le shell.
la source
D'après ce que je comprends, l'analyseur SQL général partage beaucoup de points communs avec l'analyseur JavaScript général, en ce sens qu'il souhaiterait un point-virgule après chaque endroit approprié, mais ce n'est pas obligatoire, sauf dans certaines circonstances. Quand on m'a appris à écrire SQL, on m'a dit qu'un point-virgule faisait partie du langage, pas un opérateur supplémentaire que nous pouvions ignorer.
la source