我需要从一个表中获取一个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专家,这看起来很简单,但是我不知道如何实现。
答案 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;
这是从内存中提取的,因此可能无法正常工作,但应该为您提供一个良好的开始方法