在SQLFOR-in(SELECT)循环中使用字符串变量的值

在SQLFOR-in(SELECT)循环中使用字符串变量的值,sql,string,oracle,plsql,cursor,Sql,String,Oracle,Plsql,Cursor,我有一个SQL过程,它应该执行FOR-IN(SELECT..)循环,其中SELECT内容应该根据一些输入参数而变化。我的想法是将SELECT字符串存储到一个变量中,然后尝试在FOR-in循环中提取变量值,但到目前为止没有成功(之前这里使用了一个fix SELECT语句,这就是我现在尝试替换的内容)。代码如下所示 PROCEDURE run(p_boolean BOOLEAN) IS BEGIN DECLARE v_mystring VARCHAR(50); BEGIN I

我有一个SQL过程,它应该执行FOR-IN(SELECT..)循环,其中SELECT内容应该根据一些输入参数而变化。我的想法是将SELECT字符串存储到一个变量中,然后尝试在FOR-in循环中提取变量值,但到目前为止没有成功(之前这里使用了一个fix 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的新手,这里尝试使用字符串变量值的整个概念很可能是错误的。我浏览了一些教程,尝试了一些其他的想法(例如游标),但没有结果。任何想法都值得赞赏

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

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;

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

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;

平台是Oracle。FOR循环基本上只使用p_table_name.table_name记录打印输出。平台是Oracle。FOR循环基本上只使用p_table_name.table_name记录打印输出