【问题标题】:Oracle Python Use Select Result as Column Name in other selectOracle Python 在其他选择中使用选择结果作为列名
【发布时间】:2016-07-22 01:35:32
【问题描述】:

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

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

【问题讨论】:

  • 请添加更多详细信息。
  • 问题吗?
  • 嗨,我已经编辑了问题

标签: python sql oracle


【解决方案1】:

“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;

【讨论】:

  • 如果我为此创建一个存储过程会更好吗?因为这个函数/sp需要使用cx oracle模块从python调用我相信如果在python脚本中创建它会更麻烦。
【解决方案2】:

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

【讨论】:

  • 这将如何完成?你介意举个例子吗?
  • 为了不重复,这与 APC 的答案完全相同。并且不需要创建 SP,您可以在匿名块中编写查询。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多