列名作为PL / SQL ORACLE中的变量

时间:2014-08-07 12:42:26

标签: oracle plsql

我想要一个代码,我将列名称声明为变量,然后使用此变量从某个表中检索所需的列。

DECLARE
col_n VARCHAR (100) := 'X' ;
BEGIN
select col_n from my_table;
END;

Oracle中最简单明了的方法是什么?

3 个答案:

答案 0 :(得分:12)

您可以使用dynamic sql执行您构造为字符串的查询。 它会沿着这些方向发展:

DECLARE
col_n VARCHAR (100) := 'X' ;
plsql_block VARCHAR2(500);
BEGIN
    plsql_block := 'select ' || col_n  || ' from my_table';
    EXECUTE IMMEDIATE plsql_block;
END;

答案 1 :(得分:3)

您可以使用动态sql:

DECLARE
  col_n VARCHAR (100) := 'X' ;
  l_cursor sys_refcursor;
  l_temp number(10); -- won't work if the col_n column has different type
BEGIN
  open l_cursor for 'select '|| col_n ||' from my_table';
  loop
    fetch l_cursor into l_temp;
    exit when l_cursor%NOTFOUND;
    ...
  end loop;
END;

问题是您必须确定列的类型。

实际上,如果您使用SQL * Plus环境,还有一种方法可以做到这一点:

SQL> select &&col_n from employees where &&col_n = 199;
Enter value for col_n: employee_id
old   1: select &&col_n from employees where &&col_n = 199
new   1: select employee_id from employees where employee_id = 199

EMPLOYEE_ID
-----------
        199

答案 2 :(得分:0)

您必须使用动态sql / query来实现您要执行的操作。使用EXECUTE IMMEDIATE下面的内容。概念取自Here

DECLARE col_n VARCHAR(100) := 'X';
DECLARE sql VARCHAR(100);
BEGIN
sql := 'select :p1 from my_table;'
EXECUTE IMMEDIATE sql USING col_n;
END;

如下面的SQL * Plus

DECLARE col_n VARCHAR(100) := 'X';
DECLARE sql VARCHAR(100);
BEGIN
sql := 'select ' || col_n || ' from my_table;'
EXECUTE IMMEDIATE sql;
END;