【发布时间】:2016-01-27 23:43:40
【问题描述】:
我想知道在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;
【问题讨论】:
-
可以,但只能在另一个 declare-begin 块内
-
你为什么要在 PL/SQL 中这样做,或者使用游标?看起来您只需要一个简单的选择来连接两个表吗?显示您需要的输出并解释它将如何进入 Excel 可能会有所帮助 - 您是在生成 CSV 文件,还是从 Excel 中查询?
-
嗨,Alex,我有一个包含 MID 的表和另一个包含 SID 的表。对于相应的 MID,SID 的数量可以是一个或多个。我想显示 MID 以及与这些 MID 匹配的 SID。
-
@olivia,此要求与您的实际问题“我可以在开始后声明游标吗?”无关。
标签: oracle syntax plsql cursor