|
|
|
Как прокрутить реф-курсор в цикле ?
|
|||
|---|---|---|---|
|
#18+
Вопрос знающим людям: Как прокрутить реф-курсор в цикле, если неизвестна его структура ? то есть open ref_c; loop fetch ref_c into ... -- куда ??? как объявить переменную для рекорда этого -- курсора ??? Кол-во столбцов и их типы неизвестны, -- (реф-курсор приходит из другой процедуры PL/SQL) exit when ref_c%notfound; .............. .............. end loop; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2005, 16:27 |
|
||
|
Как прокрутить реф-курсор в цикле ?
|
|||
|---|---|---|---|
|
#18+
ВопросикВопрос знающим людям: Как прокрутить реф-курсор в цикле, если неизвестна его структура ? то есть open ref_c; loop fetch ref_c into ... -- куда ??? как объявить переменную для рекорда этого -- курсора ??? Кол-во столбцов и их типы неизвестны, -- (реф-курсор приходит из другой процедуры PL/SQL) exit when ref_c%notfound; .............. .............. end loop; Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2005, 16:28 |
|
||
|
Как прокрутить реф-курсор в цикле ?
|
|||
|---|---|---|---|
|
#18+
for i in ref_c loop ... end loop; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2005, 16:31 |
|
||
|
Как прокрутить реф-курсор в цикле ?
|
|||
|---|---|---|---|
|
#18+
не, ребята, че-то не так. declare ref_c sys_refcursor; ref_c_rec ref_c%rowtype; -- уже здесь начинается ругань begin open ref_c; loop fetch ref_c into ref_c_rec; exit when ref_c%notfound; null; end loop; end; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2005, 16:39 |
|
||
|
Как прокрутить реф-курсор в цикле ?
|
|||
|---|---|---|---|
|
#18+
Вопросикне, ребята, че-то не так. держи друг Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2005, 16:50 |
|
||
|
Как прокрутить реф-курсор в цикле ?
|
|||
|---|---|---|---|
|
#18+
Спасибо, друг ! А если приблизиться к суровой реальности ? procedure DoSomething (xCur in sys_refcursor -- курсор приходит черт-те -- откуда и неизвестно какой --структуры ) is begin c2 c1%rowtype; -- на что эту конструкцию поменять ??? begin open c1; loop fetch c1 into c2; exit when c1%notfound; null; end loop; close c1; end; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2005, 16:55 |
|
||
|
Как прокрутить реф-курсор в цикле ?
|
|||
|---|---|---|---|
|
#18+
ВопросикА если приблизиться к суровой реальности ? а структура курсора меняется? Или он стабилен все же? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2005, 17:06 |
|
||
|
Как прокрутить реф-курсор в цикле ?
|
|||
|---|---|---|---|
|
#18+
ВопросикСпасибо, друг ! А если приблизиться к суровой реальности ? procedure DoSomething (xCur in sys_refcursor -- курсор приходит черт-те -- откуда и неизвестно какой --структуры ) is begin c2 c1%rowtype; -- на что эту конструкцию поменять ??? begin open c1; loop fetch c1 into c2; exit when c1%notfound; null; end loop; close c1; end; Прокрутить курсор неизвестной структуры ты сможешь всегда, а вот извлечь отдельные данные из с2 - нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2005, 17:17 |
|
||
|
Как прокрутить реф-курсор в цикле ?
|
|||
|---|---|---|---|
|
#18+
alex-ls ВопросикА если приблизиться к суровой реальности ? а структура курсора меняется? Или он стабилен все же? К сожалению, меняется.... Реф-курсор формируется программно и кол-во колонок в нем зависит от данных. может быть так наименование банк 1 банк2 ........банкN Бумага 20 30 650 кол-во банков меняется в соответсвии с кучей параметров и сколько их будет, заранее не определить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2005, 17:17 |
|
||
|
Как прокрутить реф-курсор в цикле ?
|
|||
|---|---|---|---|
|
#18+
Вопросик alex-ls ВопросикА если приблизиться к суровой реальности ? а структура курсора меняется? Или он стабилен все же? К сожалению, меняется.... мда... тогда не знаю если бы не менялся можно было бы объявить курсор в пакете и по нему стряпать переменные. А так... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2005, 17:20 |
|
||
|
Как прокрутить реф-курсор в цикле ?
|
|||
|---|---|---|---|
|
#18+
brant2000 ВопросикСпасибо, друг ! А если приблизиться к суровой реальности ? procedure DoSomething (xCur in sys_refcursor -- курсор приходит черт-те -- откуда и неизвестно какой --структуры ) is begin c2 c1%rowtype; -- на что эту конструкцию поменять ??? begin open c1; loop fetch c1 into c2; exit when c1%notfound; null; end loop; close c1; end; Прокрутить курсор неизвестной структуры ты сможешь всегда, а вот извлечь отдельные данные из с2 - нет это ирония ? вместо c2 конечно же должен быть xCur, сорри. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2005, 17:31 |
|
||
|
Как прокрутить реф-курсор в цикле ?
|
|||
|---|---|---|---|
|
#18+
блин опять тороплюсь ... XCur вместо с1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2005, 17:33 |
|
||
|
Как прокрутить реф-курсор в цикле ?
|
|||
|---|---|---|---|
|
#18+
Если знаешь Java, то можешь передать SYS_REFCURSOR в метод Java-класса, а там уж делать с ним что угодно. Тем более при наличии такой вещи как ResultSetMetaData. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2005, 17:37 |
|
||
|
Как прокрутить реф-курсор в цикле ?
|
|||
|---|---|---|---|
|
#18+
Вопросикблин опять тороплюсь ... XCur вместо с1. Как не называй получить данные из курсора неизвестной структуры в PL/SQL нельзя, только количество записей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2005, 17:42 |
|
||
|
Как прокрутить реф-курсор в цикле ?
|
|||
|---|---|---|---|
|
#18+
brant2000 Вопросикблин опять тороплюсь ... XCur вместо с1. Как не называй получить данные из курсора неизвестной структуры в PL/SQL нельзя, только количество записей. Очень даже можно Код: plaintext 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. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2005, 19:03 |
|
||
|
Как прокрутить реф-курсор в цикле ?
|
|||
|---|---|---|---|
|
#18+
Anatalex brant2000 Как не называй получить данные из курсора неизвестной структуры в PL/SQL нельзя, только количество записей. Очень даже можно Код: plaintext 1. 2. Anatalex, таки шо же Вы хотели продемонстрировать данным примером? Где тут неопределенная структура? Аналогичный пример легко строится и с ref cursor, если программист заранее знает что в этом курсоре придет (количество полей и типы данных). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2005, 20:17 |
|
||
|
Как прокрутить реф-курсор в цикле ?
|
|||
|---|---|---|---|
|
#18+
ВопросикК сожалению, меняется.... Реф-курсор формируется программно и кол-во колонок в нем зависит от данных. может быть так наименование банк 1 банк2 ........банкN Бумага 20 30 650 кол-во банков меняется в соответсвии с кучей параметров и сколько их будет, заранее не определить.О, так Ваш курсор имеет вполне предсказуемую структуру? Тогда можно попробовать методом "научного втыка": - насоздавать N рекордов с различным числом полей - пытаться по очереди профетчить в каждый из рекордов, пока не попадешь в нужный ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2005, 20:44 |
|
||
|
Как прокрутить реф-курсор в цикле ?
|
|||
|---|---|---|---|
|
#18+
andrey_anonymous ВопросикК сожалению, меняется.... Реф-курсор формируется программно и кол-во колонок в нем зависит от данных. может быть так наименование банк 1 банк2 ........банкN Бумага 20 30 650 кол-во банков меняется в соответсвии с кучей параметров и сколько их будет, заранее не определить.О, так Ваш курсор имеет вполне предсказуемую структуру? Тогда можно попробовать методом "научного втыка": - насоздавать N рекордов с различным числом полей - пытаться по очереди профетчить в каждый из рекордов, пока не попадешь в нужный В dbms_sql достаточно средств, что бы определить структуру реф курсора, количество и типы полей. Остальное дело техники. Я привел лишь один из примеров использования ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2005, 10:38 |
|
||
|
Как прокрутить реф-курсор в цикле ?
|
|||
|---|---|---|---|
|
#18+
AnatalexВ dbms_sql достаточно средств, что бы определить структуру реф курсора , количество и типы полей.Можно с этого места поподробнее? Примерчик какой... Обращаю особое внимание: речь идет именно о REF CURSOR. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2005, 11:08 |
|
||
|
Как прокрутить реф-курсор в цикле ?
|
|||
|---|---|---|---|
|
#18+
AnatalexВ dbms_sql достаточно средств, что бы определить структуру реф курсораdbms_sql не поддерживает ref cursor. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2005, 11:20 |
|
||
|
Как прокрутить реф-курсор в цикле ?
|
|||
|---|---|---|---|
|
#18+
andrey_anonymous AnatalexВ dbms_sql достаточно средств, что бы определить структуру реф курсора , количество и типы полей.Можно с этого места поподробнее? Примерчик какой... Обращаю особое внимание: речь идет именно о REF CURSOR. Похоже этот товарисч снова путает теплое с мягким... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2005, 11:49 |
|
||
|
Как прокрутить реф-курсор в цикле ?
|
|||
|---|---|---|---|
|
#18+
Если можно передать в процедуру инфу о структуре данных в курсоре то можно динамическим SQL разобрать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2005, 12:12 |
|
||
|
Как прокрутить реф-курсор в цикле ?
|
|||
|---|---|---|---|
|
#18+
Alex623Если можно передать в процедуру инфу о структуре данных в курсоре то можно динамическим SQL разобратьВ таком случае и ref cursor как бы нафиг не нужен ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2005, 12:14 |
|
||
|
Как прокрутить реф-курсор в цикле ?
|
|||
|---|---|---|---|
|
#18+
andrey_anonymous ВопросикК сожалению, меняется.... Реф-курсор формируется программно и кол-во колонок в нем зависит от данных. может быть так наименование банк 1 банк2 ........банкN Бумага 20 30 650 кол-во банков меняется в соответсвии с кучей параметров и сколько их будет, заранее не определить.О, так Ваш курсор имеет вполне предсказуемую структуру? Тогда можно попробовать методом "научного втыка": - насоздавать N рекордов с различным числом полей - пытаться по очереди профетчить в каждый из рекордов, пока не попадешь в нужный ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2005, 13:09 |
|
||
|
Как прокрутить реф-курсор в цикле ?
|
|||
|---|---|---|---|
|
#18+
brant2000 andrey_anonymous ВопросикК сожалению, меняется.... Реф-курсор формируется программно и кол-во колонок в нем зависит от данных. может быть так наименование банк 1 банк2 ........банкN Бумага 20 30 650 кол-во банков меняется в соответсвии с кучей параметров и сколько их будет, заранее не определить.О, так Ваш курсор имеет вполне предсказуемую структуру? Тогда можно попробовать методом "научного втыка": - насоздавать N рекордов с различным числом полей - пытаться по очереди профетчить в каждый из рекордов, пока не попадешь в нужный Передавай не сам реф курсор, а номер курсора определенный с помощью того же dbms_sql и будет тебе счастье ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2005, 13:31 |
|
||
|
Как прокрутить реф-курсор в цикле ?
|
|||
|---|---|---|---|
|
#18+
AnatalexПередавай не сам реф курсор, а номер курсора определенный с помощью того же dbms_sql и будет тебе счастьеБездумный гон пурги продолжается Ты вопрос всё-таки прочитал бы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2005, 13:49 |
|
||
|
Как прокрутить реф-курсор в цикле ?
|
|||
|---|---|---|---|
|
#18+
Elic AnatalexПередавай не сам реф курсор, а номер курсора определенный с помощью того же dbms_sql и будет тебе счастьеБездумный гон пурги продолжается Ты вопрос всё-таки прочитал бы. Я то прочитал. А ты подумай для чего это. Или мозгов не хватает? Просто не известна структура запроса. Ну и что. Обработай его с помощью dbms_sql. Или весь мир на ref cursor как таковой сошелся? Только он и трава не расти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2005, 14:46 |
|
||
|
Как прокрутить реф-курсор в цикле ?
|
|||
|---|---|---|---|
|
#18+
With PL/SQL8, you can now obtain information about the structure of the columns of your dynamic cursor. The DBMS_SQL.DESCRIBE_COLUMNS procedure obtains information about your dynamic cursor. Here is the header: PROCEDURE DBMS_SQL.DESCRIBE_COLUMNS (c IN INTEGER ,col_cnt OUT INTEGER ,desc_t OUT DBMS_SQL.DESC_TAB); Parameters c The pointer to the cursor. col_cnt The number of columns in the cursor, which equals the number of rows defined in the PL/SQL table. desc_t The PL/SQL table, which contains all of the column information. This is a table of records of type DBMS_SQL.DESC_REC (<table_type>), described below. <table_type> Datatype Description col_type BINARY_INTEGER Type of column described col_max_len BINARY_INTEGER Maximum length of column value col_name VARCHAR2(32) Name of the column col_name_len BINARY_INTEGER Length of the column name col_schema_name VARCHAR2(32) Name of column type schema if an object type col_schema_name_len BINARY_INTEGER Length of schema name col_precision BINARY_INTEGER Precision of column if a number col_scale BINARY_INTEGER Scale of column if a number col_charsetid BINARY_INTEGER ID of character set col_charsetform BINARY_INTEGER Character set form col_null_ok BOOLEAN TRUE if column can be NULL The values for column types are as follows: Datatype Number VARCHAR2 1 NVARCHAR2 1 NUMBER 2 INTEGER 2 LONG 8 ROWID 11 DATE 12 RAW 23 LONG RAW 24 CHAR 96 NCHAR 96 MLSLABEL 106 CLOB (Oracle8) 112 NCLOB (Oracle8) 112 BLOB (Oracle8) 113 BFILE (Oracle8) 114 Object type (Oracle8) 121 Nested table Type (Oracle8) 122 Variable array (Oracle8) 123 When you call this program, you need to have declared a PL/SQL table based on the DBMS_SQL.DESC_T. You can then use PL/SQL table methods to traverse the table and extract the needed information about the cursor. The following anonymous block shows the basic steps you will perform when working with this built-in: DECLARE cur PLS_INTEGER := DBMS_SQL.OPEN_CURSOR; cols DBMS_SQL.DESC_T; ncols PLS_INTEGER; BEGIN DBMS_SQL.PARSE (cur, 'SELECT hiredate, sal FROM emp', DBMS_SQL.NATIVE); DBMS_SQL.DEFINE_COLUMN (cur, 1, SYSDATE); DBMS_SQL.DEFINE_COLUMN (cur, 2, 1); DBMS_SQL.DESCRIBE_COLUMNS (cur, ncols, cols); FOR colind IN 1 .. ncols LOOP DBMS_OUTPUT.PUT_LINE (cols.col_name); END LOOP; DBMS_SQL.CLOSE_CURSOR (cur); END; / ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2005, 14:54 |
|
||
|
Как прокрутить реф-курсор в цикле ?
|
|||
|---|---|---|---|
|
#18+
AnatalexИли весь мир на ref cursor как таковой сошелся?В постановке задачи - сошёлся. А решать незаданные задачи - это есть использование "мозгов, которых хватает"() для "пурги". Чтобы отказаться от ref cursor в приёмнике, нужно также от него отказаться и в передатчике. Т.е. полный redesign. Сомневаюсь, что оно ему надо. P.S. И не надо дампить килы доки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2005, 15:01 |
|
||
|
Как прокрутить реф-курсор в цикле ?
|
|||
|---|---|---|---|
|
#18+
AnatalexЯ то прочитал. А ты подумай для чего это. Или мозгов не хватает? Просто не известна структура запроса. Ну и что. Обработай его с помощью dbms_sql. Или весь мир на ref cursor как таковой сошелся? Только он и трава не расти. 1. Уважаемый, ну зачем же так грубо? 2. Решения проблемы у Вас нет, поскольку предложения отказаться от ref cursor Вы не вносили. Зато вносили предложение определить структуру ref cursor посредством dbms_sql... :) 3. "Весь мир", может, и не сошелся, но далеко не всегда можно обойтись передачей текста запроса. Например, если данные нужны в методе, который работает от имени другого пользователя... Или метод - поставщик данных используется в иных приложениях и не может быть изменен по соображениям совместимости или по условиям лицензионного соглашения. 4. Я не буду говорить про чуждые Вам концепции инкапсуляции, соображения сопровождаемости или хотя бы банальную безопасность (поищите по форуму sql injection). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2005, 15:06 |
|
||
|
Как прокрутить реф-курсор в цикле ?
|
|||
|---|---|---|---|
|
#18+
andrey_anonymous AnatalexЯ то прочитал. А ты подумай для чего это. Или мозгов не хватает? Просто не известна структура запроса. Ну и что. Обработай его с помощью dbms_sql. Или весь мир на ref cursor как таковой сошелся? Только он и трава не расти. 1. Уважаемый, ну зачем же так грубо? 2. Решения проблемы у Вас нет, поскольку предложения отказаться от ref cursor Вы не вносили. Зато вносили предложение определить структуру ref cursor посредством dbms_sql... :) 3. "Весь мир", может, и не сошелся, но далеко не всегда можно обойтись передачей текста запроса. Например, если данные нужны в методе, который работает от имени другого пользователя... Или метод - поставщик данных используется в иных приложениях и не может быть изменен по соображениям совместимости или по условиям лицензионного соглашения. 4. Я не буду говорить про чуждые Вам концепции инкапсуляции, соображения сопровождаемости или хотя бы банальную безопасность (поищите по форуму sql injection). А кто сказал, что нужно передавать текст запроса? Разве я такое говорил? Передавать нужно лишь указатель на курсор - его номер. Это вы не очень то въехали. Инкапсуляция здесь не при чем. Это первое. А второе - гон пурги это когда говорят зделать ничего нельзя можешь только кол-во строк узнать. Я же предложил решение проблемы. А человек сам разберется, что ему нужно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2005, 15:11 |
|
||
|
Как прокрутить реф-курсор в цикле ?
|
|||
|---|---|---|---|
|
#18+
AnatalexА кто сказал, что нужно передавать текст запроса? Разве я такое говорил?Вообще-то именно так был воспринят Ваш пост с текстом процедуры. Рад, что Вы изменили мнение. Anatalex А второе - гон пурги это когда говорят зделать ничего нельзя можешь только кол-во строк узнать. Я же предложил решение проблемы.РЕШЕНИЕ предложил DenisPopov. Ваши же посты - решение какой-то совсем другой задачи Anatalex А человек сам разберется, что ему нужно А вот это уж обязательно. Лишь бы те, кто будет давать советы "после нас", не апеллировали потом к Вашим предложениям определять структуру ref cursor посредством dbms_sql ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2005, 15:32 |
|
||
|
Как прокрутить реф-курсор в цикле ?
|
|||
|---|---|---|---|
|
#18+
andrey_anonymous AnatalexА кто сказал, что нужно передавать текст запроса? Разве я такое говорил?Вообще-то именно так был воспринят Ваш пост с текстом процедуры. Рад, что Вы изменили мнение. Anatalex А второе - гон пурги это когда говорят зделать ничего нельзя можешь только кол-во строк узнать. Я же предложил решение проблемы.РЕШЕНИЕ предложил DenisPopov. Ваши же посты - решение какой-то совсем другой задачи Anatalex А человек сам разберется, что ему нужно А вот это уж обязательно. Лишь бы те, кто будет давать советы "после нас", не апеллировали потом к Вашим предложениям определять структуру ref cursor посредством dbms_sql Если вы не поняли, так и не говорите. Я предлагал определить структуру курсора, неизвестной структуры с помощью dbms_sql для этого этот пакет и предназначен. Если вы хотите приплетать для этого яву, флаг вам в руки, но все эти вещи прекрасно решаются с помощью dbms_sql . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2005, 15:43 |
|
||
|
Как прокрутить реф-курсор в цикле ?
|
|||
|---|---|---|---|
|
#18+
ВопросикВопрос знающим людям: Как прокрутить реф-курсор в цикле, если неизвестна его структура ? Если тебе только прокрутить то может быть сгодится делать всегда 1е поле типа нумбер и выводить его в 1? тогда просто отфетсишь сколько надо то есть все крсоры делать 'select 1 fiktivnoje_pole, ....' а потом вроде можно делать фетч только в 1е поле fetch ref_cur into tmp и пофингу что там есть что-то дальше al Antalex: Ты не понял. Пакет dbms_sql не умеет работать с реф_курсорами и преобразование из одного типа в другой невозможно. Я на еот форум пришел как раз с таким вопросом Мне так ответили со ссылкой на какой-то буржуинский сайт. Если знаешь как - напиши ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2005, 15:59 |
|
||
|
Как прокрутить реф-курсор в цикле ?
|
|||
|---|---|---|---|
|
#18+
Sxak ВопросикВопрос знающим людям: Как прокрутить реф-курсор в цикле, если неизвестна его структура ? Если тебе только прокрутить то может быть сгодится делать всегда 1е поле типа нумбер и выводить его в 1? тогда просто отфетсишь сколько надо то есть все крсоры делать 'select 1 fiktivnoje_pole, ....' а потом вроде можно делать фетч только в 1е поле fetch ref_cur into tmp и пофингу что там есть что-то дальше al Antalex: Ты не понял. Пакет dbms_sql не умеет работать с реф_курсорами и преобразование из одного типа в другой невозможно. Я на еот форум пришел как раз с таким вопросом Мне так ответили со ссылкой на какой-то буржуинский сайт. Если знаешь как - напиши С реф курсорами он действительно не работает. Но можно определить ссылку на курсор любой структуры. Т.е. переменная будет не ref cursor. А будет ссылка (типа INTEGER) на курсор . С помощью этой ссылки в пакете dbms_sql можно из курсора получить все что угодно. Названия, типы, кол-во, значения полей и т.д. И эту ссылку можешь передавать куда угодно в пределах pl/sql из процедуры в процедуру пока курсор не закрыт. К какому полю какую переменную привязывать опять же можно динамически, типы то полей и их порядок определяются без проблем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2005, 16:13 |
|
||
|
Как прокрутить реф-курсор в цикле ?
|
|||
|---|---|---|---|
|
#18+
AnatalexНо можно определить ссылку на курсор любой структуры. Т.е. переменная будет не ref cursor. А будет ссылка (типа INTEGER) на курсор . С помощью этой ссылки в пакете dbms_sql можно из курсора получить все что угодно. Хочется присоединиться к желающим посмотреть реализацию этой идеи. Вообще то dbms.define_column и dbms.desribe_columns работают после разбора выполненного dbms.parse. А для этого надо знать текст запроса, который будете разбирать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2005, 17:00 |
|
||
|
Как прокрутить реф-курсор в цикле ?
|
|||
|---|---|---|---|
|
#18+
ten AnatalexНо можно определить ссылку на курсор любой структуры. Т.е. переменная будет не ref cursor. А будет ссылка (типа INTEGER) на курсор . С помощью этой ссылки в пакете dbms_sql можно из курсора получить все что угодно. Хочется присоединиться к желающим посмотреть реализацию этой идеи. Вообще то dbms.define_column и dbms.desribe_columns работают после разбора выполненного dbms.parse. А для этого надо знать текст запроса, который будете разбирать. Так ведь, когда создается и открывается реф курсор его текст тоже известен. Почему вместо открытия реф курсора не распарсить его с помощью dbms_sql? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2005, 17:11 |
|
||
|
Как прокрутить реф-курсор в цикле ?
|
|||
|---|---|---|---|
|
#18+
Вопросик Как прокрутить реф-курсор в цикле, если неизвестна его структура ? ты решаешь не ту задачу (см. со слов "чтобы отказаться от ref cursor...") ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2005, 17:19 |
|
||
|
Как прокрутить реф-курсор в цикле ?
|
|||
|---|---|---|---|
|
#18+
сорри, не понял чем закончилось обсуждение темы. столкнулся с проблемой аналогично автора темы, но немного проще: процедуры возвращают открытые реф-курсоры. можно ли узнать а) нет ли там ошибки (ошибка будет на фетче, т.к. при открытии курсора запрос не выполняется) б) число записей. а фетч я сделать не могу, т.к. не знаю структуры по описанию мне бы очень подошла функция DBMS_HS_PASSTHROUGH.FETCH_ROW нет ли чего подобного для анализа Oracle-курсора ? brant2000 получить данные из курсора неизвестной структуры в PL/SQL нельзя, только количество записей. и как ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2008, 12:23 |
|
||
|
Как прокрутить реф-курсор в цикле ?
|
|||
|---|---|---|---|
|
#18+
а можно ли без динамики открыть курсорную переменную из курсорА ? что-то типа open v_ref_dat for c_all_list; , где c_all_list - описанный выше курсор зачем надо? результирующий набор селекта одинаковый, а немного различаются фильтры. Не хочется прям внутри блока прописывать, хотела в секции объявлений описать все вариантры курсоров, чтобы не прыгать потом по всей проге и искать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2018, 18:41 |
|
||
|
Как прокрутить реф-курсор в цикле ?
|
|||
|---|---|---|---|
|
#18+
ОкеанНадеждыа можно ли без динамики открыть курсорную переменную из курсорА ?И с динамикой нельзя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2018, 18:55 |
|
||
|
Как прокрутить реф-курсор в цикле ?
|
|||
|---|---|---|---|
|
#18+
ElicОкеанНадеждыа можно ли без динамики открыть курсорную переменную из курсорА ?И с динамикой нельзя. ???? https://docs.oracle.com/cd/B28359_01/appdev.111/b28419/d_sql.htm#CHDJDGDG ни разу не использовал, нужды не было. Но вроде по описанию то, что надо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2018, 18:58 |
|
||
|
Как прокрутить реф-курсор в цикле ?
|
|||
|---|---|---|---|
|
#18+
ОкеанНадежды хотела в секции объявлений описать все вариантры курсоров, чтобы не прыгать потом по всей проге и искать Покажите пожалуйста способ, которым Вы предполагаете выбирать конкретный вариант курсора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2018, 19:06 |
|
||
|
Как прокрутить реф-курсор в цикле ?
|
|||
|---|---|---|---|
|
#18+
andrey_anonymousОкеанНадежды хотела в секции объявлений описать все вариантры курсоров, чтобы не прыгать потом по всей проге и искать Покажите пожалуйста способ, которым Вы предполагаете выбирать конкретный вариант курсора. да он не работает, я хотела что-то типа Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2018, 19:15 |
|
||
|
Как прокрутить реф-курсор в цикле ?
|
|||
|---|---|---|---|
|
#18+
ой, только там не rc,а t разумеется ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2018, 19:16 |
|
||
|
Как прокрутить реф-курсор в цикле ?
|
|||
|---|---|---|---|
|
#18+
точнее не t, а t_cur :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2018, 19:27 |
|
||
|
Как прокрутить реф-курсор в цикле ?
|
|||
|---|---|---|---|
|
#18+
ОкеанНадежды[src pl/sql] if n = 1 then open t for c; else open t for b; end if; [/src] В таком варианте все, что Вам надо, это объявить курсоры varchar2-переменными. :) Проверку структуры возвращаемого результата можно оформить посредством объявления strong ref cursor. Рассмотрите еще такой вариант: Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2018, 19:31 |
|
||
|
Как прокрутить реф-курсор в цикле ?
|
|||
|---|---|---|---|
|
#18+
И да, есть еще один очевидный способ - варианты запроса можно оформить статикой посредством перегрузки функций, возвращающих курсор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2018, 19:34 |
|
||
|
Как прокрутить реф-курсор в цикле ?
|
|||
|---|---|---|---|
|
#18+
andrey_anonymousИ да, есть еще один очевидный способ - варианты запроса можно оформить статикой посредством перегрузки функций, возвращающих курсор. Например, так (ни разу не догма): Код: 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. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2018, 20:11 |
|
||
|
Как прокрутить реф-курсор в цикле ?
|
|||
|---|---|---|---|
|
#18+
Андрей, спасибо! про varchar2 - писала выше, что не хотелось бы динамики. Второй вариант интересный :) хотя у меня вообще-то пока всего 2 курсора на выбор, можно проще их просто в открытии переменной да и прописать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2018, 21:05 |
|
||
|
Как прокрутить реф-курсор в цикле ?
|
|||
|---|---|---|---|
|
#18+
ОкеанНадеждызачем надо? результирующий набор селекта одинаковый, а немного различаются фильтры. Не хочется прям внутри блока прописывать, хотела в секции объявлений описать все вариантры курсоров, чтобы не прыгать потом по всей проге и искать Если в реальности именно так и ОкеанНадеждыя хотела что-то типа Код: 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. то данная тема избыточна - достаточно использовать 1 курсор, в котором будут применены все фильтры подобным образом: Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2018, 00:41 |
|
||
|
Как прокрутить реф-курсор в цикле ?
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev https://docs.oracle.com/cd/B28359_01/appdev.111/b28419/d_sql.htm#CHDJDGDG ни разу не использовал, нужды не было. Но вроде по описанию то, что надоИ где там что-нибудь про PL/SQL-ный курсор? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2018, 07:43 |
|
||
|
Как прокрутить реф-курсор в цикле ?
|
|||
|---|---|---|---|
|
#18+
ОкеанНадеждыandrey_anonymousпропущено... Покажите пожалуйста способ, которым Вы предполагаете выбирать конкретный вариант курсора. да он не работает, я хотела что-то типа Код: 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. імхо, Ваш варіант из доки https://blogs.oracle.com/oraclemagazine/working-with-cursors Код: 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. зы вместо type t is ref cursor; t_cur t; писал t_cur sys_refcursor; меньше буковок ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2018, 11:24 |
|
||
|
|

start [/forum/topic.php?all=1&fid=52&tid=1884060]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
76ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 256ms |
| total: | 433ms |

| 0 / 0 |
