包含列名的变量的PLSQL场景
我是PLSQL新手,希望在dbms中显示。输出未知数量的列(列名列表在定义的变量中)。在示例中,它是两列,并且预期结果是两个不同的行。我已经创建了下面的代码,我认为这可能是可行的,但我认为这远远不是正确的包含列名的变量的PLSQL场景,plsql,Plsql,我是PLSQL新手,希望在dbms中显示。输出未知数量的列(列名列表在定义的变量中)。在示例中,它是两列,并且预期结果是两个不同的行。我已经创建了下面的代码,我认为这可能是可行的,但我认为这远远不是正确的 DECLARE v_TEMP_QUERY VARCHAR2 (1000 BYTE); v_TEMP_VALUE VARCHAR2 (1000 BYTE) := 'FILTER_01, FILTER_02'; BEGIN FOR v_TEMP_LOOP IN
DECLARE
v_TEMP_QUERY VARCHAR2 (1000 BYTE);
v_TEMP_VALUE VARCHAR2 (1000 BYTE) := 'FILTER_01, FILTER_02';
BEGIN
FOR v_TEMP_LOOP IN
(v_TEMP_QUERY := 'SELECT DISTINCT ' || v_TEMP_VALUE || ' FROM CW_PAGE_COMPONENT_TEMPL WHERE COMPONENT_TEMPL_ID = 10000034642';
EXECUTE IMMEDIATE v_TEMP_QUERY;)
LOOP
DBMS_OUTPUT.PUT_LINE (v_TEMP_LOOP.v_TEMP_VALUE);
END LOOP;
END;
提前感谢您的帮助和建议
Sebastian您不能使用
executeimmediate
检索未知数量的列。要实现这一点,您需要使用。对于动态SQL的高级使用,您需要。即功能
下面是一个简单的例子:
declare
query VARCHAR(200) := 'SELECT 1 a, 2 b FROM DUAL';
c INTEGER;
rec_tab DBMS_SQL.DESC_TAB;
col_cnt INTEGER;
col_num NUMBER;
begin
c := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(c, query, DBMS_SQL.NATIVE);
DBMS_SQL.DESCRIBE_COLUMNS(c, col_cnt, rec_tab);
DBMS_OUTPUT.PUT_LINE(col_cnt || ' columns');
col_num := rec_tab.first;
LOOP
EXIT WHEN (col_num IS NULL);
DBMS_OUTPUT.PUT_LINE('#' || col_num || ' is ' || rec_tab(col_num).col_name);
col_num := rec_tab.next(col_num);
END LOOP;
DBMS_SQL.CLOSE_CURSOR(c);
end