Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
包含列名的变量的PLSQL场景_Plsql - Fatal编程技术网

包含列名的变量的PLSQL场景

包含列名的变量的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

我是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 
(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