PLSQL - 如何计算动态查询返回的列数[重复]

Posted

技术标签:

【中文标题】PLSQL - 如何计算动态查询返回的列数[重复]【英文标题】:PLSQL - How to count the number of columns returned by dynamic query [duplicate] 【发布时间】:2018-11-28 16:29:29 【问题描述】:

我将查询作为 VARCHAR 返回,例如。

varchar_query := 'select unit_id, cart_id from unit';

但我不知道会返回多少列,因为查询是动态的。我也不知道列的数据类型。 在这种情况下,我希望结果返回 2。我正在使用 PL/SQL,非常感谢任何帮助。

【问题讨论】:

这应该会告诉你方向:***.com/a/42564330/1367722 @TenG 这正是我一直在寻找的......我一直看到其他论坛引用 DESCRIBE_COLUMNS 使用 DBMS_SQL 但不知道如何实现它。非常感谢。 【参考方案1】:

简单示例:

declare 
  varchar_query varchar(1000) := 'select * from user_tables';
  my_cursor sys_refcursor;
  columns_count number;
  describe_Table dbms_sql.desc_tab;
  cursor_number integer;
begin
  open my_cursor for varchar_query;
  cursor_number := dbms_sql.to_cursor_number(my_cursor);
  dbms_sql.describe_columns(
         c       => cursor_number,
         col_cnt => columns_count,
         desc_t  => describe_Table 
  );
  dbms_output.put_line( 'The result of query has ' || columns_count || ' columns' );
  dbms_output.put_line( '=== list of columns =====' );
  for i in 1 .. columns_count loop
     dbms_output.put_line( describe_Table(i).col_name );
  end loop;
  DBMS_SQL.CLOSE_CURSOR( cursor_number );
end;
/

结果:

The result of query has 64 columns
=== list of columns =====
TABLE_NAME
TABLESPACE_NAME
CLUSTER_NAME
IOT_NAME
STATUS
PCT_FREE
PCT_USED
INI_TRANS
MAX_TRANS
INITIAL_EXTENT
NEXT_EXTENT
MIN_EXTENTS
MAX_EXTENTS
PCT_INCREASE
FREELISTS
FREELIST_GROUPS
LOGGING
BACKED_UP
NUM_ROWS
BLOCKS
EMPTY_BLOCKS
AVG_SPACE
CHAIN_CNT
AVG_ROW_LEN
AVG_SPACE_FREELIST_BLOCKS
NUM_FREELIST_BLOCKS
DEGREE
INSTANCES
CACHE
TABLE_LOCK
SAMPLE_SIZE
LAST_ANALYZED
PARTITIONED
IOT_TYPE
TEMPORARY
SECONDARY
NESTED
BUFFER_POOL
FLASH_CACHE
CELL_FLASH_CACHE
ROW_MOVEMENT
GLOBAL_STATS
USER_STATS
DURATION
SKIP_CORRUPT
MONITORING
CLUSTER_OWNER
DEPENDENCIES
COMPRESSION
COMPRESS_FOR
DROPPED
READ_ONLY
SEGMENT_CREATED
RESULT_CACHE
CLUSTERING
ACTIVITY_TRACKING
DML_TIMESTAMP
HAS_IDENTITY
CONTAINER_DATA
INMEMORY
INMEMORY_PRIORITY
INMEMORY_DISTRIBUTE
INMEMORY_COMPRESSION
INMEMORY_DUPLICATE

【讨论】:

以上是关于PLSQL - 如何计算动态查询返回的列数[重复]的主要内容,如果未能解决你的问题,请参考以下文章

计算列组中的列数

SqlServer如何查询表的列数

查询以计算 Sql Server 视图中的列数

返回的列数会影响查询的速度吗?

plsql的odbc如何删除不需要的列

如何计算 pyspark RDD 中的列数?