2015-10-09 1 views
2

Я хочу вернуть тот же результат, который я получаю на sql-разработчике в построителе отчетов, всякий раз, когда я использую тот же запрос в построителе отчетов, он возвращает только одну строку или результат, используя PL/SQL. Пожалуйста помоги мне с этим.Как получить результат нескольких строк в Oracle Report Builder с использованием PL/SQL?

У меня есть таблица, как показано ниже: необходимо получить результат столбца «имя» в построителе отчетов по одному или распечатать.

select * from emp; 

SL NAME   CITY  PHONE  JOB  
---- ----------- ----------- ----------- ------------- 
1 PRADEEP  MANGALORE 66455466 MANAGER   
2 PRASHANTH UDUPI  553453  PRESIDENT  
3 NELSON  MOODABIDRE 255343  A MANAGER  
4 JACKSON  KAUP  234534663 CLERK   
5 JOHN  MANGALORE 9947848  CLERK   
6 DEXIE  MANGALORE 122324324 CLERK   
7 SUKESH  KAUP  44266373 LINE MANAGER  
8 YASER  TAMILNADU 4423424  PRESIDENT  
9 MITHUN  KASARAGOD 3234242  CLERK   
10 ABU   AJMAN  54636673 SUPERVISOR 

10 rows selected 

Теперь у меня есть запрос pl/sql, чтобы вернуть только имя. Это без цикла.

SET SERVEROUTPUT ON 

DECLARE 
    CURSOR C1 IS SELECT NAME FROM EMP WHERE JOB = 'CLERK'; 
    JOBS VARCHAR2(2000); 
    RES VARCHAR2(2000); 
BEGIN 
    OPEN C1; 
    FETCH C1 INTO JOBS; 
    CLOSE C1; 

    RES := JOBS; 
    DBMS_OUTPUT.PUT_LINE(RES); 
END; 

этот код возвращает:

anonymous block completed 

JACKSON 

Если я применяю это на застройщике отчета с помощью возврата (DOPL не будет работать на Oracle Report Builder так, используя ВОЗВРАТ) этот блок даст мне тот же результат, выше.

Постараюсь с петлей (Этот шаг очень важен для меня)

SET SERVEROUTPUT ON 

DECLARE 
    CURSOR C1 IS SELECT NAME FROM EMP WHERE JOB = 'CLERK'; 
    JOBS VARCHAR2(2000); 
    RES VARCHAR2(2000); 
BEGIN 
    OPEN C1; 

    LOOP 
    FETCH C1 INTO JOBS; 
    EXIT WHEN c1%NOTFOUND; 

    res := jobs; 
    DBMS_OUTPUT.PUT_LINE(res); 
    END LOOP; 

    CLOSE C1; 
END; 

В SQL Developer это вернемся ниже:

anonymous block completed 

JACKSON 
JOHN 
DEXIE 
MITHUN 

же я попробовал в Oracle Report Builder, используя возврат вместо DBMS_OUTPUT.PUT_LINE, но она возвращается, как показано ниже:

anonymous block completed 

JACKSON 

второй блок в то время как выполняется на sql-разработчике, давая мне всю запись, где job = clerk, но в построителе отчетов это не дает мне правильный результат. В построителе отчетов он должен давать 4 строки, но возвращает только одну строку. Поэтому мне нужно знать, как получить эти 4 строки в построителе отчетов.

Пожалуйста, помогите мне решить эту проблему.

+0

так вы говорите блок первой курсор возвращается неправильные данные? – Moudiz

+0

Не первый курсор сатья также возвращает правильный. Там я не использовал цикл так, чтобы его возвращалась первая строка. Теперь меня беспокоит второй блок. –

+0

Не первый курсор сатья также возвращает правильный. Там я не использовал цикл так, чтобы его возвращалась первая строка. Теперь я беспокоюсь о втором блоке, когда выполняется на sql-разработчике, давая мне всю запись, где job = clerk, но в построителе отчетов это не дает мне правильный результат. В построителе отчетов он должен давать 4 строки, но возвращает только одну строку. Поэтому мне нужно знать, как получить эти 4 строки в построителе отчетов. –

ответ

0

Решенный это после того, как я изменил код, как показано ниже:

SET SERVEROUTPUT ON 

     DECLARE 
      CURSOR C1 IS SELECT NAME FROM EMP WHERE JOB = 'CLERK'; 
      JOBS VARCHAR2(2000); 
      RES VARCHAR2(2000); 

     n1 number default null; 
    BEGIN 
     OPEN C1; 

     LOOP 
     if n1 is null then 
     FETCH C1 INTO JOBS; 
     EXIT WHEN c1%NOTFOUND; 
     res := jobs||chr(10); 
     else 
     res:= res||chr(10)||jobs; 
    end if; 
    DBMS_OUTPUT.PUT_LINE(res); 
     END LOOP; 
     CLOSE C1; 
    END; 

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

  • Нет связанных вопросов^_^