Pergunta

continuo recebendo o seguinte erro, 'ORA-01008:Nem todas as variáveis ​​vinculadas ', eu acho que tudo é baseado no meu parâmetro ppostcode, mas não tenho certeza.Eu sou um iniciante em todo o setor PLSQL e qualquer ajuda seria muito apreciada

aqui está o meu procedimento:

 procedure all_customer_postcode(pPostcode in carer.postcode%type
                                ,pReport out SYS_REFCURSOR) is
  begin
    open pReport for
      select c.id, c.forename, c.surname,c.address_1,c.address_2,
             c.address_3,c.address_4, c.postcode, c.date_of_birth, cf.id    
        from customer c, customer_friend cf,customer_friend_for cff 
       where c.id = cff.customer_id AND cff.id = cff.customer_friend_id
       AND c.postcode = pPostcode;
  end;

Obrigado Jon

Foi útil?

Solução

Alterei ligeiramente o seu procedimento, pois a cláusula WHERE que você publicou não fazia sentido para mim ...

SQL> create or replace procedure all_customer_postcode
  2          (pPostcode in customer.postcode%type
  3                                  ,pReport out SYS_REFCURSOR) is
  4  begin
  5      open pReport for
  6        select c.id
  7               , c.forename
  8               , c.surname
  9               ,c.address_1
 10               ,c.address_2
 11               ,c.postcode
 12               , c.date_of_birth
 13               , cf.id  as cf_id
 14          from customer c
 15              , customer_friend cf
 16              ,customer_friend_for cff
 17         where c.id = cff.customer_id
 18         AND cf.id = cff.customer_friend_id
 19         AND c.postcode = pPostcode;
 20  end;
 21  /

Procedure created.

SQL>

Chamá-lo no SQL*Plus com variáveis ​​funciona...

SQL> var rc refcursor
SQL> var pc varchar2(8)
SQL> exec :pc := 'ML1 4KJ'

PL/SQL procedure successfully completed.

SQL> exec all_customer_postcode(:pc, :rc)

PL/SQL procedure successfully completed.

SQL> print rc

        ID FORENAME   SURNAME    ADDRESS_1            ADDRESS_2            POSTCODE DATE_OF_B      CF_ID
---------- ---------- ---------- -------------------- -------------------- -------- --------- ----------
         1 Joe        Chip       1234 Telepath Drive  Milton Lumpky        ML1 4KJ  01-FEB-90         11
         4 Ray        Hollis     777 Telepath Drive   Milton Lumpky        ML1 4KJ  01-SEP-81         44
         5 Pat        Conley     1235 Telepath Drive  Milton Lumpky        ML1 4KJ  01-OCT-91         55

SQL>

Então, como podemos fazer com que ele lance um ORA-1008?Transformando a consulta em uma string e alterando a forma como o parâmetro é declarado...

SQL> create or replace procedure all_customer_postcode
  2          (pPostcode in customer.postcode%type
  3                                  ,pReport out SYS_REFCURSOR) is
  4  begin
  5      open pReport for
  6        'select c.id
  7               , c.forename
  8               , c.surname
  9               ,c.address_1
 10               ,c.address_2
 11               ,c.postcode
 12               , c.date_of_birth
 13               , cf.id  as cf_id
 14          from customer c
 15              , customer_friend cf
 16              ,customer_friend_for cff
 17         where c.id = cff.customer_id
 18         AND cf.id = cff.customer_friend_id
 19         AND c.postcode = :pPostcode';
 20  end;
 21  /

Procedure created.

SQL> exec all_customer_postcode(:pc, :rc)
BEGIN all_customer_postcode(:pc, :rc); END;

*
ERROR at line 1:
ORA-01008: not all variables bound
ORA-06512: at "APC.ALL_CUSTOMER_POSTCODE", line 5
ORA-06512: at line 1


SQL>

então vamos consertar que ...

SQL> create or replace procedure all_customer_postcode
  2          (pPostcode in customer.postcode%type
  3                                  ,pReport out SYS_REFCURSOR) is
  4  begin
  5      open pReport for
  6        'select c.id
  7               , c.forename
  8               , c.surname
  9               ,c.address_1
 10               ,c.address_2
 11               ,c.postcode
 12               , c.date_of_birth
 13               , cf.id  as cf_id
 14          from customer c
 15              , customer_friend cf
 16              ,customer_friend_for cff
 17         where c.id = cff.customer_id
 18         AND cf.id = cff.customer_friend_id
 19         AND c.postcode = :pPostcode' using pPostcode;
 20  end;
 21  /

Procedure created.

SQL> exec all_customer_postcode(:pc, :rc)

PL/SQL procedure successfully completed.

SQL> 

Então consegui recriar um ORA-1008;Não tenho certeza se corresponde à sua situação ORA-1008.Sua intuição está certa, tem algo a ver com a forma como o valor em pPostcode é passado para a consulta.Acontece que o código que você postou realmente faz isso corretamente e, portanto, não falha.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top