如何在选择查询中将变量重用作表名

时间:2019-10-25 13:52:57

标签: sql oracle plsql

我需要从一个表中获取一个ID,该表的名称是通过运行另一个查询来定义的。

我试图通过定义一个变量来实现它,该变量保存了第一个查询的结果。然后,我创建了第二个查询,该查询使用了第一个查询的表名。

em

但是它不起作用。我也尝试创建一个存储过程,但是我也不明白它应该如何工作:

define tablename = (SELECT table_name FROM tables_names WHERE row_id = 147);
define rowid = SELECT row_id FROM &tablename WHERE title is NULL;
select * from &rowid;

输出应该给我预期的rowid。我不是Oracle专家,这看起来很简单,但是我不知道如何实现。

2 个答案:

答案 0 :(得分:1)

使用execute immediate如下:

DECLARE 
    rowid_ int; -- dont use oracle reserved words as variable name. 
    -- added _ after rowid
BEGIN
    EXECUTE IMMEDIATE 'SELECT row_id FROM ' 
    ||  (SELECT table_name FROM tables_names WHERE row_id = 147) 
    || ' WHERE title is NULL' INTO ROWID_;
-- do something with rowid_ or other logic
END;
/

干杯!

答案 1 :(得分:0)

这称为动态sql。 编辑过程并执行

EXECUTE IMMEDIATE 
"SELECT row_id INTO :x FROM " || tablename || " WHERE title IS NULL" 
USING rowid;

这是从内存中提取的,因此可能无法正常工作,但应该为您提供一个良好的开始方法