Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Можно ли использовать параметр в секции IN() запроса / 16 сообщений из 16, страница 1 из 1
30.09.2017, 10:17
    #39528759
cybert
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли использовать параметр в секции IN() запроса
Добрый день.
Есть задача. Есть моя база данных (Oracle 11.2) и удаленная БД (Oracle 11.2), к которой я подключаюсь из своей базы через DBLink.
В своей БД я написал некую функцию, которая берет список ID-шников из своей локальной таблицы, и по этому списку ID-шников лезет в удаленную БД и извлекает данные из большой таблицы. Сначала сделал через коллекцию так (пишу схематически, чтобы не загружать тему реальным кодом):

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
--создаю типы
CREATE TYPE T_OBJ AS OBJECT(id NUMBER, Name VARCHAR2(200));
CREATE TYPE T_OBJ_DATASET AS TABLE OF T_OBJ;

--тело функции
TYPE T_RESULT_REC IS RECORD(field1 NUMBER, field2 VARCHAR2(200));
TYPE T_RESULT_DATASET IS TABLE OF RESULT_REC;

C T_OBJ_DATASET;
RES_C T_RESULT_DATASET;
BEGIN
  --заполняю коллекцию из локальной таблицы
  SELECT T_OBJ(T.id, T.name)
  BULK COLLECT INTO C
  FROM my_local_table T
  ORDER BY T.id;

  --лезу в удаленную базу, извлекаю из таблицы записи с айдишниками из моего списка:

  SELECT R.field1, R.field2
  BULK COLLECT INTO RES_C
  FROM remote_table@MY_DBLINK R
  WHERE R.id IN (SELECT id FROM TABLE(C));
END;



И вот тут начинаются приколы. В моей локальной таблице всего 3 записи, в удаленной таблице записей много, но по полю ID есть индекс, он VALID-ный, я проверял. Казалось бы, оракл должен был вытянуть 3 ид-шника из коллекции, передать список из 3-х ид-шников в запрос к удаленной таблице, и поскольку то поле проиндексировано, то запрос должен был выполниться очень быстро.
Но в реале запрос выполняется больше минуты. Посмотреть план запроса к удаленной БД не могу, т.к. дблинк - это отдельная транзакция и в плане запроса я увижу только REMOTE, а к удаленной базе у меня нет админского доступа.
Когда я делаю вот так:
Код: plsql
1.
2.
3.
4.
  SELECT R.field1, R.field2
  BULK COLLECT INTO RES_C
  FROM remote_table@MY_DBLINK R
  WHERE R.id IN (1,2,3)


т.е. пишу ид-шники напрямую, запрос выполняется мгновенно.
Сделал временно так:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
  id_list_str VARCHAR2(4000);

  --заполняю переменную id_list_str из коллекции;

  EXECUTE IMMEDIATE 'SELECT R.field1, R.field2
  FROM remote_table@MY_DBLINK R
  WHERE R.id IN ('||id_list_str||')'
  BULK COLLECT INTO RES_C;



Казалось бы все хорошо, но на удаленной базе в кеше запросов будет куча моих однотипных запросов с разными вариациями IN(...), что есть очень плохо. Пытался сделать через параметризированный запрос, определив мой id_list_str как параметр:
Код: plsql
1.
2.
3.
EXECUTE IMMEDIATE 'SELECT... WHERE R.ID IN(:Param)'
BULK COLLECT INTO RES_C
USING IN id_list_str;


- не получилось. Видимо, оракл не может объявить параметр типа список, только конкретные значения, а у меня постоянно меняется их количество.
У меня остался еще один резервный вариант: в цикле по коллекции выполнять селект к удаленной БД, извлекая по одной записи через параметр, но это решение не очень эффективное, т.к. постоянно будет идти переключение контекста между PL/SQL и SQL, что тоже не очень хорошо. Хотелось бы все-таки обойтись одним запросом к удаленной базе с передачей списка ид-шников, но чтобы при этом не забить library cache этой удаленной базы.
Заранее спасибо за помощь.
...
Рейтинг: 0 / 0
30.09.2017, 13:59
    #39528804
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли использовать параметр в секции IN() запроса
SQL:

Код: plsql
1.
2.
3.
4.
SELECT R.field1, R.field2
BULK COLLECT INTO RES_C
FROM remote_table@MY_DBLINK R
WHERE R.id IN (1,2,3)



это remote SQL ибо у нас одна удаленная таблицa. A вот:

Код: plsql
1.
2.
3.
4.
5.
SELECT R.field1, R.field2
BULK COLLECT INTO RES_C
FROM remote_table@MY_DBLINK R
WHERE R.id IN (SELECT id FROM TABLE(C));
END;



это distributed SQL ибо имеем локальную и удаленную таблицы. Смотри план. Скорее всего driving site локальная база. Посему ВСЕ данные удаленной таблицы закачиваются в локальную базу и только потом фильтруются. Помоги оптимазеру вставь хинт /*+ DRIVING_SITE(R) */. Может уговоришь .

SY.
...
Рейтинг: 0 / 0
30.09.2017, 14:21
    #39528812
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли использовать параметр в секции IN() запроса
cybert
Код: plsql
1.
2.
3.
4.
5.
SELECT R.field1, R.field2
  BULK COLLECT INTO RES_C
  FROM remote_table@MY_DBLINK R
  WHERE R.id IN (SELECT/*+ cardinality(T 3) */ id FROM TABLE(C) T);
END;


Сделай так и все будет ок.
...
Рейтинг: 0 / 0
30.09.2017, 14:26
    #39528815
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли использовать параметр в секции IN() запроса
cybertПосмотреть план запроса к удаленной БД не могу, т.к. дблинк - это отдельная транзакция и в плане запроса я увижу только REMOTE"увижу" или "вижу"? Для начала смотреть надо на локальной базе, если плане только REMOTE, то все ок и хинт cardinality должен помочь
...
Рейтинг: 0 / 0
02.10.2017, 18:57
    #39529638
cybert
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли использовать параметр в секции IN() запроса
Спасибо Вам большое, DRIVING_SITE(R) помог) Правда, он отлично работает в SQL, когда локальная таблица - физическая. Как только ставлю этот хинт в середину кода на PL/SQL, где в качестве локальной таблицы используется коллекция - этот хинт игнорируется. Ну ничего, я это обойду через Temporary table вместо коллекций.
Спасибо еще раз, удачи Вам!
...
Рейтинг: 0 / 0
04.10.2017, 12:04
    #39530668
Fogel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли использовать параметр в секции IN() запроса
cybert
Код: plsql
1.
2.
3.
4.
5.
6.
  --лезу в удаленную базу, извлекаю из таблицы записи с айдишниками из моего списка:

  SELECT R.field1, R.field2
  BULK COLLECT INTO RES_C
  FROM remote_table@MY_DBLINK R
  WHERE R.id IN (SELECT id FROM TABLE(C));




решается без хинтов, заменой этого блока на:

Код: plsql
1.
2.
3.
4.
5.
with t as (SELECT id FROM TABLE(C))
SELECT R.field1, R.field2
  BULK COLLECT INTO RES_C
  FROM remote_table@MY_DBLINK R, t
  WHERE R.id = t.ID;


не будет тащить всю удалённую таблицу, а сразу извлечёт то, что нужно
...
Рейтинг: 0 / 0
04.10.2017, 13:36
    #39530738
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли использовать параметр в секции IN() запроса
Fogelа сразу извлечёт то, что нужно

А возможно и больше чем нужно

Код: plsql
1.
2.
3.
4.
5.
with t as (SELECT DISTINCT id FROM TABLE(C))
SELECT R.field1, R.field2
  BULK COLLECT INTO RES_C
  FROM remote_table@MY_DBLINK R, t
  WHERE R.id = t.ID;



И не факт что "не будет тащить всю удалённую таблицу". Оптимайзер понятия не имеет о размере T, так-что совершенно не факт что WITH сделает R as driving site.

SY.
...
Рейтинг: 0 / 0
04.10.2017, 17:18
    #39530969
Fogel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли использовать параметр в секции IN() запроса
SYА возможно и больше чем нужно

про distinct согласен

SYИ не факт что "не будет тащить всю удалённую таблицу". Оптимайзер понятия не имеет о размере T, так-что совершенно не факт что WITH сделает R as driving site.
SY.
с этим не согласен
with для того и придумали, чтобы (в том числе) пошагово наборы данных формировать, поочередно их соединяя, поэтому к обращению к дблинку набор из with уже известен и тип соединения оптимизатор в любом случае выберет, не вытаскивая всю таблицу с удалённой базы.
...
Рейтинг: 0 / 0
04.10.2017, 20:48
    #39531095
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли использовать параметр в секции IN() запроса
Fogelwith для того и придумали, чтобы (в том числе) пошагово наборы данных формировать, поочередно их соединяя


И на каком заборе это написано? Это отимайзер решает материализовать WITH (вернее каждое CTE по отдельности) или нет. Но даже если и материализует то что? Получим соединение temporary table с удаленной таблицей что ничем это отличается от исходной ситуации. Оптимайзер понятия не имеет о размере temporary table и считает cardinality (если не ошибаюсь) по рaзмеру блока БД а посему как ни крути а либо CARDINALITY либо DRIVING_SITE.

SY.
...
Рейтинг: 0 / 0
04.10.2017, 21:49
    #39531135
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли использовать параметр в секции IN() запроса
cybert,

c коллекцией тоже можно, только я забыл что тут еще одну хитрость надо сделать:
Код: plsql
1.
2.
3.
4.
5.
select/*+ driving_site(l)  */ * 
from  (select/*+ no_merge cardinality(4) */ * 
       from table(cast (:t as sys.ku$_objnumset)) t) v
     ,xtest@remote l
where l.a = v.column_value



ps. Джонатан как всегда спасает
...
Рейтинг: 0 / 0
04.10.2017, 21:59
    #39531141
Fogel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли использовать параметр в секции IN() запроса
SYFogelwith для того и придумали, чтобы (в том числе) пошагово наборы данных формировать, поочередно их соединяя


И на каком заборе это написано? Это отимайзер решает материализовать WITH (вернее каждое CTE по отдельности) или нет. Но даже если и материализует то что? Получим соединение temporary table с удаленной таблицей что ничем это отличается от исходной ситуации. Оптимайзер понятия не имеет о размере temporary table и считает cardinality (если не ошибаюсь) по рaзмеру блока БД а посему как ни крути а либо CARDINALITY либо DRIVING_SITE.

SY.

на заборе моего опыта.
возможно, мне не попадались иные кейсы.
но когда дблинк, материализация сте на локале идёт по умолчанию и получается "выдёргивание" по индексируемому полю нужных значений.
...
Рейтинг: 0 / 0
04.10.2017, 22:45
    #39531165
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли использовать параметр в секции IN() запроса
Fogelно когда дблинк, материализация сте на локале идёт по умолчанию и получается "выдёргивание" по индексируемому полю нужных значений.

Да ну?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
SQL> explain plan for
  2  with t as (select column_value empno from table(NumberList(1,2,3)))
  3  select  e.*
  4    from  emp@pdb1sol12 e,
  5          t
  6    where e.empno = t.empno
  7  /

Explained.

SQL> select * from table(dbms_xplan.display)
  2  /
Plan hash value: 2694815159

---------------------------------------------------------------------------------------------------------------
| Id  | Operation                              | Name | Rows  | Bytes | Cost (%CPU)| Time     | Inst   |IN-OUT|
---------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                       |      |  8168 |   319K|    32   (0)| 00:00:01 |        |      |
|*  1 |  HASH JOIN                             |      |  8168 |   319K|    32   (0)| 00:00:01 |        |      |
|   2 |   REMOTE                               | EMP  |    14 |   532 |     3   (0)| 00:00:01 | PDB1S~ | R->S |
|   3 |   COLLECTION ITERATOR CONSTRUCTOR FETCH|      |  8168 | 16336 |    29   (0)| 00:00:01 |        |      |
---------------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - access("E"."EMPNO"=VALUE(KOKBF$))

Remote SQL Information (identified by operation id):
----------------------------------------------------

   2 - SELECT "EMPNO","ENAME","JOB","MGR","HIREDATE","SAL","COMM","DEPTNO" FROM "EMP" "E" (accessing
       'PDB1SOL12.AD1.PROD' )


22 rows selected.

SQL> 



Ну где " материализация сте на локале идёт по умолчанию и получается "выдёргивание" по индексируемому полю нужных значений"?

SY.
...
Рейтинг: 0 / 0
04.10.2017, 23:24
    #39531169
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли использовать параметр в секции IN() запроса
Материализация вообще тут не работает, т.е. с коллекцией и remote:
+materialize
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
SQL> with v(x) as (select/*+ materialize */ * from table(ku$_objnumset(1,2,4)))
  2  select *
  3  from  v
  4       ,xtest@loopback l
  5  where l.a = v.x;

         X          A          B          C
---------- ---------- ---------- ----------
         1          1          1          1
         2          2          2          2
         4          4          4          4

3 rows selected.

SQL> select * from table(dbms_xplan.display_cursor());

PLAN_TABLE_OUTPUT
-----------------------------------------------------------------------------------------------------------------
Plan hash value: 16270364

----------------------------------------------------------------------------------------------------------------
| Id  | Operation                              | Name  | Rows  | Bytes | Cost (%CPU)| Time     | Inst   |IN-OUT|
----------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                       |       |       |       |    36 (100)|          |        |      |
|*  1 |  HASH JOIN                             |       |  8168 |   111K|    36   (0)| 00:00:01 |        |      |
|   2 |   COLLECTION ITERATOR CONSTRUCTOR FETCH|       |  8168 | 16336 |    29   (0)| 00:00:01 |        |      |
|   3 |   REMOTE                               | XTEST | 10000 |   117K|     7   (0)| 00:00:01 | LOOPB~ | R->S |
----------------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - access("L"."A"=VALUE(KOKBF$))

Remote SQL Information (identified by operation id):
----------------------------------------------------

   3 - SELECT "A","B","C" FROM "XTEST" "L" (accessing 'LOOPBACK' )


materialize+driving_site+cardinality
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
SQL> with v(x) as (select/*+ materialize */ * from table(ku$_objnumset(1,2,4)))
  2  select/*+ driving_site(l) cardinality(v 4) */ *
  3  from  v
  4       ,xtest@loopback l
  5  where l.a = v.x;

         X          A          B          C
---------- ---------- ---------- ----------
         1          1          1          1
         2          2          2          2
         4          4          4          4

3 rows selected.

SQL> select * from table(dbms_xplan.display_cursor());

PLAN_TABLE_OUTPUT
-----------------------------------------------------------------------------------------------------------------
Plan hash value: 1172462887

----------------------------------------------------------------------------------------------------------------
| Id  | Operation                              | Name  | Rows  | Bytes | Cost (%CPU)| Time     | Inst   |IN-OUT|
----------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                       |       |       |       |    33 (100)|          |        |      |
|   1 |  NESTED LOOPS                          |       |     4 |    56 |    33   (0)| 00:00:01 |        |      |
|   2 |   COLLECTION ITERATOR CONSTRUCTOR FETCH|       |     4 |     8 |    29   (0)| 00:00:01 |        |      |
|*  3 |   FILTER                               |       |     1 |    12 |     1   (0)| 00:00:01 |        |      |
|   4 |    REMOTE                              | XTEST |       |       |            |          | LOOPB~ | R->S |
----------------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   3 - filter("L"."A"=VALUE(KOKBF$))

Remote SQL Information (identified by operation id):
----------------------------------------------------

   4 - SELECT /*+ */ "A","B","C" FROM "XTEST" "L" (accessing 'LOOPBACK' )


c workaround от Jonathan Lewis
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
SQL> with v(x) as (select/*+ no_merge cardinality(t 4) */ * from table(ku$_objnumset(1,2,4)) t)
  2  select *
  3  from  v
  4       ,xtest@loopback l
  5  where l.a = v.x;

         X          A          B          C
---------- ---------- ---------- ----------
         1          1          1          1
         2          2          2          2
         4          4          4          4

3 rows selected.

SQL> select * from table(dbms_xplan.display_cursor());

PLAN_TABLE_OUTPUT
-----------------------------------------------------------------------------------------------------------------
Plan hash value: 3879124937

-----------------------------------------------------------------------------------------------------------------
| Id  | Operation                               | Name  | Rows  | Bytes | Cost (%CPU)| Time     | Inst   |IN-OUT|
-----------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                        |       |       |       |    33 (100)|          |        |      |
|   1 |  NESTED LOOPS                           |       |     4 |   100 |    33   (0)| 00:00:01 |        |      |
|   2 |   VIEW                                  |       |     4 |    52 |    29   (0)| 00:00:01 |        |      |
|   3 |    COLLECTION ITERATOR CONSTRUCTOR FETCH|       |     4 |     8 |    29   (0)| 00:00:01 |        |      |
|   4 |   REMOTE                                | XTEST |     1 |    12 |     1   (0)| 00:00:01 | LOOPB~ | R->S |
-----------------------------------------------------------------------------------------------------------------

Remote SQL Information (identified by operation id):
----------------------------------------------------

   4 - SELECT "A","B","C" FROM "XTEST" "L" WHERE "A"=:1 (accessing 'LOOPBACK' )


Тут нужно пояснить:
1. Во-первых, я надеялся на FULL REMOTE Statement, но из-за волшебных kokbf$, это не проходит (логично предположить, что просто не стали париться с проверкой соответствия типов коллекций)
2. Материализация не работает. Я уже говорил, что решение о материализации принимается не стоимостным алгоритмом, а захардкоденными правилами, и, скорее все, этот тип находится в исключениях, т.к. я пробовал стандартные известные мне правила - и добавить предикат, и обратиться к V несколько раз - не помогло...
3. DRIVING_SITE не работает для коллекций, т.к. нужен инициатор вызова remote statements, передающий бинды
4. Workaround от Льюиса, конечно, рабочий, и в большинстве случаев он будет хорошо подходить, но у него есть и минус - remote statement будет вызываться столько же раз сколько к нему лукапов будет, а это, естественно, будет медленнее при большом кол-ве обращений (и само кол-во выполнений, и кол-во сетевых раундтрипов...)
...
Рейтинг: 0 / 0
04.10.2017, 23:28
    #39531170
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли использовать параметр в секции IN() запроса
В целом, все это еще и зависит от версий - волшебные kokbf и их ограничения меняются от версии к версии...
Я тестировал на 12.2
...
Рейтинг: 0 / 0
05.10.2017, 09:08
    #39531227
Fogel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли использовать параметр в секции IN() запроса
xtender, спасибо за подробные пояснения
...
Рейтинг: 0 / 0
07.10.2017, 00:37
    #39532565
cybert
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли использовать параметр в секции IN() запроса
Спасибо еще раз всем огромное)
Сделал, как советовал xtender, прочитав статью Джонатана ( https://jonathanlewis.wordpress.com/2010/10/11/distributed-objects/).
Все получилось, финальный тестовый код работает отлично.

SY.: Workaround от Льюиса, конечно, рабочий, и в большинстве случаев он будет хорошо подходить, но у него есть и минус - remote statement будет вызываться столько же раз сколько к нему лукапов будет, а это, естественно, будет медленнее при большом кол-ве обращений (и само кол-во выполнений, и кол-во сетевых раундтрипов...)
- да, бесспорно, но это в 100 раз лучше, чем мое временное решение, где я в цикле PL/SQL вызывал Select, выдирая из ремоут таблицы по одной записи, т.е. еще и переключение контекста шло)

Еще раз спасибо всем участникам за помощь, удачи всем!

финальный тестовый код:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
create or replace type T_ID_NAME_OBJ as object
(id NUMBER,
 NAME VARCHAR2(255)
);

create or replace type T_ID_NAME_DATASET AS TABLE OF T_ID_NAME_OBJ;

-------------------------------

declare

C T_ID_NAME_DATASET;
RES_C T_ID_NAME_DATASET;
BEGIN
  C:=T_ID_NAME_DATASET();
  C.EXTEND(10);
  C(1):=t_id_name_obj(1841,'');
  C(2):=t_id_name_obj(1912,'');
  C(3):=t_id_name_obj(1844,'');
  C(4):=t_id_name_obj(1482,'');
  C(5):=t_id_name_obj(1770,'');
  C(6):=t_id_name_obj(1774,'');
  C(7):=t_id_name_obj(1657,'');
  C(8):=t_id_name_obj(1587,'');
  C(9):=t_id_name_obj(1597,'');
  C(10):=t_id_name_obj(1608,'');
  
  select T_ID_NAME_OBJ(R.col_id, R.col_responsenumber)
  BULK COLLECT INTO RES_C
  from (select /*+ no_merge cardinality(L1 10) */ cast(id as number) as id
        from table(C) L1
       ) L,
       APPBASE_ENVERIM.TBL_RESPONSE@DBLINK_ERIM R
  where R.col_id=L.id;
    
  for i in RES_C.FIRST..RES_C.LAST
    loop
      dbms_output.put_line(res_c(i).id||' '||res_c(i).name);
    end loop;
END;
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Можно ли использовать параметр в секции IN() запроса / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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