Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

Oracle - रेफरी कर्सर से एक विशिष्ट कॉलम का चयन करें

आप इसे DBMS_SQL के साथ कर सकते हैं , लेकिन यह सुंदर नहीं है।

तालिका और नमूना डेटा (COLUMN1 की संख्या 1 - 10 है):

create table table1(column1 number, column2 date, column3 varchar2(1000), column4 clob);

insert into table1
select level, sysdate, level, level from dual connect by level <= 10;
commit;

एक प्रक्रिया के साथ पैकेज जो एक रेफरी कर्सर खोलता है और सब कुछ चुनता है:

create or replace package test_pkg is
    type cur_Table1 is ref cursor return table1%rowtype;
    procedure sp1(p_cursor in out cur_table1);
end;
/

create or replace package body test_pkg is
    procedure sp1(p_cursor in out cur_table1) is
    begin
        open p_cursor for select column1, column2, column3, column4 from table1;
    end;
end;
/

PL/SQL ब्लॉक जो रेफरी कर्सर से COLUMN1 डेटा पढ़ता है:

--Basic steps are: call procedure, convert cursor, describe and find columns,
--then fetch rows and retrieve column values.
--
--Each possible data type for COLUMN1 needs to be added here.
--Currently only NUMBER is supported.
declare
    v_cursor sys_refcursor;
    v_cursor_number number;

    v_columns number;
    v_desc_tab dbms_sql.desc_tab;
    v_position number;
    v_typecode number;
    v_number_value number;
begin
    --Call procedure to open cursor
    test_pkg.sp1(v_cursor);
    --Convert cursor to DBMS_SQL cursor
    v_cursor_number := dbms_sql.to_cursor_number(rc => v_cursor);
    --Get information on the columns
    dbms_sql.describe_columns(v_cursor_number, v_columns, v_desc_tab);

    --Loop through all the columns, find COLUMN1 position and type
    for i in 1 .. v_desc_tab.count loop
        if v_desc_tab(i).col_name = 'COLUMN1' then
            v_position := i;
            v_typecode := v_desc_tab(i).col_type;

            --Pick COLUMN1 to be selected.
            if v_typecode = dbms_types.typecode_number then
                dbms_sql.define_column(v_cursor_number, i, v_number_value);
            --...repeat for every possible type.
            end if;
        end if;
    end loop;

    --Fetch all the rows, then get the relevant column value and print it
    while dbms_sql.fetch_rows(v_cursor_number) > 0 loop
        if v_typecode = dbms_types.typecode_number then
            dbms_sql.column_value(v_cursor_number, v_position, v_number_value);
            dbms_output.put_line('Value: '||v_number_value);
        --...repeat for every possible type
        end if;
    end loop;   
end;
/


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. sql . में दो तिथियों के बीच अंतर

  2. SQL त्रुटि:ORA-02298:मान्य नहीं कर सकता (SYSTEM.AEROPUERTO_FK) - पैरेंट कुंजियाँ नहीं मिलीं

  3. काउंट (*) ठीक से काम नहीं कर रहा है

  4. Oracle पर संस्करण योग्य दृश्य बनाएं

  5. ऑरैकल डेटाबेस में बने रहते हुए समवर्ती अनुरोध को संभालना?