当前位置: 首页 > 面试题库 >

PL / SQL从自定义查询中提取SELECT语句列名称

郑高驰
2023-03-14
问题内容

我有一个自定义查询,我需要知道如何从中提取列名。我已经在寻找任何方法来做到这一点:

  • 正则表达式:我已经构建了这个程序,以或多或少地获得我想要的东西,但是它不起作用(我使用的是Toad 12.6.0.53)。

这是我尝试测试我的正则表达式的代码:

DECLARE
  v_SQL VARCHAR2(32767 CHAR);
  v_Result VARCHAR2(32767 CHAR);
BEGIN 
  v_SQL := 'SELECT 
  ALIASBASE.CDCMPANY, 
  ALIASBASE.PAFCODCTR, 
  ALIASBASE.PAFDTSCAD, 
  NUMFLUSSO.NUMERO, 
  ALIASBASE.PAFDESC, 
  ALIASBASE.PAFTYPE, 
  ALIASBASE.PAFNATURE, 
  ALIASBASE.PAFRECEIV, 
  ALIASBASE.PAFCAUSAL, 
  ALIASBASE.PAFCODDNE, 
  ALIASBASE.PAFMATURITY
  FROM ALBSIAE';

  BEGIN
    SELECT 
      REGEXP_SUBSTR (v_SQL, '(?:\s*(?=\w+\.|.*as\s+|)(\*|\w+)(?=\s*(?=,|from)))',1, NULL,'i') REGEX_RESULT 
    INTO
      v_Result
    FROM DUAL;
  END;

  DBMS_OUTPUT.put_line('v_Result: ' || v_Result);
END;

但是最后,v_Result为空。

  • 另一种方法是在我的表列之间循环,正如我在这里所看到的,但我认为情况并非如此。

因此,我想知道是否还有其他方法可以执行此操作,我对正则表达式是否有错?里面有什么问题吗?Oracle是否具有其他正则表达式语法?


问题答案:

您可以解析的发言 DBMS_SQL.PARSE ,并获得与列 DBMS_SQL.describe_columns

DECLARE
  v_SQL VARCHAR2(32767 CHAR);
  v_Result VARCHAR2(32767 CHAR) := '';
  l_cursor        PLS_INTEGER;
  l_col_cnt       PLS_INTEGER;
  i               PLS_INTEGER;
  l_desc_tab      DBMS_SQL.desc_tab;
BEGIN 
  v_SQL := q'[SELECT 1 as "MY_NUMBER", 'z' as "MY_CHAR" from dual]';
  l_cursor := DBMS_SQL.open_cursor;
  DBMS_SQL.parse(l_cursor, v_SQL, DBMS_SQL.native);
  DBMS_SQL.describe_columns(l_cursor, l_col_cnt, l_desc_tab);

  FOR i IN 1 .. l_col_cnt LOOP
    v_Result := v_Result ||' ' || l_desc_tab(i).col_name;
  END LOOP;

  DBMS_OUTPUT.put_line('v_Result: ' || v_Result);

END;
/


 类似资料:
  • 问题内容: 我在Oracle数据库11g中使用Pl / SQL。 我正在编写一个将select语句作为参数(varchar2)的函数。该函数使用for循环遍历行并将格式应用于特定的列,并输出整个内容。基本上,我需要某种方式来获取列名,以便可以在顶部显示它们。我知道有多种方法可以对表执行此操作,但是由于传入了此查询,因此可能未选择所有列,可能已使用别名等。 有没有一种方法可以从此查询中选择列名? 理

  • 问题内容: 我想重命名表达式结果中的列。当然,以下操作无效: 由于我是SQL的新手,我想我只是缺少一个会导致答案的概念,工具或关键字。向正确方向的提示将不胜感激。谢谢! 更新 我正在寻找一种实现此目的的通用方法,并且特定于MySQL的技术绝对可以。 简而言之,我正在编写一个工具,用于将MySQL查询的结果“导出”到Google Spreadsheets(通过Google Data API)。有些查

  • 1. 简介 分析云作为企业进行全域用户行为数据分析的数据中台,需要满足企业不同业务角色的各类差异化分析需求。 其中,对于企业深度结合业务模式的定制化需求,分析云平台提供了“自定义SQL查询”的功能,支持业务人员自行编辑复杂的 SQL 查询语言,实现对平台数据仓库中最底层的细粒度用户行为数据进行分析操作,以获取当前分析云平台既有数据模型无法覆盖的个性化分析需求的结果。 2. 使用说明 当前 sql

  • 问题内容: 我有这个查询,我想选择那个选择的反函数。 有没有简单的方法可以解决我的问题? 问题答案: 只需使用以下查询:

  • 我有一个庞大的代码库,其中包含大量JAVA和。sql文件。我打算从所有这些文件中提取所有SQL语句。 这是我打算实现这一目标的方式- 构建一个正则表达式文件,其中包含我打算提取的选择、插入、删除、更新等模式。 在代码库中逐行解析文件并与Regex匹配。如果找到匹配,则注册代码行、文件名、模式等。 当SQL查询被分成多行时,就会出现问题。 我正在使用java。util。正则表达式。Matcher和j

  • 问题内容: 我有一个带下表的sqlite数据库: 两个示例记录如下所示: (大麦的球队输了,安娜的赢了。每场比赛每队都有几名球员。)我想创建一个查询,该查询将返回所有有x个玩家在一个团队而y个玩家在另一个团队的游戏,以及这些游戏的累积结果。游戏。 我知道如何使用perl和csv文件来执行此操作,并且我相信我可以对dbi接口使用相同的方法。但是,我想学习如何仅使用SQL查询来创建此报告。我是SQL的