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

for sløjfe inde i et markørorakel

En markør åbnes altid på en SELECT-sætning. Der er ingen måde, så vidt jeg ved, at åbne en markør på en FOR sløjfe.

Det ser for mig ud som om du virkelig ønsker at oprette en SELECT-sætning dynamisk. Jeg foreslår noget i stil med følgende:

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;

Held og lykke.




  1. Opdel stor tekst/CSV-fil i flere filer i PL SQL

  2. mysqldump returnerer kode 6, når den køres fra java, men den samme kommando fungerer fint fra kommandolinjen

  3. Tilføj applikationsnavn / programnavn i mysql-forbindelsesstrengen

  4. Tjek om tabeller er identiske ved hjælp af SQL i Oracle