Oracle 报价在plsql中没有正确终止

Oracle 报价在plsql中没有正确终止,oracle,plsql,oracle11g,Oracle,Plsql,Oracle11g,我正在学习plsql“立即执行”。因此,对于普通查询,它是使用以下语句传递的: query:='SELECT * FROM TABLE_NAME'; execute immediate query; 但是我想在查询字符串中传递游标值。但是我想知道如何以正确的方式给出倒逗号。我试着这样做: declare query long; cursor cur is select a_name from ot.a; begin for i in cur query='select * from ot.ci

我正在学习plsql“立即执行”。因此,对于普通查询,它是使用以下语句传递的:

query:='SELECT * FROM TABLE_NAME';
execute immediate query;
但是我想在查询字符串中传递游标值。但是我想知道如何以正确的方式给出倒逗号。我试着这样做:

declare
query long;
cursor cur is
select a_name from ot.a;
begin
for i in cur
query='select * from ot.city  b where '||i.a_name||'=''kathmandu'';
EXECUTE IMMEDIATW query;
loop
dbms_output.put_line(i.a_name);
end loop;
end;
/
Error at line 1
ORA-01756: quoted string not properly terminated
但它给了我这样的错误:

declare
query long;
cursor cur is
select a_name from ot.a;
begin
for i in cur
query='select * from ot.city  b where '||i.a_name||'=''kathmandu'';
EXECUTE IMMEDIATW query;
loop
dbms_output.put_line(i.a_name);
end loop;
end;
/
Error at line 1
ORA-01756: quoted string not properly terminated

什么是正确的方式给倒逗号?我知道我用倒逗号弄错了,但正确的方法是什么?

我想这是这行应该是什么样子的

query='select * from ot.city b where '||i.a_name||'='' || kathmandu || ''';
这只是行末尾缺少一个撇号,而不是

query='select * from ot.city  b where '||i.a_name||'=''kathmandu'';
把这个

query='select * from ot.city b where ' || i.a_name || '=''kathmandu'';';

首先,如果是
SELECT
query,则需要在
executeimmediate
中使用
INTO
子句

其次,循环的
不正确。
它应该如下所示(
executeimmediate
应该在循环中)

对于缺少的单引号,请使用以下查询:

query='select * from ot.city b where '
       || i.a_name 
       || '=''kathmandu''' ; --Only last single quote was missing.
你的逻辑一点也不清楚。为什么需要使用
executeimmediate
执行查询。循环中不使用返回的数据

如果答案或评论不是您需要的,请编辑


干杯

加德满都之后需要三个单引号。前两个将转换为单个引号(SQL查询文本中需要)。第三个单引号实际上终止了您的查询(构成查询的带引号的字符串)。您能给我举个例子吗?它仍不工作执行即时查询?这是正确的吗?应该执行即时查询@“不工作”?以什么方式?我想你现在遇到了不同的错误?那么,你有不同的问题吗?@Randomguy抱歉,我在我的DB上构建了一个错误的测试用例。这应该可以从ot.city b中选择“select*”,其中“| | | | | | | |”从dual中选择“''| | | | |”=''”,但仅当加德满都是表名时。如果这是一个字符串值,那么您应该说下面的select“select*from ot.city b,其中“| | i.a| U name | | |”=”加德满都“”,其主要思想是2个撇号将在字符串中添加1个撇号您在带引号的字符串中添加了连接运算符。OP的尝试虽然不正确,但比你的尝试要好。由于该原因被否决。
execute immediate
中的查询字符串不应以分号(;)结尾。出于这个原因,你投了反对票,但最好删除你的答案,因为它是100%错误的。