Цитата неправильно завершена в PLSQL - PullRequest
0 голосов
/ 04 февраля 2020

Я учусь pl sql «ВЫПОЛНИТЬ НЕМЕДЛЕННО». Таким образом, для нормального запроса он передается с помощью объявления:

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

Как правильно поставить кавычки? Я знаю, что допустил ошибку в кавычках, но как правильно?

Ответы [ 3 ]

1 голос
/ 04 февраля 2020

Прежде всего, вам понадобится предложение INTO в EXECUTE IMMEDIATE, если это запрос SELECT.

Во-вторых, ваш FOR loop неверен. Это должно быть следующим образом (execute immediate должно быть внутри l oop)

for i in cur
Loop
..
..
End loop

Для пропущенных одинарных кавычек используйте следующий запрос:

query='select * from ot.city b where '
       || i.a_name 
       || '=''kathmandu''' ; --Only last single quote was missing.

Ваш лог c не совсем понятно. Почему вам нужно выполнить запрос, используя EXECUTE IMMEDIATE. В l oop использование возвращенных данных не используется.

Пожалуйста, измените ответ или комментарий, если это не то, что вам нужно.

Приветствия !!

0 голосов
/ 04 февраля 2020

вместо

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

поставить это

query='select * from ot.city b where ' || i.a_name || '=''kathmandu'';';
0 голосов
/ 04 февраля 2020

Я думаю, что именно так должна выглядеть строка

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

Просто один апостроф отсутствует в конце строки

...