如何解决遍历一个表而不知道它在oracle中的列名
我要处理的是动态创建的表,即它每次创建时具有不同的字段数和不同的字段名。在不知道其字段名称的情况下该如何处理? 例如
for FieldValue in (select * from PAYROLL_POVIT)
loop
csvLine := null;
for FieldName in (select COLUMN_NAME from ALL_TAB_COLUMNS where TABLE_NAME='PAYROLL_POVIT')
loop
csvLine := csvLine || FieldValue.FieldName.COLUMN_NAME
end loop;
DBMS_OUTPUT.PUT_LINE(csvLine);
end loop;
或类似的
for FieldValue in (select * from PAYROLL_POVIT)
loop
csvLine := null;
for i in 1..(select count (*) from ALL_TAB_COLUMNS where TABLE_NAME='PAYROLL_POVIT')
loop
csvLine := csvLine || FieldValue.COLUMN(i)
end loop;
DBMS_OUTPUT.PUT_LINE(csvLine);
end loop;
谢谢
解决方法
我设法了。这是解决方案
create or replace PROCEDURE PAYROLL_CSV
IS
csvLine clob;
MySQL VARCHAR2(100);
MySQLResult VARCHAR2(500);
fileHandler UTL_FILE.FILE_TYPE;
BEGIN
fileHandler := UTL_FILE.FOPEN('ORACLE_DIRECTORY','myfile.csv','w');
csvLine := null;
for FieldName in (select COLUMN_NAME from ALL_TAB_COLUMNS where TABLE_NAME='PAYROLL_POVIT')
loop
csvLine := csvLine || FieldName.COLUMN_NAME || ',';
end loop;
UTL_FILE.put_line(fileHandler,csvLine); -- File Header
for FieldValue in (select * from PAYROLL_POVIT)
loop
csvLine := null;
for FieldName in (select COLUMN_NAME from ALL_TAB_COLUMNS where TABLE_NAME='PAYROLL_POVIT')
loop
MySQL := 'select "' || FieldName.COLUMN_NAME || '" from PAYROLL_POVIT where PAYROLL_RECID = ' || FieldValue.PAYROLL_RECID;
EXECUTE IMMEDIATE MySQL INTO MySQLResult;
csvLine := csvLine || MySQLResult || ',';
end loop;
UTL_FILE.put_line(fileHandler,csvLine); -- Row Data
end loop;
UTL_FILE.FCLOSE(fileHandler);
EXCEPTION
WHEN utl_file.invalid_path THEN
raise_application_error(-20000,'ERROR: Invalid path for file or path not in INIT.ORA.');
END;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。