Oracle Python使用Select结果作为其他Select中的列名
我正在python中使用cx oracle模块。我有两张表,看起来像这样:Oracle Python使用Select结果作为其他Select中的列名,python,sql,oracle,Python,Sql,Oracle,我正在python中使用cx oracle模块。我有两张表,看起来像这样: 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_n
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;
第一表:
| parameter | context |
+--------------+------------+
| a | column_1 |
| b | column_2 |
第二:
输入为:
a,nla1
那么如果我想从第二个表返回id=3
,如何创建查询
表结构已经是这样了。我无法更改它。使用动态SQL在运行时设计查询,然后执行立即子句。使用动态SQL在运行时设计查询,然后执行立即子句 “列_名称是可变的,如果参数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;
“列_名称是可变的,如果参数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;
请添加更多细节。有问题吗?嗨,我编辑了问题。请添加更多细节。有问题吗?嗨,我编辑了问题。这将如何完成?你们介意举个例子吗?为了不重复,这和APC的答案完全一样。无需创建SP,您可以在一个无限块中编写查询。这将如何完成?你们介意举个例子吗?为了不重复,这和APC的答案完全一样。而且不需要创建SP,您可以在一个有限的块中编写查询。如果我为此创建一个存储过程会更好吗?由于需要使用cx oracle模块从python调用此函数/sp,我认为在python脚本中创建此函数会更麻烦。如果为此创建存储过程会更好吗?因为这个函数/sp需要使用cx oracle模块从python中调用,所以我认为在python脚本中创建这个函数会更麻烦。