我需要从一个表中获取一个ID,该表的名称是通过运行另一个查询来定义的。
我试图通过定义一个变量来实现它,该变量保存了第一个查询的结果。然后,我创建了第二个查询,该查询使用了第一个查询的表名。
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;
但是,它不起作用。我也尝试创建一个存储过程,但是我也不明白它应该如何工作:
DECLARE
tablename varchar(128);
rowid int;
BEGIN
SELECT table_name INTO tablename FROM tables_names WHERE row_id = 147);
SELECT row_id INTO rowid FROM &tablename WHERE title is NULL;
END;
输出应该给我预期的rowid。我不是Oracle专家,这看起来很简单,但是我不知道如何实现。
用途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;
/
干杯!!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句