Процедура хранения Oracle вернет все данные из таблицы - PullRequest
0 голосов
/ 31 мая 2018

Эта функция вернет всю строку из таблицы, которую я отправляю, в качестве параметра

CREATE OR REPLACE FUNCTION get_results(tables_name IN varchar2)
  RETURN SYS_REFCURSOR
  IS
  l_rc SYS_REFCURSOR;
BEGIN
  OPEN l_rc
    FOR 'SELECT *
     FROM ' || tables_names ;
  RETURN l_rc;
END;

Эта процедура вызовет вышеуказанную функцию.Я просто вызову процедуру с именем категории и хочу получить все значения из тех таблиц, которые связаны с категорией.

CREATE OR REPLACE PROCEDURE select_record(category_name IN VARCHAR2) 
  AS 
  type tableaarray IS VARRAY(20) OF VARCHAR2(20); 
  tables_names tableaarray; 
  total integer;
  result SYS_REFCURSOR;
BEGIN 
  IF category_name = 'jobs' THEN
    tables_names := tableaarray('categories');   
  ELSIF category_name = 'alert' THEN
    tables_names := tableaarray('alert_demo');   
  END IF;  
  total := tables_names.count;

  FOR i in 1 .. total LOOP 
    result := get_results(tables_names(i));

  END LOOP; 
END;

Теперь проблема в цикле.Я не могу отобразить вывод, который я получаю в цикле.Подход не может быть правильным.Я новичок в plsql.Пожалуйста, дайте мне некоторую идею, как я могу это сделать.

1 Ответ

0 голосов
/ 01 июня 2018

Это действительно кажется мне антипаттерном.Вы делаете SELECT * в своем курсоре, поэтому вы получаете разные списки столбцов для каждого имени таблицы.

Почему вы делаете это таким образом, а не выбираете нужные столбцы изТаблицы, которые вас интересуют?

Если вам действительно нужно это сделать, я бы предложил создать динамический SQL с пакетом DBMS_SQL .Это довольно сложная вещь, и вы говорите, что вы новичок в PL / SQL, поэтому я не знаю ...

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