[英]PL/SQL extract SELECT statement column names from custom query
我有一個自定義查詢,我需要知道如何從中提取列名。 我已經在尋找任何方法來做到這一點:
這是我嘗試測試我的正則表達式的代碼:
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;
/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.