PL/SQL ORACLE中作为变量的列名
我希望有一个代码,其中我将声明一个列名为变量,然后使用此变量从某个表中检索所需的列PL/SQL ORACLE中作为变量的列名,oracle,plsql,Oracle,Plsql,我希望有一个代码,其中我将声明一个列名为变量,然后使用此变量从某个表中检索所需的列 DECLARE col_n VARCHAR (100) := 'X' ; BEGIN select col_n from my_table; END; 在Oracle中,最简单和明确的方法是什么?您可以使用它来执行构造为字符串的查询。 它将沿着以下思路发展: DECLARE col_n VARCHAR (100) := 'X' ; plsql_block VARCHAR2(500); BEGIN pls
DECLARE
col_n VARCHAR (100) := 'X' ;
BEGIN
select col_n from my_table;
END;
在Oracle中,最简单和明确的方法是什么?您可以使用它来执行构造为字符串的查询。
它将沿着以下思路发展:
DECLARE
col_n VARCHAR (100) := 'X' ;
plsql_block VARCHAR2(500);
BEGIN
plsql_block := 'select ' || col_n || ' from my_table';
EXECUTE IMMEDIATE plsql_block;
END;
您可以使用动态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
您必须使用动态sql/query来实现您要做的事情。使用
立即执行
,如下所示。概念取自
下面是SQL*Plus的示例
DECLARE col_n VARCHAR(100) := 'X';
DECLARE sql VARCHAR(100);
BEGIN
sql := 'select ' || col_n || ' from my_table;'
EXECUTE IMMEDIATE sql;
END;
这样做是不可能的。您必须使用动态查询。您可以尝试执行如下所示的立即命令:@Zaratutra,因为没有“选择进入”,这是不正确的。抱歉,我没有看到这一点,但是如何才能在没有
进入的情况下选择?@Zaratutra-执行选择,但不返回任何值。另一种方法是执行类似于执行立即“选择”| col|n |“从my|u表”到某个_变量的操作
,或者执行立即“选择”| col|n |“从my|u表”批量收集到某个_集合
。分享和享受。有趣的事实是,我认为如果没有进入
条款,就不可能进行查询。我很确定您的意思是在我的表中选择
后和前有一个单引号。
。您可以使用包DBMS\U SQL检索列类型,但是,您必须再编写几行代码。这将导致从MY_TABLE
中选择“X”,但不选择列“X”。此外,如上所示的参数仅在SQL*Plus中有效,而问题标记为PL/SQL。
DECLARE col_n VARCHAR(100) := 'X';
DECLARE sql VARCHAR(100);
BEGIN
sql := 'select ' || col_n || ' from my_table;'
EXECUTE IMMEDIATE sql;
END;