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



我在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,如何创建查询?

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

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

用常规SQL编写这样的语句是不可能的:您需要动态,这意味着PL/SQL。了解更多信息。

简单化的实现是这样的:

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;

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