sql >> Database teknologi >  >> RDS >> Oracle

Valg af Oracle-objekt med samling af objekter uden bulk-indsamling

Du har flere muligheder her. Du kan åbne din forespørgsel som en eksplicit markør og derefter FETCH...BULK COLLECT INTO en passende samling; du kan bruge EXECUTE IMMEDIATE...BULK COLLECT INTO; eller, som du siger, du ikke vil høre, kan du bruge DBMS_SQL.

For at bruge EXECUTE IMMEDIATE...BULK COLLECT skal du bruge noget som

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 her

dokumenter her (fra 10.1 - bedre skrivning end senere versioner IMO)



  1. Mysql select rekursiv få alle børn med flere niveauer

  2. MySQL Skift brugeradgangskode

  3. Hvorfor mislykkes oprettelsen af ​​Foreign Key i Laravel 5.8?

  4. For at finde og erstatte undslupne anførselstegn i MySQL-tabellen