0
我在https://dba.stackexchange.com/questions/3587/oracle-automate-export-unload-of-data找到了一個好問題。它是有效使用這樣的結構:在Oracle中迭代通過遊標
FOR r IN (SELECT * FROM table) LOOP
UTL_FILE.PUT_LINE(lfFilelog, r.row);
END LOOP;
我試圖用這樣的:
CREATE OR REPLACE PROCEDURE p_name(DESTFOLDER in varchar2, FILENAME in varchar2)
IS
V_FILEHANDLE UTL_FILE.FILE_TYPE;
CURSOR dataset IS
SELECT
field1,
field2,
fieldN
FROM
table1,
table2,
(SELECT field3 from table3);
-- WHERE CLAUSE ... and so on..
BEGIN
V_FILEHANDLE := UTL_FILE.FOPEN(DESTFOLDER, FILENAME, 'w');
FOR R IN dataset LOOP
UTL_FILE.PUT_LINE(V_FILEHANDLE, R.ROW);
END LOOP;
END;
/
並獲得pls-00302
錯誤,指出我應該定義ROW
組件。所以就我而言,這個字段應該已經存在於查詢中。我對嗎?
我可以簡單地從光標寫一行嗎?
'r'已經是你的行,所以你需要做的'r.column_name' – 2013-02-12 13:06:25
它應該被寫作'r.column_name%類型'?另外如果我不想指定所有列名稱,我的查詢中有很多列? – lexeme 2013-02-12 13:09:20
不需要,確切的列名稱(也需要'*'或'select'中的列) – 2013-02-12 13:17:28