2014-02-07 70 views
1

我有一个SQL过程,它应执行FOR-IN(SELECT ..)循环,其中SELECT内容应根据某些输入参数。我的想法是将SELECT字符串存储到一个变量中,然后尝试在FOR-IN循环中提取变量值,但目前为止没有成功(以前有一个修复的SELECT语句用于那里,这就是我现在要替换的)。代码看起来大致如下在SQL 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相当新手,很可能发生的试图在这里使用一个字符串变量值的整个概念是错误的。我浏览了一些教程并尝试了一些其他想法(例如游标),但没有结果。任何想法表示赞赏

+0

该平台是Oracle。 FOR循环基本上除了使用p_table_name.table_name进行日志打印外没有其他任何操作 – hammerfest

回答

5

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