Поскольку вы пометили это для SQL Developer, вы можете использовать (ab) использовать для этого переменные подстановки;в вашей рабочей таблице выполните:
column x_title new_value y_title noprint;
select TO_CHAR('#'||TO_CHAR(sysdate-30,'yyyymmdd')||'-'||TO_CHAR(sysdate+2,'yyyymmdd'))
as x_title
from dual;
set verify off
select sysdate as "&y_title" from dual;
, которая при запуске в качестве скрипта (F5) выдаст это в окне «Вывод скрипта»:
<blank lines ...>
#20190126-
----------
2019-02-25
, а затем, если вы снова запустите последнюю строкув качестве оператора (control-enter) окно Query Result показывает его, как вы хотели, из изображения в вашем вопросе.
Вы также можете использовать команду column
, которая делает вывод в Script Output ближе кто, что вы хотели при запуске в виде сценария:
column sysdate heading &y_title
select sysdate from dual;
#20190126-20190227
------------------
2019-02-25
, но затем при запуске в качестве оператора окно результатов запроса не учитывает этот заголовок.
Обратите внимание, что все это зависит от клиентафункциональность, а не SQL - он будет работать в SQL Developer, а версии сценариев будут работать в SQL * Plus и SQLcl, но не в других клиентах (если они не пытались до некоторой степени соответствовать SQL * Plus).
Если вы не только собираетесь просматривать результаты на одном из этих клиентов, но на самом деле хотите в конечном итоге, скажем, добавить их в приложение через JDBC или что-то еще, тогда другие решения будут более подходящий.Генерировать курсор ref со столбцом в качестве нужного имени было бы довольно просто.Но это не то, что вы просили ...
ОК, так как вы спросили в комментарии, вы можете открыть курсор ссылки в анонимном блоке:
var rc refcursor
declare
l_alias varchar2(50);
begin
select TO_CHAR('#'||TO_CHAR(sysdate-30,'yyyymmdd')||'-'||TO_CHAR(sysdate+2,'yyyymmdd'))
into l_alias
from dual;
open :rc for 'SELECT sysdate as "' || l_alias || '" FROM dual';
end;
/
PL/SQL procedure successfully completed.
print rc
#20190127-
----------
2019-02-26
или без локальной переменной:
var rc refcursor
begin
open :rc for 'SELECT sysdate as "'
|| TO_CHAR('#'||TO_CHAR(sysdate-30,'yyyymmdd')||'-'||TO_CHAR(sysdate+2,'yyyymmdd'))
|| '" FROM dual';
end;
/
PL/SQL procedure successfully completed.
print rc;
#20190127-
----------
2019-02-26
Опять var[iable]
и print
- клиентские команды;и я не думаю, что есть способ получить результаты в таблице результатов запроса с помощью этого подхода.Но вы можете использовать тот же подход анонимного блока от других клиентов или приложений;например, из JDBC вы можете получить оператор:
String sql = "begin open ? for 'SELECT sysdate as \"'"
+ "|| TO_CHAR('#'||TO_CHAR(sysdate-30,'yyyymmdd')||'-'||TO_CHAR(sysdate+2,'yyyymmdd'))"
+ "|| '\" FROM dual'; end;";
и затем связать заполнитель параметра ?
как тип курсора перед выполнением.Это, вероятно, не очень полезно, так как вам все равно придется изучить метаданные, чтобы найти псевдоним столбца, и вы можете сгенерировать их на стороне приложения, используя инструменты языка приложения (например, манипулирование датой Java).
Вы также можете создать функцию, которая возвращает курсор ref, который затем можно вызвать из простого запроса (вместо анонимного блока), что позволит вам увидеть его в сетке результатов запроса - возможно, с дополнительнымшаг, чтобы показать результат курсора.Но вам не нужен этот дополнительный уровень кода или вы хотите, чтобы в вашей БД был создан другой объект.