首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >先端选择列表值作为列名

先端选择列表值作为列名
EN

Stack Overflow用户
提问于 2022-11-04 05:51:17
回答 1查看 23关注 0票数 0

我有一个具有静态值的选择列表(:P31_LIST) (column1、column2、column3)和一个具有相同列名的表。

如何使用选择列表将数据选择并插入到用户选择的表的列中?如何将select列表的值用作列表名?我尝试了这个查询,但是没有插入或选择数据:

代码语言:javascript
运行
复制
-- Select
select column1, :P31_LIST,
---Tried also this
case when :P31_LIST= 'column1' then (select column1 from my_table) END as test,

from my_table

-插入my_table(:P31_LIST,column2),从source_table中选择A、B

my_table看起来是这样的:

代码语言:javascript
运行
复制
column1 | column2 | column3
   1    |     2   |     3
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-04 08:25:56

对于SELECT,您可以使用CASE表达式并将列名白名单:

代码语言:javascript
运行
复制
select column1,
       CASE :P31_LIST
       WHEN 'column1' THEN column1
       WHEN 'column2' THEN column2
       WHEN 'column3' THEN column3
       ELSE NULL
       END AS value
from   my_table

或者,在PL/SQL块中使用动态SQL:

代码语言:javascript
运行
复制
DECLARE
  v_sql CLOB := 'select column1, ' || :P31_LIST || ' AS value from my_table';
BEGIN
  FOR r IN v_sql LOOP
    DBMS_OUTPUT.PUT_LINE( r.column1 || ', ' || r.value);
  END LOOP;
END;
/

对于INSERT,请使用PL/SQL:

代码语言:javascript
运行
复制
BEGIN
  EXECUTE IMMEDIATE 'INSERT INTO my_table(' || :P31_LIST || ', column2) SELECT A, B FROM source_table';
END;
/

或者白名单列:

代码语言:javascript
运行
复制
BEGIN
  IF :P31_LIST = 'column1' THEN
    INSERT INTO my_table(column1, column2) SELECT A, B FROM source_table;
  ELSIF :P31_LIST = 'column3' THEN
    INSERT INTO my_table(column3, column2) SELECT A, B FROM source_table;
  END IF;
END;
/
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74312730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档