2010-02-01 2 views
2

Я продолжаю получать следующее сообщение об ошибке: «ORA-01008: не все переменные связаны», im угадывает его все на основе моего параметра pPostcode, но я не уверен. Я новичок весь PLSQL secne и любая помощь будут значительно apriciatedPLSQL не все связанные переменные

вот моя процедура:

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; 

Благодаря Джон

+0

Как вы называете эту процедуру? Потому что нет очевидной проблемы с опубликованным кодом. – APC

+0

Да, процедура вызывается, су, вы бы предположили, что это что-то вне этой процедуры? спасибо, что ответили – user250643

ответ

2

Я поправки вашей процедуры небольшой, как ИНЕКЕ вы опубликовали не имеет смысла для меня ...

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> 

Назвав его в SQL * Plus с переменными работает ...

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> 

Итак, как мы можем заставить его бросить ORA-1008? При повороте запроса в строку и изменить способ параметр объявлен ...

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> 

так давайте исправим что ...

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> 

Так мне удалось воссоздать ORA- 1008; Я не уверен, соответствует ли это вашей ситуации ORA-1008. Ваша интуиция правильная, это как-то связано с тем, как передается значение в pPostcode. Это просто, что код, который вы опубликовали, на самом деле делает это правильно, и поэтому не прерывается.

+1

Сэр, я в вашем долгу, вы не могли дать более краткий овес спасибо – user250643

+0

@unknown, в будущем я предлагаю вам опубликовать точный код, который был неудачным, вместо того, чтобы нас угадывать :) –

Смежные вопросы