迭代行类型变量的字段

时间:2016-10-17 11:09:47

标签: plsql

我从表some_table中选择了一行到一个rowtype变量l_current。现在我想遍历该变量中从第一个到最后一个的字段以及门字段名称和值。 在下面的代码中,我写了一篇评论部分,我想用plsql做什么,但是找不到怎么做。

declare
    l_current   some_table%rowtype;
begin
    for i in l_records.first .. l_records.last 
    loop
      select *
        into l_current
        from some_table
       where id = l_records(i).id;
--*******************
       for each field in l_current
       loop
         a := field.name;
         b := field.value;
       end loop;
--*******************
    end loop;
end;

1 个答案:

答案 0 :(得分:0)

因此经过一些研究后,我设法完成了我想要的工作,但使用DBMS_SQL包的方式完全不同。以下是一个工作示例的片段:

      l_sql := '';
      l_sql := l_sql || 'select * ';
      l_sql := l_sql || '  from some_table where id = ' || l_records(i).ekd_id;

      l_cursorID := DBMS_SQL.OPEN_CURSOR;
      dbms_sql.parse( l_cursorID, l_sql, dbms_sql.native );
      dbms_sql.describe_columns( l_cursorID, l_column_count, l_descTbl );

      for j in 1..l_column_count
      loop
        dbms_sql.define_column( l_cursorID, j, l_columnValue, 2000 );
        l_key := l_descTbl(j).col_name;
        l_table(j + (l_counter * l_column_count)).kre_id := l_records(i).kre_id; --i + (l_counter * l_column_count)
        l_table(j + (l_counter * l_column_count)).field_id := j;
        l_table(j + (l_counter * l_column_count)).field_name := l_key;
      end loop;

      l_status := dbms_sql.execute(l_cursorID);
      l_status := DBMS_SQL.FETCH_ROWS(l_cursorID);

      for k in 1..l_column_count
      loop
        dbms_sql.column_value( l_cursorID, k, l_columnValue );
        l_value := l_columnValue;
        l_table(k + (l_counter * l_column_count)).field_value1 := l_value;
      end loop;

      DBMS_SQL.CLOSE_CURSOR(l_cursorID);

希望有人会发现这很有用。