Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle Python使用Select结果作为其他Select中的列名_Python_Sql_Oracle - Fatal编程技术网

Oracle Python使用Select结果作为其他Select中的列名

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

我正在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_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脚本中创建这个函数会更麻烦。