powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Кавычки в execute immediate
22 сообщений из 22, страница 1 из 1
Кавычки в execute immediate
    #39675523
Synoptic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги, доброго всем!

Тупейшый вопрос, но он поставил меня в тупик. Прошу помощи.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
begin
execute immediate '
declare
cursor c1 is
   select user u1 from dual;
   i c1%rowtype;
begin
  for i in c1 loop
    dbms_output.put_line(i.u1);
  end loop;
end;';
end;


На выходе поучаем, например Вася.

А как вывести "Имя пользователя = Вася?
Ну т.е. как вставить такую конструкцию внутриexecute immediate ?
Код: plsql
1.
dbms_output.put_line('Имя пользователя = '||i.u1);



Перепробовал кучу вариантов, но правильного не нашёл...
...
Рейтинг: 0 / 0
Кавычки в execute immediate
    #39675530
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Synoptic,

Код: plsql
1.
2.
3.
4.
5.
select 'a' a, '''b' edge, 'a''b' middle  from dual


A	EDGE	MIDDLE
a	'b	a'b
...
Рейтинг: 0 / 0
Кавычки в execute immediate
    #39675532
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RTFM Text Literals (FAQ)

Synoptic
Код: plsql
1.
i c1%rowtype;

Код-мусор.
...
Рейтинг: 0 / 0
Кавычки в execute immediate
    #39675534
-gt-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SynopticКоллеги, доброго всем!

Тупейшый вопрос, но он поставил меня в тупик. Прошу помощи.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
begin
execute immediate '
declare
cursor c1 is
   select user u1 from dual;
   i c1%rowtype;
begin
  for i in c1 loop
    dbms_output.put_line(i.u1);
  end loop;
end;';
end;


На выходе поучаем, например Вася.

А как вывести "Имя пользователя = Вася?
Ну т.е. как вставить такую конструкцию внутриexecute immediate ?
Код: plsql
1.
dbms_output.put_line('Имя пользователя = '||i.u1);



Перепробовал кучу вариантов, но правильного не нашёл...

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SQL> begin
  2      execute immediate q'[
  3          begin
  4              dbms_output.put_line('Вася = ' || 1);
  5          end;]';
  6  end;
  7  /

Вася = 1

PL/SQL procedure successfully completed


SQL> 
...
Рейтинг: 0 / 0
Кавычки в execute immediate
    #39675554
Synoptic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximaXXLSynoptic,

Код: plsql
1.
2.
3.
4.
5.
select 'a' a, '''b' edge, 'a''b' middle  from dual


A	EDGE	MIDDLE
a	'b	a'b

Спасибо, но вопрос не в этом.

ElicКод-мусор.
Ещё хотел написать, чтобы не смотрели на курсор, ибо пример пустой и акцент на другом ))

Elic
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SQL> begin
  2      execute immediate q'[
  3          begin
  4              dbms_output.put_line('Вася = ' || 1);
  5          end;]';
  6  end;
  7  /

Вася = 1

PL/SQL procedure successfully completed


SQL> 

Спасибо огромное! Совсем забыл про оператор q
...
Рейтинг: 0 / 0
Кавычки в execute immediate
    #39675559
merch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SynopticСпасибо огромное! Совсем забыл про оператор q


Код: plsql
1.
2.
3.
4.
5.
set serveroutput on
begin
    execute immediate 'begin dbms_output.put_line(''Вася = '' || 1); end;';
end;
/
...
Рейтинг: 0 / 0
Кавычки в execute immediate
    #39675823
IMNO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicRTFM Text Literals (FAQ)

Synoptic
Код: plsql
1.
i c1%rowtype;

Код-мусор.

Если Вы имели ввиду название переменной, то согласен, что не круто.
Если Вы имели ввиду объявление переменной курсорного типа, то например в том же Ферштейне такое сплошь и рядом встречается в примерах. Я так никогда не писал, и удивился, когда увидел такое в авторитетной книге. Думал, что так не пишут, а тут вот оно что.
...
Рейтинг: 0 / 0
Кавычки в execute immediate
    #39675831
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IMNOЕсли Вы имели ввиду название переменной, то согласен, что не круто.
Он имел ввиду, что все объявление переменной "i" в данном случае - мусор, ибо не используется.
...
Рейтинг: 0 / 0
Кавычки в execute immediate
    #39675832
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IMNOЕсли Вы имели ввиду объявление переменной курсорного типа,Типа "запись". Не имеющее смысла.
IMNOто например в том же Ферштейне такое сплошь и рядом встречается в примерах. Я так никогда не писал, и удивился, когда увидел такое в авторитетной книге. Думал, что так не пишут, а тут вот оно что.Продемонстрируй цитатой с указанием источника, чтобы можно было убедиться, что ты не увидел в книге фигу.
...
Рейтинг: 0 / 0
Кавычки в execute immediate
    #39675848
IMNO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousIMNOЕсли Вы имели ввиду название переменной, то согласен, что не круто.
Он имел ввиду, что все объявление переменной "i" в данном случае - мусор, ибо не используется.

Ой. Недопонимание.

Я имею ввиду, что не понимаю этих "фишек" с переменными курсорного типа и вообще с явными курсорами.
То есть, например, я часто пользуюсь:
Код: plsql
1.
2.
a TableName%ROWTYPE
b TableName.ColumnName%TYPE


но зачем мне объявлять сначала явный курсор, а потом ещё переменную с типом этого курсора, когда я могу сделать так:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
FOR rec IN(SELECT c, d
           FROM TableName)
LOOP
...
n = rec.c;
m = rec.d;
...
END LOOP;


И кода меньше, и не надо постоянно скролить в начало пакета, чтобы посмотреть, что там в селекте написано.


Примеры из книги "Фейерштейн С., Прибыл Б. - Oracle PL-SQL для профессионалов." 6 издание

1.
Глава 5. Циклы
Подзаголовок "Примеры цикла FOR с курсором"
Страница 124

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
DECLARE
  CURSOR occupancy_cur IS
    SELECT pet_id, room_number
    FROM occupancy WHERE occupied_dt = TRUNC(SYSDATE);
    
    occupancy_rec occupancy_cur%ROWTYPE;
BEGIN
  OPEN occupancy_cur;
  
  LOOP
    FETCH occupancy_cur INTO occupancy_rec;
    
    EXIT WHEN occupancy_cur%NOTFOUND;
    
    update_bill(occupancy_rec.pet_id, occupancy_rec.room_number);
  END LOOP;
 
  CLOSE occupancy_cur;
END;



2.
Глава 7. Работа с данными в программах
Подзаголовок "Привязка к курсорам и таблицам"
Страница 176

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
DECLARE
  CURSOR book_cur IS
    SELECT author, title FROM book
    WHERE isbn = '1-56592-335-9';
    
    l_book book_cur%ROWTYPE;
BEGIN
  OPEN book_cur;
  FETCH book_cur INTO l_book; 
END;
...
Рейтинг: 0 / 0
Кавычки в execute immediate
    #39675852
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IMNOОй. Недопонимание.
Я имею ввиду, что не понимаю этих "фишек" с переменными курсорного типа и вообще с явными курсорами.

Когда дойдете - поймете.
К примеру, без объявления типа record и коллекции на его основе будет достаточно сложно реализовать конструкции вида fetch-bulk collect-limit (с возможным последующим переходом в forall) или pipe row() для конвейерной функции-фильтра.

Что до книжки, то уважаемый г-н Ферштейн в своем учебном пособии демонстрирует Вам возможности языка, а не единственно-верный-потому-что-истинный (с) подход.
...
Рейтинг: 0 / 0
Кавычки в execute immediate
    #39675855
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IMNOс переменными курсорного типа и вообще с явными курсорами.
...переменную с типом этого курсора...
Вы бы это... разобрались кто на ком стоял... "переменная с типом курсора"
...
Рейтинг: 0 / 0
Кавычки в execute immediate
    #39675960
Synoptic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IMNOЕсли Вы имели ввиду название переменной, то согласен, что не круто.
Если Вы имели ввиду объявление переменной курсорного типа, то например в том же Ферштейне такое сплошь и рядом встречается в примерах. Я так никогда не писал, и удивился, когда увидел такое в авторитетной книге. Думал, что так не пишут, а тут вот оно что.
Имя переменной - от балды, т.к. вопрос был в другом.

IMNOЯ имею ввиду, что не понимаю этих "фишек" с переменными курсорного типа и вообще с явными курсорами.
То есть, например, я часто пользуюсь:
Код: plsql
1.
2.
a TableName%ROWTYPE
b TableName.ColumnName%TYPE


но зачем мне объявлять сначала явный курсор, а потом ещё переменную с типом этого курсора, когда я могу сделать так:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
FOR rec IN(SELECT c, d
           FROM TableName)
LOOP
...
n = rec.c;
m = rec.d;
...
END LOOP;


И кода меньше, и не надо постоянно скролить в начало пакета, чтобы посмотреть, что там в селекте написано.

Когда запросы на пару экранов, вынесение его в курсор как раз таки улучшает читаемость кода.
...
Рейтинг: 0 / 0
Кавычки в execute immediate
    #39675978
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SynopticКогда запросы на пару экранов, вынесение его в курсор как раз таки улучшает читаемость кода.Во-первых, ты, невежда, имеешь наглость критиковать, не понимая, что критикуешь.
Во-вторых, пару экранов - это само по себе плохо и нет разницы, где они мылят глаз.
В-третьих, да, явные курсоры - вещь нечасто полезная.
...
Рейтинг: 0 / 0
Кавычки в execute immediate
    #39676386
Synoptic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicSynopticКогда запросы на пару экранов, вынесение его в курсор как раз таки улучшает читаемость кода.Во-первых, ты, невежда, имеешь наглость критиковать, не понимая, что критикуешь.
Во-вторых, пару экранов - это само по себе плохо и нет разницы, где они мылят глаз.
В-третьих, да, явные курсоры - вещь нечасто полезная.Корона не давит?
...
Рейтинг: 0 / 0
Кавычки в execute immediate
    #39676390
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicSynopticКогда запросы на пару экранов, вынесение его в курсор как раз таки улучшает читаемость кода.Во-первых, ты, невежда, имеешь наглость критиковать, не понимая, что критикуешь.

У меня стойкое впечатление, что квалифицированное мнение с цитированием непонятых читателем текстов,
высказывал совсем другой человек.

ElicВо-вторых, пару экранов - это само по себе плохо и нет разницы, где они мылят глаз.

Имхо, запрос - это программа на декларативном языке программирования.
Нет никаких причин, по которой она не может (или не должна) занимать хоть двести двадцать два десятка экранов.
В пределах возможностей компилятора, превращающего такой текст в выполняемую программу.
(В отличие от программ, написанных с использованием языков другого типа.)
И вариант инкапсуляции через представление, сам по себе, не является и не может являться гарантом
заранее предустановленного количества экранов для теста такой программы.
То есть, многоэкранный текст запроса, это естественно.
Потому не может быть признано за плохо.
И, раз ярлык "плохо" на запрос по критерию его размера не навешивается,
конструктивный способ обхождения с его текстом,
не создающий помехи для просмотра тела текста клиента этого курсора , имеет право существовать сам по себе.
И вот это - хорошо.

ElicВ-третьих, да, явные курсоры - вещь нечасто полезная.
С этим трудно не согласиться.
Переиспользуемый код - вещь, действительно, исключительно штучного, редкого и не нужного для всех применения.
Хорошо это или плохо - другой разговор.
Но да, по настоящему мощные вещи полезны крайне редко.
...
Рейтинг: 0 / 0
Кавычки в execute immediate
    #39676395
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boobyярлык "плохо"Мировой заговор не чудится?
...
Рейтинг: 0 / 0
Кавычки в execute immediate
    #39676410
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elicboobyярлык "плохо"Мировой заговор не чудится?
кхм. мне трудно развернуть эту скорлупу.

В том смысле, как вообще страшно жить жизнью программиста - нет не чудится.
Я такой жизнью добровольно живу, не дрожа от страха перед собственным существованием в мире программ,
и даже программ, размера больше двух экранов.

В том смысле, в каком заговор - результат чьего-то враждебного планирования - тоже не чудится.
Считать заговором, да еще мировым, мнение о двух экранах - мне смешно.
Если и есть в программировании заговор, то, например, в том, что десятки миллионов людей пишут на языках,
разработанных и/или развиваемых где-то в Калифорнии.
Но это совсем другая история и другой заговор.

О чем-то третьем я догадаться не сумел.
...
Рейтинг: 0 / 0
Кавычки в execute immediate
    #39676446
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boobyВ том смысле, в каком заговор - результат чьего-то враждебного планирования - тоже не чудится.Абсент?
...
Рейтинг: 0 / 0
Кавычки в execute immediate
    #39676485
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicboobyВ том смысле, в каком заговор - результат чьего-то враждебного планирования - тоже не чудится.Абсент?
Это уныло.
Вот не искал бы ты вокруг себя быдла, так и сам не стал бы небыдлом.
...
Рейтинг: 0 / 0
Кавычки в execute immediate
    #39676588
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
boobyЭто уныло.На ПТ веселее. - Вали.
...
Рейтинг: 0 / 0
Кавычки в execute immediate
    #39676956
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic... - Вали.
Всего доброго.
Ты это, ... береги себя.
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Кавычки в execute immediate
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]