Oracle中的游标迭代
我发现了一个很好的问题。使用这种结构是否有效:Oracle中的游标迭代,oracle,cursor,Oracle,Cursor,我发现了一个很好的问题。使用这种结构是否有效: 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; CUR
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
错误,该错误表明我应该定义行
组件。因此,就我而言,此字段应该已经存在于查询中。我说得对吗
我可以简单地从游标写一行吗?上面提到的答案不完整,我认为它是作为一个缺少实现细节的示例(伪代码)给出的 事实上:
- 您的
子句无效,您没有选择任何内容。您想选择什么李>SELECT
- 结构
,其中XX.row
是一个光标,但该结构不存在XX
- 此外,该过程接受
作为其第二个参数,而不是任何类型的VARCHAR2
rowtype
- 不能将表命名为
(尽管可以将其命名为table
)“table”
mytable(col1,col2,…,colN)
CREATE OR REPLACE PROCEDURE p_name()
IS
V_FILEHANDLE UTL_FILE.FILE_TYPE;
CURSOR dataset IS SELECT col1, col2, /*...*/ coln FROM mytable;
BEGIN
/*utl_file.fopen maybe?*/
FOR R IN dataset LOOP
UTL_FILE.PUT_LINE(V_FILEHANDLE, R.col1 ||';'|| r.col2 /*...*/ || r.coln);
END LOOP;
END;
r
已经是您的行,因此您需要执行r.column\u name
是否应将其写入r.column\u name%type
?如果我不想指定所有列名,该怎么办。。我的查询中有许多列?否,需要精确的列名(还需要*
或选择中的列)