ฉันจะหลีกเลี่ยงคำสงวนใน Oracle ได้อย่างไร


134

ใน TSQL ฉันสามารถใช้บางอย่างเช่นSelect [table] from tablenameเลือกคอลัมน์ชื่อ "table"

ฉันจะทำสิ่งนี้สำหรับคำสงวนใน oracle ได้อย่างไร

แก้ไข: ฉันได้ลองใช้เครื่องหมายวงเล็บเหลี่ยม, อัญประกาศคู่, เครื่องหมายคำพูดเดี่ยวและคำสั่งหลังแล้วไม่ได้ผล ...

เพื่อเป็นการชี้แจงเพิ่มเติมฉันมีคอลัมน์ที่มีคนแสดงความคิดเห็น เนื่องจากนี่เป็นคำสงวน oracle กำลังสั่นคลอนผู้ที่พยายามเลือกด้วยโคลงเคลงจึงล้มเหลวเมื่อแยกวิเคราะห์แบบสอบถาม ฉันได้ลองเลือก "ความคิดเห็น" จาก tablename แล้ว แต่ไม่ได้ผล ฉันจะตรวจสอบกรณีและกลับมา


คำตอบ:


200

จากการค้นหาอย่างรวดเร็ว Oracle ดูเหมือนจะใช้เครื่องหมายอัญประกาศคู่ ( "เช่น"table") และดูเหมือนว่าจะต้องใช้ตัวพิมพ์ที่ถูกต้อง - ในขณะที่ทุกคนที่สนใจ MySQL จะใช้ค่าเริ่มต้นเป็น backticks (`) ยกเว้นเมื่อตั้งค่าให้ใช้เครื่องหมายคำพูดคู่เพื่อความเข้ากันได้


2
ฉันทำให้คุณผิดหวังเพราะฉันพยายามหลีกเลี่ยงคำโดยใช้เครื่องหมายอัญประกาศคู่และมันไม่ได้ผล
Spence

14
โดยค่าเริ่มต้น Oracle จะยกระดับตัวระบุใด ๆ ดังนั้นหากคุณต้องการอักขระตัวพิมพ์เล็กหรืออักขระพิเศษหรือตัวระบุเป็นคำสงวนของ Oracle จำเป็นต้องใส่เครื่องหมายคำพูดคู่ เนื่องจากเครื่องหมายคำพูดคู่รักษาตัวพิมพ์เล็กและใหญ่ตัวระบุจึงต้องเป็นตัวพิมพ์ที่ถูกต้อง
เมโทร

ฉันสร้างตารางที่มีฟิลด์ "นามแฝง" โดยใช้ SQL Developer v4 กดฐานข้อมูล Oracle 11g Release 2 Express การเลือกของฉันใช้งานได้เมื่อฉันเขียน "ALIAS" แทนนามแฝง
Broken_Window

ไม่ทำงานสำหรับทริกเกอร์พยายามสร้างทริกเกอร์สำหรับตารางด้วยชื่อที่ละเมิด ORA-30507 (เช่น DATABASE)
Fleuv

1
ลองใช้ใน "TABLE" ตัวพิมพ์ใหญ่ทั้งหมด
RSHAP

34

โดยปกติ Oracle จะกำหนดให้มีเครื่องหมายอัญประกาศคู่เพื่อคั่นชื่อของตัวระบุในคำสั่ง SQL เช่น

SELECT "MyColumn" AS "MyColAlias"
FROM "MyTable" "Alias"
WHERE "ThisCol" = 'That Value';

อย่างไรก็ตามอนุญาตให้ละเว้นเครื่องหมายอัญประกาศคู่ได้อย่างสง่างามซึ่งในกรณีนี้จะแปลงตัวระบุเป็นตัวพิมพ์ใหญ่:

SELECT MyColumn AS MyColAlias
FROM MyTable Alias
WHERE ThisCol = 'That Value';

ได้รับการแปลงภายในเป็นสิ่งที่ต้องการ:

SELECT "ALIAS" . "MYCOLUMN" AS "MYCOLALIAS"
FROM "THEUSER" . "MYTABLE" "ALIAS"
WHERE "ALIAS" . "THISCOL" = 'That Value';

8

เครื่องหมายคำพูดคู่ทำงานใน oracle เมื่อฉันมีคำหลักเป็นหนึ่งในชื่อคอลัมน์

เช่น:

select t."size" from table t 

3

Oracle ใช้เครื่องหมายอัญประกาศคู่ แต่คุณมักจะต้องใส่ชื่อวัตถุเป็นตัวพิมพ์ใหญ่เช่น "TABLE" ตามค่าเริ่มต้นหากคุณสร้างวัตถุโดยไม่มีเครื่องหมายอัญประกาศคู่เช่น

CREATE TABLE table AS ...

Oracle จะสร้างวัตถุเป็นตัวพิมพ์ใหญ่ อย่างไรก็ตามการอ้างอิงไม่คำนึงถึงตัวพิมพ์เล็กและใหญ่เว้นแต่คุณจะใช้เครื่องหมายคำพูดคู่!


-8

คุณต้องเปลี่ยนชื่อคอลัมน์เป็นชื่ออื่นเนื่องจากTABLEOracle สงวนไว้

V$RESERVED_WORDSคุณสามารถดูคำลิขสิทธิ์ทั้งหมดของออราเคิลในมุมมองของออราเคิล


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