ORA-01007: переменная отсутствует в списке выбора ORA-06512: в строке 32 - PullRequest
0 голосов
/ 21 февраля 2020

Я пытаюсь выбрать несколько запросов по группам, но получаю следующую ошибку.

ORA-01007: variable not in select list
ORA-06512: at line 32
01007. 00000 -  "variable not in select list" 

Не могли бы вы мне помочь, пожалуйста

declare
 X number:=0;
     v_partition  varchar(20);
     type detail_rt is record(
     message_ıd varchar2(100),                   
     phone_no number,                 
     send_phone_no varchar2(150),            
     start_date DATE,               
     end_date DATE,                 
     status number,                   
     dcode number,                    
     DELIVERED_DATE date,           
     DCODE_DESC varchar2(250),
     sms_count number,                
     sms_message varchar2(1850),              
     CDR_MSISDN number,
     sayi number
     );
type detail_aat is table of detail_rt index by pls_integer;
     detail_aatt  detail_aat;
type l_cursor is ref cursor;
     c l_cursor;
BEGIN
     <<GET_Partition>>
     select 'P_'||to_char(trunc(sysdate-X),'YYYYMMDD') into v_partition from dual;
     open c for 
     'SELECT count(*) as sayi,
      C.CDR_MSISDN as CDR_MSISDN
FROM
    corp_smsdetaıl partition('|| v_partition||') A   INNER JOIN CORP_COMPANY C ON A.COMPANY_ID=C.ID  
                       INNER JOIN  CORP_DCODE_DESC B ON A.DCODE=B.DCODE where a.company_id=17790 group by c.CDR_MSISDN';
fetch c bulk collect into detail_aatt;            
close c;
for indx in 1 .. detail_aatt.count

loop
    DBMS_OUTPUT.PUT_LINE (detail_aatt(indx).sayi || '||' || detail_aatt(indx).CDR_MSISDN);
 end loop;
    X:=X+1;
    IF x < 2 THEN
    GOTO GET_Partition;
END IF; 
 end;

Ответы [ 2 ]

1 голос
/ 21 февраля 2020

Это должна быть строка 32 (согласно указанному вами коду).

fetch c bulk collect into detail_aatt;

Однако, похоже, что true строка ошибки такова:

DBMS_OUTPUT.PUT_LINE (detail_aatt(indx).sayi || '||' || detail_aatt(indx).CDR_MSISDN);

Как получилось?

  • вы выбираете SAYI и CDR_MSISDN
  • , помещая их в detail_aatt
  • , столбцы которых MESSAGE_ID, PHONE_NO, SEND_PHONE_NO, et c.

Поэтому вместо этого используйте

dbms_output.put_line(detail_aatt(indx).message_id ||', '|| detail_aatt(indx).phone_no);

.

0 голосов
/ 02 марта 2020
declare
     X number:=0;
     v_partition  varchar(20);
     type detail_rt is record(                  
     COMPANY_ID number,     
     sayi number
     );
type detail_aat is table of detail_rt index by pls_integer;
     detail_aatt  detail_aat;
type l_cursor is ref cursor;
     c l_cursor;
BEGIN
     <<GET_Partition>>
     select 'P_'||to_char(trunc(sysdate+X-76),'YYYYMMDD') into v_partition from dual;
     open c for 
     'SELECT
      A.COMPANY_ID,
      count(*) as sayi

FROM
    corpsms_arch_user.corp_smsdetaılold partition('|| v_partition||')  A 
                        where A.company_id in(13396,15844,17309,20197) group by 

                       A.COMPANY_ID';
fetch c bulk collect into detail_aatt;            
close c;
for indx in 1 .. detail_aatt.count

loop
    DBMS_OUTPUT.PUT_LINE (detail_aatt(indx).COMPANY_ID|| '||' ||detail_aatt(indx).sayi);
 end loop;
    X:=X+1;
    IF x < 76 THEN
    GOTO GET_Partition;
END IF; 
 end;
 /
...