এসকিউএল স্ট্রিং এম্পারস্যান্ড চরিত্রটি পালিয়ে যাচ্ছে


143

আমি আমার এসকিউএল ডাটাবেসে নাম দিয়ে একটি নির্দিষ্ট সারিটি জিজ্ঞাসা করার চেষ্টা করছি এবং এটিতে একটি অ্যাম্পারস্যান্ড রয়েছে। আমি একটি পালানোর চরিত্র সেট করার এবং তারপরে এম্পারস্যান্ড থেকে পালানোর চেষ্টা করেছি, তবে কোনও কারণে এটি কাজ করছে না এবং আমার সমস্যাটি ঠিক কী তা নিয়ে আমি অনিশ্চিত।

Set escape '\'
    select * from V1144engine.T_nodes where node_id in(
    select node2_id from V1144engine.T_edges where node1_id in(
    select node2_id from V1144engine.T_edges where node1_id in(
    select node2_id from V1144engine.T_edges where node1_id = 
      (select node_id from V1144engine.T_nodes where node_name = 'Geometric Vectors \& Matrices')))
    and edge_type_id = 1)
    and node_type_id = 1
    and node_id in (
    select node2_id from V1144engine.T_edges where node1_id =
      (select node_id from V1144engine.T_nodes where node_name = 'Algebra II')
    and edge_type_id = 2);

যদিও এই প্রশ্নের এই একই সমাধান রয়েছে , সমস্যাগুলি খুব আলাদাভাবে পোজ দেওয়া হয়েছে। তারা একই সমাধানটি শেষ করতে পারে তবে এর অর্থ এই নয় যে প্রশ্নগুলি একই।


আমি মনে করি না আপনি পলায়ন ('\') চরিত্রের চারপাশের উদ্ধৃতিটি প্রয়োজন
এমক্যালেক্স

29
set define offএটি করার সহজতম উপায়।
অ্যানবিস

উত্তর:


205

পরিবর্তে

node_name = 'Geometric Vectors \& Matrices'

ব্যবহার

node_name = 'Geometric Vectors ' || chr(38) || ' Matrices' 

38 এম্পারস্যান্ডের জন্য এসকি কোড, এবং এই ফর্মটিতে এটি স্ট্রিং হিসাবে ব্যাখ্যা করা হবে, অন্য কিছুই নয় nothing আমি এটা চেস্টা করেছিলাম এবং এটা কাজও করেছিল.

অন্য কোনও উপায়ে LIKE এবং এর পরিবর্তে '&' অক্ষরটি ব্যবহার করা যেতে পারে:

node_name LIKE 'Geometric Vectors _ Matrices' 

আপনি অন্য কিছু রেকর্ডও খুঁজে পাওয়ার সম্ভাবনা, যা কেবলমাত্র এই একটি চরিত্রের চেয়ে আলাদা, এটি বেশ কম।


45
অনিচ্ছুক পরিবর্তে chr(38), আপনি করতে পারেনnode_name = 'Geometric Vectors &' || ' Matrices'
জে সুলিভান

1
একইভাবে নিজেকে অন্যান্য দরিদ্র বিভ্রান্ত আত্মার, নোট জন্য এটি যে chr(38), না char(38)
xdhmoore

নোট করুন যে &মাইএসকিউএল এড়াতে হবে না। এছাড়াও মাইএসকিউএল এর ফাংশন নেই CHR()
asmaier

113

\ডিফল্টভাবে এস্কেপ সেট করা হয় , সুতরাং আপনার এটি সেট করার দরকার নেই; তবে আপনি যদি তা করেন তবে তা উদ্ধৃতিগুলিতে আবদ্ধ করবেন না।

আম্পারস্যান্ড হ'ল এসকিউএল * প্লাস সাবস্টিটিউশন ভেরিয়েবল মার্কার; তবে আপনি এটি পরিবর্তন করতে পারেন বা আরও কার্যকরভাবে আপনার ক্ষেত্রে এটি পুরোপুরি বন্ধ করে দিন:

set define off

তারপরে আপনার মানটি মোটেও এড়িয়ে চলার দরকার নেই।


2
অব্যাহতি অক্ষরটি\ ডিফল্ট হিসাবে সেট করা থাকে তবে বুলেয়ান প্যারামিটারটি ডিফল্টরূপে অফে escapeসেট করা থাকে। সুতরাং ওপিকে পলায়ন চরিত্রটি সেট করার প্রয়োজন হতে পারে না তবে তার পক্ষে কমপক্ষে এটির SET ESCAPE ONকাজ করতে হবে। বা, অবশ্যই, অন্য যে কোনও, ভাল সমাধান ব্যবহার করুন।
ম্যাথগুয়ে

46

তুমি ব্যবহার করতে পার

set define off

এটি ব্যবহার করে এটি ইনপুটটির জন্য প্রম্পট করবে না


32

সোজা ওরাকল এসকিএল ফান্ডামেন্টাল বই থেকে

SET DEFINE OFF
select 'Coda & Sid' from dual;
SET DEFINE ON

কোনও এটি নির্ধারণ না করে কীভাবে এড়াতে পারে।


2
সেট সংজ্ঞা চালু করা সহায়ক।
কেএসভ

@ রোমান সংজ্ঞা ছাড়াই আপনিও ব্যবহার করতে পারেন: দ্বৈত থেকে 'কোডা' 'এবং' সিড 'নির্বাচন করুন; (ডাবল একক উদ্ধৃতি)
এন্টকালভেন্ট

8

পালাতে &আপনি নিম্নলিখিত উপায়ে চেষ্টা করতে পারেন: -

  1. set scan off
  2. set define off
  3. set escape on তারপর প্রতিস্থাপন &দ্বারা/&
  4. &দ্বারা প্রতিস্থাপন&&

তাদের মধ্যে কমপক্ষে কাজ করা উচিত।

একজন dditionally যদি আপনি ব্যবহার করছেন PL / SQL বিকাশকারী তারপর আছে & আইকন SQL উইন্ডোর নীচে দয়া করে সেখানে গিয়ে নিষ্ক্রিয় এটা । পুরানো সংস্করণে নোট করুন এই বিকল্পটি উপস্থিত নেই।

এছাড়াও নিশ্চিত করুন যে সেটটি সংজ্ঞায়িত করা স্ক্রিপ্টের একেবারে শুরুতে লেখা আছে।


2

এটি পাশাপাশি কাজ করে:

select * from mde_product where cfn = 'A3D"&"R01'

আপনি &আক্ষরিক হিসাবে সংজ্ঞায়িত দ্বারা "&"স্ট্রিং মধ্যে ডাবল কিউয়েট হয়।


1
আপনি যদি এটি করেন তবে ডাবল-কোটগুলি স্ট্রিংয়ের অংশ হয়ে উঠবে, এর মতো:A3D"&"R01
ডেভিড বালেক

2
set escape on
... node_name = 'Geometric Vectors \& Matrices' ...

বা বিকল্পভাবে:

set define off
... node_name = 'Geometric Vectors & Matrices' ...

প্রথমটি আপনাকে & থেকে বাঁচতে ব্যাকস্ল্যাশ ব্যবহার করতে দেয়।

দ্বিতীয়টি & "বিশ্বব্যাপী" বন্ধ করে দেয় (কোথাও ব্যাকস্ল্যাশ যুক্ত করার দরকার নেই)। আপনি এটিকে আবার চালু করতে পারেন set define onএবং সেই লাইন থেকে এম্পারস্যান্ডগুলিতে তাদের বিশেষ অর্থ ফিরে পাবেন, তাই আপনি এটিকে স্ক্রিপ্টের কিছু অংশের জন্য বন্ধ করতে পারেন অন্যের জন্য নয়।



0

একটি INSERT এর মধ্যে "&" সন্ধান এবং প্রতিস্থাপনে সহায়তা করার জন্য আমি একটি রেইজেক্স লিখেছিলাম, আমি আশা করি এটি কারও সাহায্য করবে।

কৌতুকটি নিশ্চিত করা ছিল যে "&" অন্যান্য পাঠ্যের সাথে রয়েছে।

অনুসন্ধান “(\'[^\']*(?=\&))(\&)([^\']*\')”

প্রতিস্থাপন করা “$1' || chr(38) || '$3”

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.