我想要一个代码,我将列名称声明为变量,然后使用此变量从某个表中检索所需的列。
DECLARE
col_n VARCHAR (100) := 'X' ;
BEGIN
select col_n from my_table;
END;
Oracle中最简单明了的方法是什么?
答案 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;