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

时间:2017-10-02 09:23:07

标签: sql regex oracle plsql

我有一个自定义查询,我需要知道如何从中提取列名。我已经搜索了任何方法:

  • 正则表达式:我已经构建this一个或多或少得到我想要的东西但它不会工作(我使用Toad 12.6.0.53)。

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

TO_CHAR( value, 'L999G999' )

但是结尾v_Result是空的。

  • 另一种方法是在我的表格列之间循环,因为我看过herehere,但我认为不是我的情况。

所以,我想知道是否有其他方法可以做到这一点,我对正则表达式错了吗?这有什么不对吗? Oracle是否有其他正则表达式语法?

1 个答案:

答案 0 :(得分:4)

您可以使用 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;
/