Comment déclarer un curseur après avoir COMMENCER?

Je veux savoir si un curseur peut être déclarés après la BEGIN.

Et comment puis-je exporter le résultat de la plsql sur une feuille Excel, parce que j'ai l'exécution de cette procédure comme un travail.

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;
Oui vous pouvez, mais seulement à l'intérieur d'un autre déclare-bloc begin
Pourquoi faites-vous cela en PL/SQL, ou de l'utilisation de curseurs? On dirait que vous juste besoin d'un simple select qui joint les deux tableaux? Il pourrait être utile de montrer ce la sortie dont vous avez besoin et expliquer comment il va obtenir dans Excel - êtes-vous produire un fichier CSV, ou l'interrogation à partir d'Excel?
Salut Alex j'ai une table qui a les Médiums et un autre qui a les Peid. Les Peid pourrait être l'un ou plus en nombre pour les Médiums. Je veux afficher les Médiums avec les Peid, correspondant à ceux des Médiums.
Cette exigence n'a rien à voir avec votre question: "puis-je déclarer un curseur après avoir commencer?"

OriginalL'auteur olivia | 2015-10-28