0
我有一张表,其中有很多列。出于某种原因,我需要从中获取数据,然后分别在每个列值上做一些事情。所以我想这样做:单独浏览记录的每一列
SELECT record FROM table
FOREACH field of the record
do some stuff
的“做一些东西”的一部分,应当按照列名做一些事情。
有没有一种简单的方法来执行PL/SQL中的这种浏览?
谢谢!
我有一张表,其中有很多列。出于某种原因,我需要从中获取数据,然后分别在每个列值上做一些事情。所以我想这样做:单独浏览记录的每一列
SELECT record FROM table
FOREACH field of the record
do some stuff
的“做一些东西”的一部分,应当按照列名做一些事情。
有没有一种简单的方法来执行PL/SQL中的这种浏览?
谢谢!
不幸的是,你不能像这样通过记录的字段循环。但是,您可以使用DBMS_SQL遍历所有返回的列并执行您所需的任何操作。检查我的下面,基于此线程简单的例子:Loop through columns of a record with DBMS_SQL
CREATE TABLE my_iter_tab_test (
id NUMBER,
name VARCHAR2(20),
salary NUMBER
);
INSERT INTO my_iter_tab_test VALUES (1, 'Smith', 5000);
INSERT INTO my_iter_tab_test VALUES (2, 'Brown', 6000);
COMMIT;
DECLARE
v_cur NUMBER;
v_temp NUMBER;
v_col_cnt NUMBER;
v_desc_tab_rec DBMS_SQL.DESC_TAB;
v_ret NUMBER;
v_v_val VARCHAR2(4000);
BEGIN
v_cur := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(v_cur, 'SELECT * FROM my_iter_tab_test', DBMS_SQL.NATIVE);
v_temp := DBMS_SQL.EXECUTE(v_cur);
DBMS_SQL.DESCRIBE_COLUMNS(v_cur, v_col_cnt, v_desc_tab_rec);
FOR v_i IN 1..v_col_cnt
LOOP
dbms_output.put_line(v_desc_tab_rec(v_i).col_name);
DBMS_SQL.DEFINE_COLUMN(v_cur ,v_i, v_v_val, 2000);
END LOOP;
LOOP
v_ret := DBMS_SQL.FETCH_ROWS(v_cur);
EXIT WHEN v_ret = 0;
FOR v_i IN 1..v_col_cnt
LOOP
DBMS_SQL.COLUMN_VALUE(v_cur, v_i, v_v_val);
DBMS_OUTPUT.PUT_LINE(v_desc_tab_rec(v_i).col_name || ' : ' || v_v_val);
END LOOP;
END LOOP;
DBMS_SQL.CLOSE_CURSOR(v_cur);
END;
输出:
ID NAME SALARY ID : 1 NAME : Smith SALARY : 5000 ID : 2 NAME : Brown SALARY : 6000
我想你想改变DEFINE_COLUMN
适当的类型在您的最终解决方案。
谢谢,这将做的伎俩! – Backslash36