gpt4 book ai didi

oracle - 如何在开始后声明游标?

转载 作者:行者123 更新时间:2023-12-04 15:09:36 26 4
gpt4 key购买 nike

我想知道是否可以在 BEGIN 之后声明游标.

以及如何将 plsql 的结果导出到 Excel 工作表,因为我必须将此过程作为作业运行。

CREATE OR REPLACE PROCEDURE masc(v_amsprogramid VARCHAR2) AS

v_mid VARCHAR2(50);
v_sid VARCHAR2(50);

CURSOR c1 IS
SELECT DISTINCT mid
FROM table_a WHERE aid = v_aid
ORDER BY mid;

BEGIN

OPEN c1;

LOOP
FETCH c1 INTO v_mid;
EXIT WHEN c1%NOTFOUND;

DECLARE
CURSOR c2 IS
SELECT DISTINCT sid INTO v_sid
FROM table_b WHERE mid = v_mid;

BEGIN
OPEN c2;
LOOP

FETCH c1 INTO v_mid;
EXIT WHEN c1%NOTFOUND;

dbms_output.PUT_LINE('MID : ' || v_mid);
dbms_output.PUT_LINE('Sid : ' || v_sid);

END LOOP;

CLOSE c2;
END LOOP;

CLOSE c1;
END masc;

最佳答案

I want to know if i can declare a cursor after begin



不完全是。但是你可以使用 循环游标而不是声明 显式光标 .

例如,
FOR i IN (SELECT distinct MID from table_a WHERE AID = V_AID ORDER BY MID)
LOOP
<do something>
END LOOP;

但无论如何,这会更慢,因为逐行是缓慢的。我认为根本不需要程序。如果你真的需要在 PL/SQL 然后考虑 批量收集 .

And how can i export the result of the plsql to an excel sheet because i ahev to run this procedure as a job.



我认为不需要 PL/SQL 在这种情况下。您可以简单地使用 线轴 SQL*Plus .

例如,
sqlplus user/pass@service_name
<required formatting options>

SPOOL /location/myfile.csv
SELECT distinct MID from table_a WHERE AID = V_AID ORDER BY MID;
SPOOL OFF

关于oracle - 如何在开始后声明游标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33387022/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com