我在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子句。