sql >> Database >  >> RDS >> Oracle

for loop in een cursororakel

Een cursor wordt altijd geopend op een SELECT-instructie. Er is, voor zover ik weet, geen manier om een ​​cursor te openen op een FOR lus.

Het lijkt erop dat je echt dynamisch een SELECT-instructie wilt maken. Ik stel iets als het volgende voor:

PROCEDURE p_get_xxx(p_id IN VARCHAR2, p_cur_result OUT SYSREFCURSOR)
AS
  l_array schema_name.t_array;
  strSelect_statement  VARCHAR2(4000);
BEGIN
  l_array := split_string(p_id);

  -- Set up the basics of the SELECT statement

  strSelect_statement := 'SELECT * FROM SOME_TABLE WHERE ID IN (';

  FOR i IN l_array.FIRST..l_array.LAST LOOP
    strSelect_statement := strSelect_statement ||
                             '''' || l_array(i) || ''',';
  END LOOP;

  -- Get rid of the unwanted trailing comma

  strSelect_statement := SUBSTR(strSelect_statement, 1,
                                  LENGTH(strSelect_statement)-1);

  -- Add a right parentheses to close the IN list

  strSelect_statement := strSelect_statement || ')';

  -- Open the cursor

  OPEN p_cur_result FOR strSelect_statement;
END p_get_xxx;

Veel succes.




  1. quote_ident() voegt eerst geen aanhalingstekens toe aan de kolomnaam

  2. Onverwachte SQL-query's naar Postgres-database op Rails/Heroku

  3. Ingesloten of beheerde Oracle-instantie voor integratietests

  4. Probleem met het uitvoeren van de procedure in het spring bootschema.sql-bestand