Как я могу напечатать многострочный результат, используя PL / SQL? - PullRequest
1 голос
/ 15 ноября 2010
PROCEDURE A(
...
BEGIN
stmt := 'select * from '||src;
execute immediate stmt;
dbms_output.put_line(??);
END A;

Ответы [ 2 ]

0 голосов
/ 15 ноября 2010

Если вы знаете структуру таблицы, названной в "src", при написании кода, то вы можете сделать это:

PROCEDURE A IS
...
  l_cur sys_refcursor;
BEGIN
  stmt := 'select * from '||src;
  open l_cur for stmt;
  loop
    fetch l_cur into ??; -- record or list of variables that matches columns of "src"
    exit when l_cur%notfound;
    dbms_output.put_line(??);
  end loop;
  close l_cur;
END A;

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

0 голосов
/ 15 ноября 2010

Я не уверен, работает ли это с вашим подходом «execute немедленный ввод в эксплуатацию», но со статическим Sql у меня работает следующее:

  for my_result in
  (
    select * from my_table tbl
     where ...
     order by tbl.my_id_col
  ) loop

    dbms_output.put_line(my_result.field1 || ', ' || my_result.field2 || ...);

  end loop;
...