我有一个具有静态值的选择列表(:P31_LIST) (column1、column2、column3)和一个具有相同列名的表。
如何使用选择列表将数据选择并插入到用户选择的表的列中?如何将select列表的值用作列表名?我尝试了这个查询,但是没有插入或选择数据:
-- 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看起来是这样的:
column1 | column2 | column3
1 | 2 | 3
发布于 2022-11-04 08:25:56
对于SELECT
,您可以使用CASE
表达式并将列名白名单:
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:
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:
BEGIN
EXECUTE IMMEDIATE 'INSERT INTO my_table(' || :P31_LIST || ', column2) SELECT A, B FROM source_table';
END;
/
或者白名单列:
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;
/
https://stackoverflow.com/questions/74312730
复制相似问题