【问题标题】:Procedure Results with Variable Column Alias - PLSQL/Oracle具有可变列别名的过程结果 - PLSQL/Oracle
【发布时间】:2019-08-02 23:46:47
【问题描述】:

我已经让这个过程在 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;

第一个列名将被称为“Random_Column Name”。如果我这样调用程序:

BEGIN
DeleteMe('Different_Column_Name');
END;

第一列是名称,“Different_Column_Name”。

在德米特里的第二条评论之后: 这并不意味着什么。这是我尝试过但未能开始工作的一个例子。

【问题讨论】:

  • 能否请您编辑您的问题并添加一个示例,说明您现在拥有什么以及您想要获得什么?目前,很难理解。
  • 游标的 SQL 应该通过将别名变量与其他部分连接起来构造。别名变量应该在引号之外。
  • 字符串query := 'Select 1 as ' || field_name || ' From Dual'; - 这是什么意思?你在哪里用的?

标签: oracle stored-procedures plsql dynamic-sql


【解决方案1】:

我知道您需要进行动态查询,方法如下:

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;

【讨论】:

  • 太棒了!这是正确的想法,但我需要它是一个过程并返回结果。很抱歉,我没有遵循“我想做的任何事情”。我希望它返回您构建的 my_query 字符串的结果。谢谢!
  • 嗨,无论你想做什么,我的意思是,你可以复制和粘贴你自己的行为,就像你在问题代码中一样。 DBMS_SQL.RETURN_RESULT(result_set);关于程序,我贴的代码和程序体一样,只是去掉DECLARE,就是程序体。
【解决方案2】:

这是我最终想出的。 Stanimir 帮助我了解如何使用变量。谢谢!

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;

【讨论】:

    猜你喜欢
    • 2020-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-28
    • 2014-11-28
    • 2021-10-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多