Comment passer/les paramètres d'appel (valeurs) à partir de la Fonction de 'Sélectionner' stmt dans SQL*Plus?

J'ai un problème de passage de paramètres à partir de la fonction que j'ai créé dans SQL*Plus "Select" énoncé dans la clause 'where'. Cependant, il semble que quelle que soit la syntaxe j'ai utilisé est incorrect ou de ne pas l'utiliser du tout dans cette clause 'where' situation.

Voici ma fonction que j'ai créé et il est OK d'être compilé et exécuté de bonne:

CREATE OR REPLACE FUNCTION SA_BILL_CNTRL_EXTRNL_FXN(p_client_code      VARCHAR2
                                                   ,p_bill_seq         VARCHAR2
                                                   ,p_bill_control_seq VARCHAR2)
  RETURN VARCHAR2 IS
  v_external_id      VARCHAR2(30);
  v_client_code      VARCHAR2(4) := p_client_code;
  v_bill_seq         NUMBER := to_number(p_bill_seq);
  v_bill_control_seq NUMBER := to_number(p_bill_control_seq);
  v_cnt              NUMBER;
BEGIN
  SELECT COUNT(*)
  INTO v_cnt
  FROM BillControl@SQL_SAREP bc
  WHERE bc."ExternalID" IS NOT NULL
        AND bc."ExternalID" != ''
        AND bc."ClientCode" = p_client_code
        AND bc."BillControlSeq" = v_bill_control_seq
        AND bc."BillSeq" = v_bill_seq;
  IF v_cnt = 1 THEN
    SELECT bc."ExternalID"
    INTO v_external_id
    FROM BillControl@SQL_SAREP bc
    WHERE bc."ExternalID" IS NOT NULL
          AND bc."ExternalID" != ''
          AND bc."ClientCode" = p_client_code
          AND bc."BillControlSeq" = v_bill_control_seq
          AND bc."BillSeq" = v_bill_seq;
  ELSE
    v_external_id := NULL;
  END IF;
  RETURN v_external_id;
END SA_BILL_CNTRL_EXTRNL_FNX;
/

Aussi, lorsque j'ai utilisé "EN DEHORS" du paramètre dans la fonction après l'échec de l'exécution.

Maintenant, ici, c'est le 'Select' déclaration que je vais avoir de la difficulté à passer des paramètres avec:

SELECT NVL(TRIM(eb.CASE_NUM_REEVALUATED), TRIM(eb.CASE_NUM_DUPLICATED)) CaseNumReev
      ,gnc.BILL_CONTROL_SEQ
FROM EPE_Bill eb NETWORK_CROSSWALK gnc
WHERE substr(eb.MIC_BILL_ID, 5, 4) = SA_BILL_CNTRL_EXTRNL_FNX(p_client_code)
      AND gnc.BILL_CONTROL_SEQ = SA_BILL_CNTRL_EXTRNL_FNX(p_bill_seq) 
      AND (to_number(substr(eb.MIC_BILL_ID, 10, 10), '9999999999') = SA_BILL_CNTRL_EXTRNL_FNX(p_bill_control_seq) 
GROUP BY CaseNumReev, gnc.BILL_CONTROL_SEQ;

Pour les deux derniers jours, je l'ai été moi-même à fond perflexed.
Avec ça, je serais vraiment reconnaissant si vous m'aider avec la question.

Merci encore...

  • Votre fonction prend 3 paramètres (pas de défaut) et pourtant, vous êtes à l'appeler avec seulement 1, ce qui n'est pas valide.
  • Quelle erreur avez-vous? Vous avez également une faute de frappe avec votre nom de la fonction dans votre posté code. Dans votre créer, c'est SA_BILL_CNTRL_EXTRNL_FXN, dans votre clause where, il est SA_BILL_CNTRL_EXTRNL_FNX.
  • Vous aussi vous ne pouvez pas group by un alias de colonne; vous devez répéter la qui nvl de l'alinéa (ou de l'envelopper d'un autre select). Vous ne pouvez pas appeler une fonction avec un in out paramètre de SQL normales, comme vous l'avez déjà découvert.
InformationsquelleAutor valmont74 | 2012-05-08