ฉันมีสคริปต์ SQL ที่สร้างแพ็คเกจพร้อมความคิดเห็นที่มีเครื่องหมายแอมเพอร์แซนด์ (&) เมื่อฉันเรียกใช้สคริปต์จาก SQL Plus ฉันได้รับแจ้งให้ป้อนค่าทดแทนสำหรับสตริงที่ขึ้นต้นด้วย & ฉันจะปิดใช้งานคุณลักษณะนี้เพื่อให้ SQL Plus ละเว้นเครื่องหมายและได้อย่างไร
ฉันมีสคริปต์ SQL ที่สร้างแพ็คเกจพร้อมความคิดเห็นที่มีเครื่องหมายแอมเพอร์แซนด์ (&) เมื่อฉันเรียกใช้สคริปต์จาก SQL Plus ฉันได้รับแจ้งให้ป้อนค่าทดแทนสำหรับสตริงที่ขึ้นต้นด้วย & ฉันจะปิดใช้งานคุณลักษณะนี้เพื่อให้ SQL Plus ละเว้นเครื่องหมายและได้อย่างไร
คำตอบ:
หากบางครั้งคุณใช้ตัวแปรทดแทนคุณอาจไม่ต้องการปิดการกำหนด ในกรณีนี้คุณสามารถแปลงเครื่องหมายจากเทียบเท่าเป็นตัวเลขที่เป็นในหรือผนวกว่ามันเป็นตัวเดียวกับใน|| Chr(38) ||
|| '&' ||
ฉันแก้ไขด้วยรหัสด้านล่าง:
set escape on
และใส่ \ ข้าง & ทางซ้าย 'value_\&_intert'
อ
comment on column tablename.columnname is 'war ' || chr(38) || ' peace'
ORA-01780: string literal required
คุณสามารถตั้งค่าอักขระพิเศษซึ่งมองหาเมื่อเรียกใช้สคริปต์เป็นค่าอื่นโดยใช้ SET DEFINE <1_CHARACTER>
โดยค่าเริ่มต้นฟังก์ชัน DEFINE จะเปิดอยู่และถูกตั้งค่าเป็น&
สามารถปิดได้ - ดังที่กล่าวไปแล้ว - แต่สามารถหลีกเลี่ยงได้เช่นกันโดยการตั้งค่าเป็นค่าอื่น ระวังสัญลักษณ์ที่คุณตั้งไว้ ในตัวอย่างด้านล่างฉันได้เลือกอักขระ # แต่ตัวเลือกนั้นเป็นเพียงตัวอย่างเท่านั้น
SQL> select '&var_ampersand #var_hash' from dual;
Enter value for var_ampersand: a value
'AVALUE#VAR_HASH'
-----------------
a value #var_hash
SQL> set define #
SQL> r
1* select '&var_ampersand #var_hash' from dual
Enter value for var_hash: another value
'&VAR_AMPERSANDANOTHERVALUE'
----------------------------
&var_ampersand another value
SQL>
set define off <- นี่คือทางออกที่ดีที่สุดที่ฉันพบ
ฉันยังลอง ...
set define}
ฉันสามารถแทรกระเบียนหลายรายการที่มีอักขระเครื่องหมาย & 'แต่ฉันไม่สามารถใช้อักขระ'} 'ในข้อความได้ดังนั้นฉันจึงตัดสินใจใช้ "set define off" และทุกอย่างทำงานได้ตามที่ควรจะเป็น
ตามคำถามที่พบบ่อยที่ดีนี้มีสองวิธีแก้ปัญหา
คุณอาจหลีกเลี่ยงเครื่องหมายแอมเพอร์แซนด์ด้วยอักขระแบ็กสแลช\
หากคุณสามารถแก้ไขความคิดเห็นได้
set escape on
ฉันมีคำสั่งกรณีที่มีคอลัมน์ WHEN = 'บางครั้งและข้อความเพิ่มเติม' แล้ว ....
ฉันแทนที่ด้วย WHEN column = 'sometext' || CHR (38) || 'ข้อความเพิ่มเติม' แล้ว ...
คุณยังสามารถใช้เมื่อคอลัมน์เช่น 'บางครั้ง _ ข้อความเพิ่มเติม' แล้ว ...
(_ เป็นสัญลักษณ์แทนสำหรับอักขระเดี่ยว)