一尘不染

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

sql

我有一个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的新手,尝试在此处使用字符串变量值的整个概念很可能是错误的。我浏览了一些教程,并尝试了其他一些想法(例如,游标),但没有结果。任何想法表示赞赏


阅读 239

收藏
2021-05-16

共1个答案

一尘不染

假设使用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;
2021-05-16