Oracle Python在其他选择中使用选择结果作为列名称

时间:2016-07-22 01:35:32

标签: python sql oracle

我在python中使用cx oracle模块。我有两个看起来像这样的表:

第一桌:

|  parameter   |   context  |
+--------------+------------+
|      a       |  column_1  | 
|      b       |  column_2  |

第二

|id|  column_1      |  column_2   |
+--+----------------+-------------+
| 1|  bla1          |  (NULL)     | 
| 2|  bla2          |  (NULL)     | 
| 3|  (NULL)        |  (nla1)     | 
| 4|  (NULL)        |  (nla2)     | 

输入是: a, nla1如果我想从第二个表中返回id = 3,如何创建查询?

表结构已经是这样了。我无法改变它。

2 个答案:

答案 0 :(得分:2)

  

" column_name是变量的,如果参数a可以是column1但是如果参数b"

可以是column2

使用常规SQL无法编写这样的语句:您需要动态,这意味着PL / SQL。 Find out more

简单的实现是这样的:

create or replace function get_id is
     (p_param_col in varchar2
      , p_param_val in varchar2)
    return number
is
    l_col_name varchar2(30);
    return_value number;
begin
    select context into l_col_name
    from table_1
    where parameter = p_param_col;

    execute immediate 'select id from table_2 where '
            || l_col_name || ' = :1'
         into return_value
         using p_param_val;

   return return_value;
end;

答案 1 :(得分:0)

使用动态SQL在运行时设计查询,然后使用EXECUTE IMMEDIATE子句。