Как можно избежать Oracle Ref Cursor - PullRequest
0 голосов
/ 04 июля 2019

У меня есть приложение, которое содержит большое количество строк. Я использовал курсор ref, но мне не нужен курсор. как этого добиться.

here is below code i was using ref cursor please help me out how can avoid it.any idea

create or replace
PROCEDURE remove_emp 
(
employee_id in NUMBER,
o_data out sys_refcursor
) 
AS
        v_account_status        help.topic%type;
        v_username             help.seq%type;
        v_lock_date             help.info%type;        
BEGIN
         open o_data for
         select topic,seq, info
         into  v_account_status,v_username,v_lock_date
         from help;-- where seq=employee_id ;
         DBMS_OUTPUT.put_line ('topic:'||v_account_status);
         DBMS_OUTPUT.put_line ('seq:'||v_username);
         DBMS_OUTPUT.put_line ('info:'||v_lock_date);
   END remove_emp;

1 Ответ

1 голос
/ 04 июля 2019

Просто уберите курсор и просто используйте SELECT ... INTO ...:

Установка Oracle :

CREATE TABLE help ( topic, seq, info ) AS
  SELECT 'a', 1, 'aa' FROM DUAL UNION ALL
  SELECT 'b', 2, 'bb' FROM DUAL UNION ALL
  SELECT 'c', 3, 'cc' FROM DUAL;

Процедура :

create PROCEDURE remove_emp 
(
  employee_id in help.seq%type
) 
AS
  v_account_status help.topic%type;
  v_username       help.seq%type;
  v_lock_date      help.info%type;        
BEGIN
  select topic,seq, info
  into  v_account_status,v_username,v_lock_date
  from help where seq=employee_id;

  DBMS_OUTPUT.put_line ('topic:'||v_account_status);
  DBMS_OUTPUT.put_line ('seq:'||v_username);
  DBMS_OUTPUT.put_line ('info:'||v_lock_date);
EXCEPTION
  WHEN NO_DATA_FOUND THEN
    DBMS_OUTPUT.put_line ('seq:Not Found!');
END remove_emp;
/

Вызовите процедуру :

BEGIN
  remove_emp(1);
END;
/

выход

topic:a
seq:1
info:aa

дБ <> скрипка здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...