如何在oracle sql中使用另一个变量定义变量

时间:2013-03-22 00:32:07

标签: sql oracle variables plsql

我正在尝试使用另一个变量定义变量。目的是在运行时替换变量中的值。

我不确定我是在问正确的问题还是说出正确的例子。

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;

1 个答案:

答案 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;