我有一个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的PL / SQL,则可以REFCURSOR使用动态字符串打开一个,并在LOOP中调用它。
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;