Специални знаци на Oracle

Имам едно запитване

select * from table where name in ('52 T&M', '60 T&M');

„&“ кара заявката да очаква параметър. Как да квалифицирам "&" в заявката за ужилване, така че заявката да може да намери низ със знака "&" в тях?


person MikeTWebb    schedule 08.09.2010    source източник
comment
Свързани: stackoverflow.com/questions/118190/   -  person OMG Ponies    schedule 08.09.2010
comment
@ALL....грешно...това е в процедура на Oracle 10g. Не в SQL Server... съжалявам   -  person MikeTWebb    schedule 08.09.2010


Отговори (3)


Обикновено бих използвал set define off, както е предложено от omg, но също така е възможно да го направя така:

select *
from table
where name in ('52 T'||Chr(38)||'M', '60 T'||Chr(38)||'M');
person Adam Butler    schedule 08.09.2010

Амперсандът ("&") е знак, интерпретиран от SQLPlus като променлива заместител. Използвайте:

SET DEFINE OFF
person OMG Ponies    schedule 08.09.2010
comment
@OMG... къде в процедурата ще отиде този код? Както споменах по-долу, заявката е в КУРСОР, дефиниран преди BEGIN в процедурата - person MikeTWebb; 08.09.2010
comment
@MikeTVebb: В горната част на сценария. Обзалагам се, че това е анонимен PLSQL блок... - person OMG Ponies; 08.09.2010
comment
+1 Днес научих нещо ново! @MikeTWebb Това ще бъде първият ред на скрипта или там. Дали скриптът дефинира процедура, тяло на пакет или функция чрез CREATE OR REPLACE .... или скриптът съдържа анонимен PL/SQL блок. - person Shannon Severance; 09.09.2010
comment
Знаех за използването на амперсанд за дефиниране на подкани. Не знаех как да ги изключа. Използвах конкатенация на низове като решение. ('Foo&'||'Bar' за 'Foo&Bar') - person Shannon Severance; 09.09.2010

Предполагам, че използвате sqlplus, така че изпълнете преди

изключете сканирането

person Michael Pakhantsov    schedule 08.09.2010
comment
@Michael... низът на заявката се намира в дефиницията на КУРСОР. Опитах вашето предложение, но подозирам, че дефиницията на CURSOR го обърква - person MikeTWebb; 08.09.2010