sql >> Database >  >> RDS >> Oracle

Oracle-object selecteren met verzameling van objecten zonder bulkverzameling

Je hebt hier meerdere opties. U kunt uw query openen als een expliciete cursor en vervolgens FETCH...BULK COLLECT IN een geschikte verzameling; u kunt IMMEDIATE UITVOEREN...BULK COLLECT INTO gebruiken; of, zoals je zegt dat je het niet wilt horen, je kunt DBMS_SQL gebruiken.

Om IMMEDIATE UITVOEREN...BULK COLLECT te gebruiken, gebruik je zoiets als

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 hier

documenten hier (vanaf 10.1 - betere beschrijving dan latere versies IMO)



  1. Hoe "X Rows Selected" in SQLcl &SQL*Plus (Oracle) te verwijderen

  2. Afbeelding ophalen uit Oracle DB

  3. Hoe PgBackRest te installeren

  4. Preventie tegen MySQL-injectie