อักขระหนี Oracle SQL (สำหรับ '&')


86

ในขณะที่พยายามเรียกใช้คำสั่งแทรก SQL โดยใช้Oracle SQL Developerฉันยังคงสร้างพร้อมต์ "ป้อนค่าการทดแทน":

insert into agregadores_agregadores 
(
 idagregador,
 nombre,
 url
) 
values 
(
 2,
 'Netvibes',
 'http://www.netvibes.com/subscribe.php?type=rss\&url='
);

ฉันได้พยายามหลีกเลี่ยงอักขระพิเศษในแบบสอบถามโดยใช้ '\' ด้านบน แต่ฉันยังไม่สามารถหลีกเลี่ยงเครื่องหมายและ '&' ทำให้เกิดการแทนที่สตริง

คำตอบ:


127

& เป็นค่าเริ่มต้นสำหรับ DEFINE ซึ่งอนุญาตให้คุณใช้ตัวแปรการทดแทน ฉันชอบที่จะปิดโดยใช้

ตั้งค่ากำหนดปิด

แล้วคุณจะไม่ต้องกังวลเกี่ยวกับการหลบหนีหรือ CHR (38)


60

|| chr(38) ||

โซลูชันนี้สมบูรณ์แบบ


2
สิ่งนี้จะทำให้งานเสร็จ แต่จะไม่ค่อยเกะกะเล็กน้อยเมื่อจัดการกับสตริงที่มีอยู่แล้ว
aglassman

สำหรับฉัน SET DEFINE OFF ไม่ทำงาน โซลูชันของคุณจะได้ผล ขอบคุณ ...
Ashok kumar

31

ตั้งค่าอักขระกำหนดเป็นอย่างอื่นที่ไม่ใช่ &

กำหนดค่า ~
สร้างตาราง blah (x varchar (20));
แทรกลงในค่า blah (x) ('blah & amp');
เลือก * จาก blah;

X                    
-------------------- 
blah & amp 


15
insert into AGREGADORES_AGREGADORES (IDAGREGADOR,NOMBRE,URL)
values (2,'Netvibes',
'http://www.netvibes.com/subscribe.php?type=rss' || chr(38) || 'amp;url=');

ขอบคุณ Jeffrey Kemp ที่ให้บริการแก้ปัญหาด้วย || chr (38) ||

นี่เป็นวิธีแก้ปัญหาทั่วไปที่ดีกว่ามากซึ่งไม่ขึ้นอยู่กับการกำหนดค่าของผู้ใช้ (กล่าวคือเมื่อผู้ใช้ไม่ได้รับอนุญาตให้ SET DEFINE OFF) และเมื่อผู้ใช้ต้องการระบุทั้งเครื่องหมายแอมเพอร์แซนด์ในข้อความและตัวแปรที่กำหนดไว้ในคำสั่ง SQL เดียวกัน
Fuzzy Analysis


4

select 'one'||'&'||'two' from dual


เครื่องหมายแอมเพอร์แซนด์ต้องอยู่ที่ส่วนท้ายของสตริงเท่านั้นซึ่งช่วยประหยัดการเชื่อมต่อกันได้ครึ่งหนึ่ง select 'one&' || 'two' from dual
เร็ต

1

คำตอบที่แท้จริงคือคุณต้องตั้งค่าอักขระหลีกเป็น '\': SET ESCAPE ON

ปัญหาอาจเกิดขึ้นเนื่องจากการ Escape ถูกปิดใช้งานหรืออักขระ Escape ถูกตั้งค่าเป็นอย่างอื่นที่ไม่ใช่ "\" ข้อความข้างต้นจะเปิดใช้งาน Escape และตั้งค่าเป็น "\"


ไม่มีคำตอบอื่นใดที่โพสต์ไว้ก่อนหน้านี้จริง ๆ แล้วตอบคำถามเดิม ทุกคนสามารถแก้ไขปัญหาได้ แต่ไม่สามารถแก้ไขได้


4
ฉันอ่านใน Ask Tom ( asktom.oracle.com/pls/asktom/… ) ว่า "SET ESCAPE is a sqplus'ism" ดังนั้นนี่จะเป็นคำตอบที่แท้จริงหากคำถามเกี่ยวกับ SQL * Plus
Karl Kieninger

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