Результаты процедуры с псевдонимом переменной колонки - PLSQL / Oracle - PullRequest
1 голос
/ 12 марта 2019

У меня есть эта процедура, работающая в TOAD / PLSQL, но хотелось бы, чтобы псевдоним первого столбца был установлен в качестве аргумента field_name, переданного в процедуру. Я думаю, что мне нужно построить запрос в виде строки, как,

query := 'Select 1 as ' || field_name || ' From Dual';

Но я не правильно понимаю. Возможно ли то, что я имею в виду?

Спасибо, и рабочий код, который я пытаюсь изменить, приведен ниже.

Create or Replace Procedure Delete_Me(field_name NVarChar2)
as
result_set sys_refcursor;

BEGIN

open result_set for 

    Select
         Elapsed_Time((Select Start_Time From Temp_Time1)) as field_name
        ,To_Char(SysDate, 'HH12:MI:SS AM') as Time_Completed
        ,Elapsed_Time((Select Start_Time From Temp_Time0)) as Process_So_Far
    From
         Dual;

    DBMS_SQL.RETURN_RESULT(result_set);     

End;

После комментария:

Я передаю процедуре строку и ее значение помещается в «field_name». Я хотел бы, чтобы псевдоним первого столбца принял значение field_name. Поэтому, если я вызову процедуру так:

BEGIN
DeleteMe('Random_Column_Name');
END;

Имя первого столбца будет называться «Случайное имя столбца». Если бы я назвал процедуру так:

BEGIN
DeleteMe('Different_Column_Name');
END;

Первый столбец будет именами "Different_Column_Name."

После второго комментария Дмитрия: Это ничего не значит. Это пример того, что я пытался и не смог заставить работать.

Ответы [ 2 ]

0 голосов
/ 14 марта 2019

Вот что я наконец-то придумал. Станимир помог мне понять, как используются переменные. Спасибо за это!

Create or Replace Procedure Report_Elapsed_Time(field_name0 NVarChar2,
                                                field_name1 NVarChar2)
    as
    result_set sys_refcursor;
        query VarChar2(30000);
    BEGIN

        query := 'Select
                         Elapsed_Time((Select Start_Time From Temp_Time1)) as ' || Replace(field_name0, ' ', '_') || '
                        ,To_Char(SysDate, ''HH12:MI:SS AM'') as Time_Completed
                        ,Elapsed_Time((Select Start_Time From Temp_Time0)) as ' || Replace(field_name1, ' ', '_') || '
                  From
                         Dual';

        open result_set for query;

        DBMS_SQL.RETURN_RESULT(result_set);     

    End;
0 голосов
/ 13 марта 2019

Я понимаю, что вам нужно сделать динамический запрос, способ сделать это примерно так:

DECLARE
    TYPE ty_refcur IS REF CURSOR;

    c_mycur  ty_refcur;
    whatever varchar2(200) := 'whatever';
    my_query varchar2(500);

BEGIN
    my_query := 'Select ''hello''as '||whatever||' from dual';
    OPEN c_mycur FOR my_query;
      --whatever you want to do
    CLOSE   c_mycur;
END;
...