oracle PL/SQL如何在存储过程中使用一组特定的字符串(列)作为列名,(列名以','分隔)

d5vmydt9  于 2023-08-03  发布在  Oracle
关注(0)|答案(1)|浏览(123)

我有一个存储在字符串中的列列表:

str VARCHAR2(100) = 'col1, col2, col3';

字符串
而我要执行的操作如:

SELECT <columns from str> FROM source_table;


我需要知道如何从str中访问这些列,并且可以用来访问只包含所需列的源表。
有什么办法吗?

zyfwsgd6

zyfwsgd61#

试试这个小例子来帮助你理解它。
创建表格

CREATE TABLE src_tbl
(
  COL1  NUMBER,
  COL2  VARCHAR2(10 BYTE)
)

字符串
再加几行

Insert into src_tbl (COL1, COL2) Values (1, 'item1');
Insert into src_tbl (COL1, COL2) Values (2, 'item2');
COMMIT;


运行这个块,它在变量中定义一个列列表,动态构建查询,然后运行它,将输出放入一个记录中,然后打印。
注意这个例子非常简单,只适用于一个匹配的记录。要返回多条记录,您需要返回到一个集合中,但这超出了本文的范围。

declare
  col_list VARCHAR2(100) := 'col2, col1';
  stmt varchar2(500);
  src_tbl_rec src_tbl%ROWTYPE;
begin
  stmt := 'SELECT '|| col_list || ' from src_tbl where col1 = 1';
  execute immediate stmt into src_tbl_rec;
  
  dbms_output.put_line(src_tbl_rec.col1||' - '||src_tbl_rec.col2);
end;


产出

相关问题