SQL动态连接到用户/数据提供表

时间:2011-12-13 00:28:20

标签: sql oracle dynamic join oracle11g

我想要类似的东西:

SELECT * from metric_data m, 
    (SELECT table_for_join FROM join_tables WHERE from_table = 'usersupplied') u,
    WHERE m.id = u.id

这可能吗?

如果重要,我正在使用oracle 11g。

2 个答案:

答案 0 :(得分:2)

我认为你需要使用动态sql。这样的事情(抱歉,我现在无法测试它,但我希望它能够正常工作

CREATE PROCEDURE getMetricData (in_table_name varchar2)
IS 
  real_tab_name varchar(32);
BEGIN
  SELECT table_for_join into real_tab_name 
  FROM join_tables WHERE from_table = in_table_name;
  IF (real_tab_name IS NOT NULL) THEN
  EXECUTE IMMEDIATE 'SELECT * from metric_data m, ' || real_tab_name || ' u 
   WHERE m.id = u.id';
  END IF;
END;

答案 1 :(得分:0)

SELECT m.* from metric_data m
LEFT JOIN join_tables u
ON(m.id = u.id AND u.from_table='usersuplied')
WHERE 1=1