Oracle 从PL/SQL的表中动态填充数组?

Oracle 从PL/SQL的表中动态填充数组?,oracle,plsql,Oracle,Plsql,我需要在这个PL/SQL代码中动态传递数组值,但是数组只看到第一个值代码:Hint 如果你需要更多的信息,请问我,这里是我的尝试传递它的动态 可变填充代码: FOR ET IN (SELECT EMAIL FROM XX_INTERCO_SYS_CON WHERE ACC_NO = Q.ACC_NO AND TYPE = 'TO') LOOP IF P_TO IS NOT NULL THEN

我需要在这个PL/SQL代码中动态传递数组值,但是数组只看到第一个值代码:Hint

如果你需要更多的信息,请问我,这里是我的尝试传递它的动态

可变填充代码:

FOR ET IN (SELECT   EMAIL
               FROM   XX_INTERCO_SYS_CON
              WHERE   ACC_NO = Q.ACC_NO AND TYPE = 'TO')
  LOOP
     IF P_TO IS NOT NULL
     THEN
        P_TO := P_TO || ',''' || ET.EMAIL||'''';
     ELSE
        P_TO := ''''||ET.EMAIL||'''';
     END IF;
  END LOOP;

  FOR EC IN (SELECT   EMAIL
               FROM   XX_INTERCO_SYS_CON
              WHERE   ACC_NO = Q.ACC_NO AND TYPE = 'CC')
  LOOP
     IF P_CC IS NOT NULL
     THEN
        P_CC := P_CC || ',''' || EC.EMAIL||'''';
     ELSE
        P_CC := ''''||EC.EMAIL||'''';
     END IF;
  END LOOP;
阵列填充部分:

XX_MAIL_PKG.SEND (P_FROM        => P_FROM,
                    P_TO          => XX_MAIL_PKG.ARRAY ( P_TO),
                    P_CC          => XX_MAIL_PKG.ARRAY (P_CC),
                    P_SUBJECT     => 'test',
                    P_HTML_MSG    => P_HTML_OUTPUT,
                    P_SMTP_HOST   => P_SMTP_HOST,
                    P_SMTP_PORT   => P_SMTP_PORT,
                    P_TEXT_MSG    => NULL,
                    X_ERR_MSG     => X_ERR_MSG);
  COMMIT;
  DBMS_OUTPUT.PUT_LINE (X_ERR_MSG); 

您似乎正在使用集合-因此(不知道
XX\u MAIL\u PKG
包中有什么),您可以尝试以下方法:

DECLARE
  V_TO XX_MAIL_PKG.ARRAY;
  V_CC XX_MAIL_PKG.ARRAY;
BEGIN
  SELECT EMAIL
  BULK COLLECT INTO V_TO
  FROM   XX_INTERCO_SYS_CON
  WHERE  ACC_NO = Q.ACC_NO AND TYPE = 'TO';

  SELECT EMAIL
  BULK COLLECT INTO V_CC
  FROM   XX_INTERCO_SYS_CON
  WHERE  ACC_NO = Q.ACC_NO AND TYPE = 'CC';

  XX_MAIL_PKG.SEND (P_FROM        => P_FROM,
                    P_TO          => V_TO,
                    P_CC          => V_CC,
                    P_SUBJECT     => 'test',
                    P_HTML_MSG    => P_HTML_OUTPUT,
                    P_SMTP_HOST   => P_SMTP_HOST,
                    P_SMTP_PORT   => P_SMTP_PORT,
                    P_TEXT_MSG    => NULL,
                    X_ERR_MSG     => X_ERR_MSG);
  COMMIT;
  DBMS_OUTPUT.PUT_LINE (X_ERR_MSG);
END;
/

我非常非常感谢你的伟大事迹,它就像魅力一样,你的快速重播是非常好的