Я изучал пакет DBMS_SQL в Oracle и пытался выяснить, есть ли способ создать представление или что-то, что пользователи могут выбрать, чтобы просмотреть результаты динамического SQL-запроса ,Разрешить пользователям SELECT из динамического SQL
У меня есть процедура тестирования на основе документации:
CREATE OR REPLACE PROCEDURE test_dyn_sql AS
cursor_name INTEGER;
rows_processed INTEGER;
l_query LONG;
BEGIN
l_query := 'SELECT SYSDATE AS the_date, ''ABC'' AS the_string, 1 AS the_int FROM dual';
cursor_name := dbms_sql.open_cursor;
DBMS_SQL.PARSE(cursor_name, l_query, DBMS_SQL.NATIVE);
rows_processed := DBMS_SQL.EXECUTE(cursor_name);
DBMS_SQL.CLOSE_CURSOR(cursor_name);
EXCEPTION
WHEN OTHERS THEN
DBMS_SQL.CLOSE_CURSOR(cursor_name);
DBMS_OUTPUT.put_line('ERROR');
END;
Но это просто выполняет оператор и не возвращает ничего. То, что мне нужно, - это представление, так что пользователь может просто сделать SELECT the_date FROM some_view
и получить результаты. Я не буду знать имена или количество столбцов заранее, поэтому я после динамического SQL-решения.
Я не думаю, что есть какой-либо способ сделать это. На самом деле это не тот взгляд. Вы могли бы создать функцию, которая каким-то образом возвращает таблицу? См. [This] (http://oracle-base.com/articles/misc/pipelined-table-functions.php) пример функции таблицы. – OldProgrammer