Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.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
如何在Oracle PL/SQL中迭代列名?_Sql_Oracle_Plsql_Dynamic Sql - Fatal编程技术网

如何在Oracle PL/SQL中迭代列名?

如何在Oracle PL/SQL中迭代列名?,sql,oracle,plsql,dynamic-sql,Sql,Oracle,Plsql,Dynamic Sql,我试图遍历SQL的列名以应用一些动态查询。但是,我在迭代这些列名时遇到了一个问题 我总是有一个错误,通常是PL/SQL编译错误 代码如下所示: SQL代码: DECLARE CURSOR c IS SELECT COLUMN_NAME FROM ALL_COL_COMMENTS WHERE table_name='my_table_name'; BEGIN FOR current_field IN c LOOP dbms_output.put_line(cur

我试图遍历SQL的列名以应用一些动态查询。但是,我在迭代这些列名时遇到了一个问题

我总是有一个错误,通常是PL/SQL编译错误

代码如下所示:

SQL代码:

DECLARE
 CURSOR c IS
  SELECT COLUMN_NAME FROM ALL_COL_COMMENTS WHERE table_name='my_table_name';
 BEGIN
     FOR current_field IN c LOOP
         dbms_output.put_line(current_field);
         ...Dynamic SELECT QUERY
         new_string = new_string || ',' || current_field;
         dbms_output.put_line(new_string);
     END LOOP;
 END;
最后一个目标是统计每次在sql查询中添加新字段并保存其结果时的观察次数

伪代码:

current string = ''
result = array(len(all_field))
for current_field in all_field:
   result[idx] = SQL_QUERY(current_string)
   current_string = current_string + ',' + current_field         
尝试:

尝试:


这不是对您问题的回答,但我通常使用LISTAGG创建列名称的动态列表:


这不是对您问题的回答,但我通常使用LISTAGG创建列名称的动态列表:


您尚未定义新的\u字符串;但是…动态选择查询实际上在做什么?除了ORA-06550,您还看到了哪些其他错误,通常是PL/SQL编译错误。信息?两件事。你的意思是使用所有的标签注释吗?这是可行的,但我认为更好的选择是使用所有的列或用户列。每当使用以ALL开头的字典视图时,始终指定所有者。如果另一个模式有同名的表,您将遇到麻烦。更好的是,如果您严格使用自己的模式,请指定USER而不是ALL。用户视图没有所有者字段,因为它们只返回当前用户的记录。。。动态选择查询本质上是按新字符串对列进行分组,并计算行数。我正在遍历这些列,通过这样做,我可以测量一些列的潜在值偏差,因为行数将增加。通常,对于具有相同ID的所有行,所有值都应该相同,但情况并非如此,我需要找出未正确复制的变量。查询的形式如下:SELECT COUNT*As AGG_uuFROM SELECT new_uSTRING FROM my_u表格组BY new_uSTRING您尚未定义new_uSTRING;但是…动态选择查询实际上在做什么?除了ORA-06550,您还看到了哪些其他错误,通常是PL/SQL编译错误。信息?两件事。你的意思是使用所有的标签注释吗?这是可行的,但我认为更好的选择是使用所有的列或用户列。每当使用以ALL开头的字典视图时,始终指定所有者。如果另一个模式有同名的表,您将遇到麻烦。更好的是,如果您严格使用自己的模式,请指定USER而不是ALL。用户视图没有所有者字段,因为它们只返回当前用户的记录。。。动态选择查询本质上是按新字符串对列进行分组,并计算行数。我正在遍历这些列,通过这样做,我可以测量一些列的潜在值偏差,因为行数将增加。通常,对于具有相同ID的所有行,所有值都应该相同,但情况并非如此,我需要找出未正确复制的变量。查询的形式如下:SELECT COUNT*As AGG_uuuFROM从my_表组中选择新的_u字符串BY new_u字符串
set echo on
set serveroutput on
DECLARE
 new_string varchar2(250);
 CURSOR c IS
  SELECT COLUMN_NAME FROM ALL_COL_COMMENTS WHERE table_name='mytablename';
BEGIN
  FOR current_field IN c LOOP
      dbms_output.put_line(current_field.column_name);
      new_string := new_string || ',' || current_field.column_name;
      dbms_output.put_line(new_string);
 END LOOP;
END;
/
CREATE TABLE t (a NUMBER, b NUMBER, c NUMBER);

SELECT LISTAGG(column_name, ',') WITHIN GROUP (ORDER BY column_id) AS cols
  FROM user_tab_columns
 WHERE table_name = 'T';

COLS
A,B,C