Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Wybór obiektu Oracle z kolekcją obiektów bez zbiorczego zbierania

Masz tutaj kilka opcji. Możesz otworzyć zapytanie jako jawny kursor, a następnie FETCH...BULK COLLECT DO odpowiedniej kolekcji; możesz użyć EXECUTE IMMEDIATE...BULK COLLECT INTO; lub, jak mówisz, nie chcesz słyszeć, możesz użyć DBMS_SQL.

Aby użyć EXECUTE IMMEDIATE...BULK COLLECT, użyj czegoś takiego jak

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 tutaj

dokumenty tutaj (od 10.1 - lepszy opis niż nowsze wersje 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. Wywołanie procedury PL/SQL z rekordem zdefiniowanym przez użytkownika jako parametrem IN przy użyciu JDBC

  2. Mechanizm stosowany przez Oracle podczas wykonywania kopii zapasowych na gorąco

  3. Definiowanie źródła danych jta poza kontenerem

  4. Oracle SQL Developer:Pokaż wyniki REFCURSOR w siatce?

  5. Oracle SQL Developer:Awaria — Test nie powiódł się:Karta sieciowa nie może nawiązać połączenia?