Справочник стран

Есть справочник стран — таблица FW_COUNTRY

CREATE TABLE FW_COUNTRY
("ID_COUNTRY" NUMBER(10),
	"V_NAME" VARCHAR2(64),
  "B_DELETED" NUMBER(1) DEFAULT 0
) TABLESPACE MIRAVILD_DATA;
 
COMMENT ON TABLE FW_COUNTRY IS 'Страна';
COMMENT ON COLUMN FW_COUNTRY.ID_COUNTRY IS 'Код страны';
COMMENT ON COLUMN FW_COUNTRY.V_NAME IS 'Наименование страны';
COMMENT ON COLUMN FW_COUNTRY.B_DELETED IS 'Признак удаления (0 - активна)';
/

Напишите процедуру для извлечения данных из таблицы, так, чтобы на вход она могла принимать ID страны – переменная pID (при условии, что она может быть NULL – и тогда нужно выводить все записи), а на выход возвращала курсор (переменная dwr) в виде полей ID_COUNTRY, V_NAME с сортировкой по V_NAME для B_DELETED = 0.

Тестовые данные:

INSERT INTO fw_country c
  (c.id_country, c.v_name, c.b_deleted)
VALUES
  (643, 'Россия', 1);

INSERT INTO fw_country c
  (c.id_country, c.v_name, c.b_deleted)
VALUES
  (840, 'Соединенные Штаты', 2);

INSERT INTO fw_country c
  (c.id_country, c.v_name, c.b_deleted)
VALUES
  (826, 'Соединенное Королевство', 3);

INSERT INTO fw_country c
  (c.id_country, c.v_name, c.b_deleted)
VALUES
  (276, 'Германия', 4);

INSERT INTO fw_country c
  (c.id_country, c.v_name, c.b_deleted)
VALUES
  (268, 'Грузия', DEFAULT);
  
COMMIT WORK;
/
CREATE OR REPLACE PROCEDURE p_cursor(p_id IN fw_country.id_country%TYPE,
                                     dwr  OUT SYS_REFCURSOR) IS
  v_str VARCHAR2(4000 CHAR);
BEGIN
  IF p_id IS NOT NULL THEN
    v_str := 'SELECT c.id_country, c.v_name
      FROM fw_country c
     WHERE c.b_deleted = 0 AND c.id_country = ' || p_id ||
             ' ORDER BY c.v_name ASC';
  ELSE
    v_str := 'SELECT c.id_country, c.v_name
        FROM fw_country c
       WHERE c.b_deleted = 0
       ORDER BY c.v_name ASC';
  END IF;

  OPEN dwr FOR v_str;

END p_cursor;
/

P.S.
Конфигурация СУБД — Oracle Database 11g Express Edition Release 11.2.0.2.0
IDE — PL/SQL Developer Version 11.0.6.1776

Tags: , , ,

Leave a Reply

You must be logged in to post a comment.