เครื่องหมายอัฒภาคในตอนท้ายของคำสั่ง SQL * Plus มีความสำคัญอย่างไร


16

คำสั่งบางอย่างเช่นสร้างตาราง, แทรกลงใน ฯลฯ ใช้เซมิโคลอนที่ท้าย:

CREATE TABLE employees_demo
    ( employee_id    NUMBER(6)
    , first_name     VARCHAR2(20)
    , last_name      VARCHAR2(25) 
         CONSTRAINT emp_last_name_nn_demo NOT NULL
    ) ;

ในขณะที่คนอื่นชอบ

set echo on
connect system/manager

ผ่านไปโดยไม่มีเครื่องหมายอัฒภาคเช่นกัน

อะไรคือเหตุผลเบื้องหลังสิ่งนี้ ฉันจะตัดสินใจเองได้อย่างไรว่าจะวางเซมิโคลอนไว้ที่ใด?


6
+1 เพื่อทำให้สับสนมากขึ้นคุณสามารถใช้ / บนบรรทัดต่อไปนี้แทน ในบางกรณี.
bernd_k

คำตอบ:


15

Commant to local instance จะส่งคืน คำสั่งหลายบรรทัดไปยังเซิร์ฟเวอร์ดำเนินการกับอัฒภาค

คำสั่งพิเศษตามรายละเอียดในคู่มือSQL * Plusเป็นคำสั่งเดียวที่ไม่ยอมรับเซมิโคลอน คำสั่ง SQL ของ Wheras ต้องลงท้ายด้วย a ;เพื่อแยกวิเคราะห์โดยเซิร์ฟเวอร์


เซมิโคลอนที่ท้ายคำสั่งเหมือนกับคำสั่ง GO ที่ท้ายคำสั่งที่เรียกใช้ใน OSQL / SQLCMD ในเซิร์ฟเวอร์ SQL เป็นเครื่องหมายที่คำสั่งจะถูกวิเคราะห์และดำเนินการ
Marian

7

เมื่อคุณป้อนคำสั่ง SQL ลงใน SQL * Plus มันจำเป็นต้องรู้เมื่อคุณทำเสร็จแล้วโดยเฉพาะอย่างยิ่งหากคำสั่งครอบคลุมหลายแถว ดังนั้นจึงต้องมีตัวละครที่ขั้วset sqlterminatorของตัวละครซึ่งสามารถตั้งค่าด้วย โดยค่าเริ่มต้นตัวละครนี้เป็นอัฒภาค:

SQL> select *
  2  from
  3  dual;

D
-
X

ตอนนี้การเปลี่ยนอักขระเทอร์มินัลนี้เป็น#:

SQL> set sqlterminator #
SQL> select *
  2  from
  3  dual#

D
-
X

คำสั่ง SQL ก็จบลง (สิ้นสุดการดำเนินการ) #ด้วย

คุณถามว่า: ทำไมset sqlterminator #ไม่ตามด้วยเครื่องหมายอัฒภาค? คำตอบเพราะนี่ไม่ใช่คำสั่ง SQL คำสั่งที่เกี่ยวข้องกับ SQL * Plus และพฤติกรรม, เอาต์พุต, การเชื่อมต่อ asf (เช่นset echo onและconnect system/manager) ไม่ใช่คำสั่ง SQL และถูกป้อนไว้ก่อนหน้าโดยไม่มีเครื่องหมายอัฒภาค

สิ่งนี้เกี่ยวข้องกับ/อะไร?

เมื่อคุณป้อนคำสั่ง SQL, SQL * plus จะเติมบางสิ่งที่เรียกว่าบัฟเฟอร์ บัฟเฟอร์นี้สามารถแสดงได้ด้วยlistคำสั่ง:

SQL> list
  1  select *
  2  from
  3* dual
SQL>

(หมายเหตุ: ฉันป้อนเฉพาะรายการที่เหลือจะถูกส่งคืน)

/ขณะนี้ดำเนินการในสิ่งที่เป็นอยู่ในปัจจุบันในบัฟเฟอร์ ลองดูสิ:

SQL> /

D
-
X

ที่สามารถเห็นได้แบบสอบถามเดียวกันจะถูกดำเนินการ


2

เครื่องหมายอัฒภาคคือ จุดลำดับสำหรับตัวแยกวิเคราะห์ SQL ในขณะที่คำสั่งที่ดำเนินการภายใน SQL * Plus จะดำเนินการทันที เป็นการเปรียบเทียบเปรียบเทียบอัฒภาคในโปรแกรม C กับคำสั่งที่ป้อนลงในเชลล์


0

วิธีที่ฉันเข้าใจก็คือตัวแยกวิเคราะห์ SQL ทั่วไปมีการใช้งานร่วมกันมากกับตัวแยกวิเคราะห์จาวาสคริปต์ทั่วไปซึ่งมันต้องการเซมิโคลอนหลังจากทุกตำแหน่งที่เหมาะสม แต่ไม่จำเป็นยกเว้นในบางสถานการณ์ เมื่อฉันถูกสอนให้เขียน SQL ฉันได้รับการบอกว่าอัฒภาคเป็นส่วนหนึ่งของภาษาไม่ใช่ตัวดำเนินการพิเศษที่เราสามารถเพิกเฉยได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.