在SQLFOR-in(SELECT)循环中使用字符串变量的值
我有一个SQL过程,它应该执行FOR-IN(SELECT..)循环,其中SELECT内容应该根据一些输入参数而变化。我的想法是将SELECT字符串存储到一个变量中,然后尝试在FOR-in循环中提取变量值,但到目前为止没有成功(之前这里使用了一个fix 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
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记录打印输出