在SQL FOR-IN(SELECT)循环中使用字符串变量的值

时间:2014-02-07 15:43:30

标签: sql string oracle plsql cursor

我有一个SQL过程,它应该执行FOR-IN(SELECT ..)循环,其中SELECT内容应根据某些输入参数而变化。我的想法是将SELECT字符串存储到一个变量中,然后尝试在FOR-IN循环中提取变量值但到目前为止没有成功(之前有一个修复的SELECT语句,那就是我现在要替换的内容) )。代码如下所示

PROCEDURE run(p_boolean BOOLEAN)
IS
BEGIN
  DECLARE
    v_mystring VARCHAR(50);
  BEGIN
    IF p_boolean = TRUE
    THEN
      v_mystring := 'SELECT something...';
    ELSE
      v_mystring := 'SELECT something else...';
    END IF;

    FOR p_table_name IN (would-like-to-use-the-value-of-v_mystring-here-some-way)
    LOOP
      ...
    END LOOP;

  END;
END;

在SQL中相当新手,很可能会发生尝试在这里使用字符串变量值的整个概念是错误的。我浏览了一些教程并尝试了其他一些想法(例如光标),但没有结果。任何想法都表示赞赏

1 个答案:

答案 0 :(得分:5)

假设使用Oracle的PL / SQL,您可以使用动态字符串打开REFCURSOR并在LOOP中调用它。

PROCEDURE run(p_boolean BOOLEAN)
IS
BEGIN
  DECLARE
    v_mystring VARCHAR(50);
    v_my_ref_cursor sys_refcursor;
  BEGIN
    IF p_boolean = TRUE
    THEN
      v_mystring := 'SELECT something...';
    ELSE
      v_mystring := 'SELECT something else...';
    END IF;

    OPEN v_my_ref_cursor FOR v_mystring;

    LOOP
      FETCH v_my_ref_cursor INTO your_variables/record
      EXIT WHEN v_my_ref_cursor%NOTFOUND;
        ..

    END LOOP;
    CLOSE v_my_ref_cursor;

  END;
END;