我正在尝试使用另一个变量定义变量。目的是在运行时替换变量中的值。
我不确定我是在问正确的问题还是说出正确的例子。
DECLARE param1 VARCHAR(10);
DECLARE param2 VARCHAR(10);
DECLATE tempVar VARCHAR(1):= 'A';
DECLARE query VARCHAR(200) := 'select * from tmp_table where col1 = <variable>';
BEGIN
IF tempVar = 'A' THEN
-- EXECUTE IMMEDIATE query using param 1;
ELSE
-- EXECUTE IMMEDIATE query using param 2;
END IF;
END;
答案 0 :(得分:2)
DECLARE
type tmp_table_arr is table of tmp_table%type;
l_temps tmp_tabe_arr;
param1 VARCHAR(10);
param2 VARCHAR(10);
tempVar VARCHAR(1):= 'A';
query VARCHAR(200) := 'select * from tmp_table where col1 = :val';
BEGIN
IF tempVar = 'A' THEN
EXECUTE IMMEDIATE query
BULK COLLECT INTO l_temps
using param1;
ELSE
EXECUTE IMMEDIATE query
BULK COLLECT INTO l_temps
using param2;
END IF;
END;
在语法上有效,如果tmp_table
存在并且列col1
,则会有效。但是,在这种情况下,没有理由使用动态SQL。您也不需要两个不同的SQL语句
DECLARE
param1 VARCHAR(10);
param2 VARCHAR(10);
tempVar VARCHAR(1):= 'A';
BEGIN
FOR i IN (SELECT *
FROM tmp_table
WHERE col1 = (CASE WHEN tempVar = 'A'
THEN param1
ELSE param2
END))
LOOP
<<do something>>
END LOOP;
END;