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

Избиране на обект на Oracle с колекция от обекти без групово събиране

Тук имате няколко възможности. Можете да отворите вашата заявка като явен курсор и след това FETCH...BULK COLLECT INTO подходяща колекция; можете да използвате EXECUTE IMMEDIATE...BULK COLLECT INTO; или, както казвате, че не искате да чувате, можете да използвате DBMS_SQL.

За да използвате EXECUTE IMMEDIATE...BULK COLLECT, трябва да използвате нещо като

CREATE TABLE DATA_TABLE(FIELD1         NUMBER,
                        FIELD2         VARCHAR2(100));

INSERT INTO DATA_TABLE (FIELD1, FIELD2)
  SELECT 1, 'ONE' FROM DUAL UNION ALL
  SELECT 1, 'TWO' FROM DUAL UNION ALL
  SELECT 2, 'THREE' FROM DUAL UNION ALL
  SELECT 2, 'FOUR' FROM DUAL UNION ALL
  SELECT 3, 'LAST' FROM DUAL;

DECLARE
  TYPE typeCol IS TABLE OF DATA_TABLE%ROWTYPE;
  colVals        typeCol;
  strField_name  VARCHAR2(30) := 'FIELD1';
  nField_val     NUMBER := 2;

  strQuery       VARCHAR2(4000);
BEGIN
  strQuery := 'SELECT * FROM DATA_TABLE WHERE ' || strField_name || '=' || nField_val;

  DBMS_OUTPUT.PUT_LINE(strQuery);

  EXECUTE IMMEDIATE strQuery BULK COLLECT INTO colVals;

  FOR i IN colVals.FIRST..colVals.LAST LOOP
    DBMS_OUTPUT.PUT_LINE(i || ': FIELD1=' || colVals(i).FIELD1 || '  FIELD2=' || colVals(i).FIELD2);
  END LOOP;
END;
/

dbfiddle тук

документи тук (от 10.1 - по-добро описание от по-нови версии IMO)



  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. Прекъсвайте равни периоди в края на месеца

  3. Oracle Dynamic Pivoting

  4. Как да показвате коментари на колона с операция desc

  5. Oracle групира част от реда и получава ред с последно клеймо за време