使用 for 循环假脱机到 .csv 文件
spool to .csv file using for loop
需要使用循环将输出假脱机输出到 .csv 文件中,仅供参考...我在 4 diff 分区中有数据。
但不确定如何进行。
代码就像。
begin
FOR var_1 in 1 .. 4
LOOP
set linesize 1000
set feedback off
set underline off
spool C:\Users\file.csv replace
SELECT cust_no FROM customer PARTITION (customer_PR'||var_1||')
WHERE city='ba' AND first_name='john'
AND salary=1000;
spool off;
END LOOP;
END;
/
结果:-
Error report -
ORA-06550: line 4, column 5:
PL/SQL: ORA-00922: missing or invalid option
ORA-06550: line 4, column 1:
PL/SQL: SQL Statement ignored
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:
不确定我是否正确假脱机,还请检查我的 select 语句中是否正确使用了 for 循环的索引变量。
Spool 是一个 SQL*Plus 命令,PL/SQL 不“理解”它。如果必须 PL/SQL.
,您宁愿切换到 UTL_FILE
包
不过,如果这是您仅有的代码,我建议您只使用 4 个单独的 SELECT
语句,每个语句使用自己的分区,然后将结果假脱机到 CSV 文件中。
如果你这样做,你将在 HOURS 前完成。
spool
是一个 SQL*Plus 命令,它可能与包含游标的嵌入式 PL/SQL 代码结合使用,例如 SYS_REFCURSOR
和动态 SQL 作为
rec=$(sqlplus -S /nolog << EOF
conn hr/hr
whenever sqlerror exit sql.sqlcode
SET LINESIZE 1000
SET FEEDBACK OFF
SET UNDERLINE OFF
SET SERVEROUTPUT ON
SPOOL file.csv REPLACE
DECLARE
v_cursor SYS_REFCURSOR;
v_sql VARCHAR2(32767);
cust customer.cust_no%TYPE;
BEGIN
FOR var_1 in 1..4
LOOP
v_sql :=
'SELECT cust_no
FROM customer PARTITION(customer_pr'||var_1||')
WHERE city = :ct
AND first_name = :fn
AND salary = :sl';
OPEN v_cursor FOR v_sql USING 'ba','john',1000;
LOOP
FETCH v_cursor INTO cust;
DBMS_OUTPUT.PUT_LINE(cust);
EXIT WHEN v_cursor%NOTFOUND;
END LOOP;
END LOOP;
CLOSE v_cursor;
END;
/
SPOOL OFF
EOF
)
您不需要 4 个不同的查询,只需在查询中列出您的所有分区:
set linesize 1000
set feedback off
set underline off
spool C:\Users\file.csv replace
SELECT cust_no FROM customer PARTITION (customer_PR1, customer_PR2, customer_PR3, customer_PR4)
WHERE city='ba' AND first_name='john'
AND salary=1000;
spool off;
需要使用循环将输出假脱机输出到 .csv 文件中,仅供参考...我在 4 diff 分区中有数据。
但不确定如何进行。
代码就像。
begin
FOR var_1 in 1 .. 4
LOOP
set linesize 1000
set feedback off
set underline off
spool C:\Users\file.csv replace
SELECT cust_no FROM customer PARTITION (customer_PR'||var_1||')
WHERE city='ba' AND first_name='john'
AND salary=1000;
spool off;
END LOOP;
END;
/
结果:-
Error report -
ORA-06550: line 4, column 5:
PL/SQL: ORA-00922: missing or invalid option
ORA-06550: line 4, column 1:
PL/SQL: SQL Statement ignored
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:
不确定我是否正确假脱机,还请检查我的 select 语句中是否正确使用了 for 循环的索引变量。
Spool 是一个 SQL*Plus 命令,PL/SQL 不“理解”它。如果必须 PL/SQL.
,您宁愿切换到UTL_FILE
包
不过,如果这是您仅有的代码,我建议您只使用 4 个单独的 SELECT
语句,每个语句使用自己的分区,然后将结果假脱机到 CSV 文件中。
如果你这样做,你将在 HOURS 前完成。
spool
是一个 SQL*Plus 命令,它可能与包含游标的嵌入式 PL/SQL 代码结合使用,例如 SYS_REFCURSOR
和动态 SQL 作为
rec=$(sqlplus -S /nolog << EOF
conn hr/hr
whenever sqlerror exit sql.sqlcode
SET LINESIZE 1000
SET FEEDBACK OFF
SET UNDERLINE OFF
SET SERVEROUTPUT ON
SPOOL file.csv REPLACE
DECLARE
v_cursor SYS_REFCURSOR;
v_sql VARCHAR2(32767);
cust customer.cust_no%TYPE;
BEGIN
FOR var_1 in 1..4
LOOP
v_sql :=
'SELECT cust_no
FROM customer PARTITION(customer_pr'||var_1||')
WHERE city = :ct
AND first_name = :fn
AND salary = :sl';
OPEN v_cursor FOR v_sql USING 'ba','john',1000;
LOOP
FETCH v_cursor INTO cust;
DBMS_OUTPUT.PUT_LINE(cust);
EXIT WHEN v_cursor%NOTFOUND;
END LOOP;
END LOOP;
CLOSE v_cursor;
END;
/
SPOOL OFF
EOF
)
您不需要 4 个不同的查询,只需在查询中列出您的所有分区:
set linesize 1000
set feedback off
set underline off
spool C:\Users\file.csv replace
SELECT cust_no FROM customer PARTITION (customer_PR1, customer_PR2, customer_PR3, customer_PR4)
WHERE city='ba' AND first_name='john'
AND salary=1000;
spool off;