暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 将表的列名读取到arrey中

ASKTOM 2019-11-22
292

问题描述

塞尔维斯·汤姆,
我经常阅读您的博客,它对我学习PL/SQL有很大帮助
现在,我想做这样的事情:

declare
  type l_array is table of varchar2(30) index by binary_integer;
  l_column_count NUMBER;
  i NUMBER;
begin
  select count(*)
  INTO   l_column_count 
  from   user_tab_columns 
  where table_name='ARTIKEL';
  
  FOR i IN 0..l_column_count-1
  LOOP
  select COLUMN_NAME INTO l_array(i) from ALL_TAB_COLUMNS where TABLE_NAME='ARTIKEL';
  
    dbms_output.put_line('Das Array hat '|| l_array(i) ||' Werte.');
  END LOOP;
end;
/
复制


1.读取并存储表有多少列
2.从索引i := 0循环到列号-1,索引从0开始到…。
3.将列的名称保存到数组中

在Oracle文档中
https://docs.oracle.com/cd/B28359_01/server.111/b28320/statviews_2091.htm
我看到了定义
COLUMN_NAME VARCHAR2(30) 不为空列名

我从您那里找到了一些类似的帖子,但不完全是这样。作为初学者,很难将您写的内容抽象为类似的问题。

非常感谢您的帮助!

亲切的问候
迈克尔

专家解答

这里有几个问题:

1.不需要先数几列!数组包括计数方法
2. PL/SQL关联数组索引从1开始,而不是零
3.您可以使用批量处理将行选择到数组中

还要注意: l_array声明为类型,而不是变量。

解决此问题的最简单方法是:

-用数组类型声明一个变量
-批量将查询收集到此变量中
-如果要查看其中的值,请从1循环到ARR.COUNT并输出它们

所有这些都给出了:

create table t ( 
  c1 int, c2 date, c3 varchar2(10)
);

set serveroutput on
declare
  type t_array is table of varchar2(30) 
    index by pls_integer;
    
  l_array t_array;
begin
  select column_name
  bulk collect into l_array
  from   user_tab_columns 
  where  table_name='T';
  
  FOR i IN 1 .. l_array.count 
  LOOP
    dbms_output.put_line('Das Array hat '|| l_array(i) );
  END LOOP;
end;
/

Das Array hat C1
Das Array hat C2
Das Array hat C3
复制


批量加工有更多的动力。要了解更多信息,请阅读https://blogs.oracle.com/oraclemagazine/bulk-processing-with-bulk-collect-and-forall
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论