powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / sys_refcursor
16 сообщений из 16, страница 1 из 1
sys_refcursor
    #39230341
Чингис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день Гуру Оракл!
я изучаю оракл никак допереть не могу до курсора или sys_refcursor
есть процедура написана кем то, никак немогу запустить запрос
что подставить по умолчанию вместо :cur (null, '' не принимает)

begin
-- Call the procedure
kp_dreport002_list(cur => :cur,
bdate_ => :bdate_,
edate_ => :edate_);
end;
...
Рейтинг: 0 / 0
sys_refcursor
    #39230403
айтматов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Чингис,
какой тип параметра cur ?
...
Рейтинг: 0 / 0
sys_refcursor
    #39230475
Чингис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
айтматов, out sys_refcursor
...
Рейтинг: 0 / 0
sys_refcursor
    #39230908
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чингис,

в sql*plus-e
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SQL> var cur REFCURSOR
SQL> exec open :cur for select * from dept;

PL/SQL procedure successfully completed.

SQL> print :cur

    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON



......
stax
...
Рейтинг: 0 / 0
sys_refcursor
    #39232976
Чингис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..Чингис,

в sql*plus-e
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SQL> var cur REFCURSOR
SQL> exec open :cur for select * from dept;

PL/SQL procedure successfully completed.

SQL> print :cur

    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON



......
stax


спс вышло а если в процедуре как будет? создание процедуры и вызов?
...
Рейтинг: 0 / 0
sys_refcursor
    #39232978
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
sys_refcursor
    #39234821
Чингис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax.., к примеру создал я процедуру

create or replace
PROCEDURE KP_READ_TS_UL_VIEW

(CUR out sys_refcursor,
err_code out integer,
err_msg out varchar2) is


begin
Err_code:=0;
ERR_msg:='';

begin
open cur for
select id_street
from ts_street;
end;
commit;
exception
when others then
rollback;
err_code:=sqlcode;
err_msg:='pizdec';
END KP_READ_TS_UL_VIEW;


и вызвать мне его надо

begin
KP_READ_TS_UL_VIEW(cur =>?,err_code=>0,err_msg=>'');

end;

что написать вместо вопросительного знака
...
Рейтинг: 0 / 0
sys_refcursor
    #39234852
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чингис, так же, как с переменной любого типа.
Объявить ее и указать в качестве аргумента.
...
Рейтинг: 0 / 0
sys_refcursor
    #39234853
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
declare
  c sys_refcursor;
begin
  KP_READ_TS_UL_VIEW(c, 1, '');
end;



Заодно подумайте перед прогоном, почему так не сработает.
...
Рейтинг: 0 / 0
sys_refcursor
    #39306903
Чингис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmdmdm,
добрый день неделю сижу разбираю с этим курсором никак понять не могу подскажите

к примеру процедура

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
PROCEDURE KP_READ_DPREPORT_IPUAVG
(
  CUR               OUT SYS_REFCURSOR,
  MCARCNO_          IN  VARCHAR2
) IS
BEGIN

-- BLOCK 01 BEGIN --
BEGIN
   OPEN CUR FOR
    SELECT MCACC.ID AS "Лиц. счет",
           KPU.NAME AS "Класс ИПУ",
         ........
         .......
     FROM T_MCACC MCACC,
          T_MCACCTU MCACCTU,
          T_MCPU MCPU,
          TS_KPU KPU,
          TS_TPPU TPPU
    WHERE MCACC.ID=MCACCTU.MCACC_ID AND
          MCACCTU.TU=MCPU.TU AND
          MCPU.KPU_ID=KPU.ID AND
          MCPU.TPPU_ID=TPPU.ID 
 END;
-- BLOCK 01 END --

  COMMIT;
  EXCEPTION

  WHEN OTHERS THEN
   ROLLBACK;

END KP_READ_DPREPORT_IPUAVG;




дальше вызываю как?

declare
cur sys_refcursor;
mcarcno_ varchar2(20):='2016/08';
begin
DBMS_OUTPUT.enable;
kp_read_dpreport_ipuavg(cur,mcarcno_);

DBMS_OUTPUT.put_line(mcarcno_);
end;
...
Рейтинг: 0 / 0
sys_refcursor
    #39307001
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чингисdmdmdm,
добрый день неделю сижу разбираю с этим курсором никак понять не могу подскажите

к примеру процедура

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
PROCEDURE KP_READ_DPREPORT_IPUAVG
(
  CUR               OUT SYS_REFCURSOR,
  MCARCNO_          IN  VARCHAR2
) IS
BEGIN

-- BLOCK 01 BEGIN --
BEGIN
   OPEN CUR FOR
    SELECT MCACC.ID AS "Лиц. счет",
           KPU.NAME AS "Класс ИПУ",
         ........
         .......
     FROM T_MCACC MCACC,
          T_MCACCTU MCACCTU,
          T_MCPU MCPU,
          TS_KPU KPU,
          TS_TPPU TPPU
    WHERE MCACC.ID=MCACCTU.MCACC_ID AND
          MCACCTU.TU=MCPU.TU AND
          MCPU.KPU_ID=KPU.ID AND
          MCPU.TPPU_ID=TPPU.ID 
 END;
-- BLOCK 01 END --

  COMMIT;
  EXCEPTION

  WHEN OTHERS THEN
   ROLLBACK;

END KP_READ_DPREPORT_IPUAVG;




дальше вызываю как?

declare
cur sys_refcursor;
mcarcno_ varchar2(20):='2016/08';
begin
DBMS_OUTPUT.enable;
kp_read_dpreport_ipuavg(cur,mcarcno_);

DBMS_OUTPUT.put_line(mcarcno_);
end;
что не получается? где в процедуре используете mcarcno_?
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
SQL> ed
Wrote file afiedt.buf

  1  declare
  2     cur sys_refcursor;
  3     mcarcno_ varchar2(20):='CLERK';
  4     v_ename  varchar2(10);
  5  PROCEDURE KP_READ_DPREPORT_IPUAVG
  6  (
  7    p_CUR               OUT SYS_REFCURSOR,
  8    p_MCARCNO_          IN  VARCHAR2
  9  ) IS
 10  BEGIN
 11  -- BLOCK 01 BEGIN --
 12   BEGIN
 13     OPEN p_CUR FOR
 14      SELECT ename from emp e where job=p_MCARCNO_;
 15   END;
 16  -- BLOCK 01 END --
 17  COMMIT;
 18    EXCEPTION
 19    WHEN OTHERS THEN
 20     ROLLBACK;
 21  END KP_READ_DPREPORT_IPUAVG;
 22  begin
 23    DBMS_OUTPUT.enable;
 24    DBMS_OUTPUT.put_line(mcarcno_);
 25    KP_READ_DPREPORT_IPUAVG(cur,mcarcno_);
 26    fetch cur into v_ename;
 27    while cur%FOUND loop
 28      dbms_output.put_line(v_ename);
 29      fetch cur into v_ename;
 30    end loop;
 31    close cur;
 32* end;
SQL> /
CLERK
SMITH
ADAMS
JAMES
MILLER

PL/SQL procedure successfully completed.

SQL>



.....
stax
...
Рейтинг: 0 / 0
sys_refcursor
    #39307246
Чингис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax.., я просто урезал его в условий


PROCEDURE KP_READ_DPREPORT_IPUAVG
(
CUR OUT SYS_REFCURSOR,
MCARCNO_ IN VARCHAR2
) IS
BEGIN


-- BLOCK 01 BEGIN --
BEGIN
OPEN CUR FOR
SELECT MCACC.ID AS "Лиц. счет",
KPU.NAME AS "Класс ИПУ",
MCPU.NPLANT AS "№ ИПУ",
TPPU.NAME AS "Тип ИПУ",
(SELECT MAX(NAME) FROM TS_TPPOTR WHERE ID=AM_MCCALCUL.F_TPPOTR(KP_GET_ACCTU(MCACC.ID), LAST_DAY(TO_DATE(MCARCNO_,'YYYY/MM')))) AS "Тип потрб.",
(SELECT MAX(NAME) FROM TS_STBLOG WHERE ID=AM_MCCALCUL.F_STBLOG(KP_GET_ACCTU(MCACC.ID), LAST_DAY(TO_DATE(MCARCNO_,'YYYY/MM')))) AS "Ст.блог.",
KP_MCCALCUL.IPUAVG(MCPU.ID) AS "Сред. потребление",
KP_GET_PPOK(MCPU.ID) AS "Последние снятые пок-я",
AM_MCCALCUL.F_KP(KP_GET_ACCTU(MCACC.ID), LAST_DAY(TO_DATE(MCARCNO_,'YYYY/MM'))) AS "КОЛ-ВО ПРОЖ"
FROM T_MCACC MCACC,
T_MCACCTU MCACCTU,
T_MCPU MCPU,
TS_KPU KPU,
TS_TPPU TPPU
WHERE MCACC.ID=MCACCTU.MCACC_ID AND
MCACCTU.TU=MCPU.TU AND
MCPU.KPU_ID=KPU.ID AND
MCPU.TPPU_ID=TPPU.ID AND
EXISTS (SELECT DST.*
FROM T_MCDEIST DST
WHERE DST.ARCFL=1 AND
DST.DEIST_ID IN (1,2) AND
DST.DTDATE<LAST_DAY(TO_DATE(MCARCNO_,'YYYY/MM')) AND
DST.MCPU_ID=MCPU.ID) AND
NOT EXISTS (SELECT DST.*
FROM T_MCDEIST DST
WHERE DST.ARCFL=1 AND
DST.DEIST_ID IN (3,10) AND
DST.DTDATE<TO_DATE(MCARCNO_,'YYYY/MM') AND
DST.MCPU_ID=MCPU.ID)

END;
-- BLOCK 01 END --


COMMIT;
EXCEPTION

WHEN OTHERS THEN
ROLLBACK;

END KP_READ_DPREPORT_IPUAVG;
...
Рейтинг: 0 / 0
sys_refcursor
    #39307249
Чингис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax.., из примера беру и пишу

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
DECLARE
   cur sys_refcursor;
    mcarcno_ VARCHAR2(20):='2016/07';
     v_ename  VARCHAR2(10);
  BEGIN
    DBMS_OUTPUT.ENABLE;
    DBMS_OUTPUT.put_line(mcarcno_);
    KP_READ_DPREPORT_IPUAVG(cur,mcarcno_);
    fetch cur INTO v_ename;
    WHILE cur%FOUND LOOP
      dbms_output.put_line(v_ename);
      fetch cur INTO v_ename;
    END LOOP;
    close cur;
 END;



0654 Возвратные типы переменных Result Set или запроса не совпадают
line 9
...
Рейтинг: 0 / 0
sys_refcursor
    #39307667
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чингисstax.., из примера беру и пишу

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
DECLARE
   cur sys_refcursor;
    mcarcno_ VARCHAR2(20):='2016/07';
     v_ename  VARCHAR2(10);
  BEGIN
    DBMS_OUTPUT.ENABLE;
    DBMS_OUTPUT.put_line(mcarcno_);
    KP_READ_DPREPORT_IPUAVG(cur,mcarcno_);
    fetch cur INTO v_ename;
    WHILE cur%FOUND LOOP
      dbms_output.put_line(v_ename);
      fetch cur INTO v_ename;
    END LOOP;
    close cur;
 END;



0654 Возвратные типы переменных Result Set или запроса не совпадают
line 9

1) fetch cur INTO v_ID,V_NAME ,v_.NPLANT ,...;
(можно фетчить в запись record)
2) зачем Вам commit в процедуре, імхо он лишний

......
stax
...
Рейтинг: 0 / 0
sys_refcursor
    #39307690
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..зачем Вам commit в процедуре, імхо он лишнийэтот холивар лучше вообще не трогать
...
Рейтинг: 0 / 0
sys_refcursor
    #39308117
Чингис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax.., спс огромное вроде получается сразу можно оказ процедуру записать
и вызвать.
я по этой http://www.firststeps.ru/sql/oracle/r.php?64 разбирался
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / sys_refcursor
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]