Oracle
 sql >> база данни >  >> RDS >> Oracle

for цикъл вътре в оракул на курсора

Курсорът винаги се отваря върху оператор SELECT. Няма начин, доколкото ми е известно, да се отвори курсор върху FOR цикъл.

Изглежда ми, че наистина искате да създадете оператор SELECT динамично. Предлагам нещо като следното:

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;

Успех.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. присъединете се с търсене и групиране

  2. Най-чистият начин за изграждане на SQL низ в Java

  3. Как да дефинирам тригер ON COMMIT в Oracle?

  4. Групирайте, като причинявате огромно увеличение на времето за изпълнение на заявката

  5. Регистрирайте изхода на DBMS_OUTPUT.Put_Line в таблица в Oracle с DBMS_OUTPUT.Get_Lines