Oracle
 sql >> база данни >  >> RDS >> Oracle

Връщане на SQL оператора на явен курсор

Да, можете да направите това с DBMS_SQL.TO_CURSOR_NUMBER функция. Вашата процедура ще изглежда така:

PROCEDURE run_query(p_cur IN OUT SYS_REFCURSOR) IS
    ...
BEGIN

    c := DBMS_SQL.TO_CURSOR_NUMBER(p_cur);

    -- get a description of the returned columns
    DBMS_SQL.DESCRIBE_COLUMNS(c, col_cnt, rec_tab);
    ...

След това трябва да го извикате така:

declare

    l_cur SYS_REFCURSOR;

BEGIN

    OPEN l_cur FOR
       select  *
       from    table_a
       where   employee_number     = nvl(p_emp_no, employee_number)
       and     payroll_id          = nvl(p_payroll_id, payroll_id);
       and     business_group_id   = p_bg_id
       ...;

    tabletoexcel.run_query(l_cur);

ОТВОРЕНО ЗА Изявлението позволява CLOB като изявление, така че няма практическо ограничение по отношение на размера.

Тъй като по време на проектиране не знаете кои колони ще бъдат избрани (поне така предполагам), няма начин да се отървете от DBMS_SQL.DESCRIBE_COLUMNS и DBMS_SQL.DEFINE_COLUMN . В противен случай можете да използвате изявление FETCH вместо DBMS_SQL.FETCH_ROWS(c)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. как да променя съществуващо ограничение за проверка?

  2. Функция ROWIDTOCHAR() в Oracle

  3. Неуточнена грешка по време на изпълнение при изпълнение на vba скрипт

  4. Чувствителност към главни и малки букви на идентификатора на сила в Oracle

  5. свиване на база данни в oracle 11g