【问题标题】:Use the value of a string variable in SQL FOR-IN (SELECT) loop在 SQL FOR-IN (SELECT) 循环中使用字符串变量的值
【发布时间】:2014-03-05 02:41:47
【问题描述】:

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

【问题讨论】:

  • 平台是Oracle。 FOR 循环基本上除了使用 p_table_name.table_name 记录打印输出之外什么也不做

标签: sql string oracle plsql cursor


【解决方案1】:

假设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;

【讨论】:

    猜你喜欢
    • 2020-12-24
    • 1970-01-01
    • 2013-09-29
    • 1970-01-01
    • 2020-05-22
    • 1970-01-01
    • 1970-01-01
    • 2020-05-22
    • 1970-01-01
    相关资源
    最近更新 更多