【问题标题】:Oracle Apex unique column alias on query generated by Pl/SQL由 Pl/SQL 生成的查询的 Oracle Apex 唯一列别名
【发布时间】:2013-09-18 16:07:36
【问题描述】:

我正在尝试报告 PL/SQL 块正在动态提取哪个查询。 我的灵感来自 this article 列数是动态的,取决于循环:

declare
l_qry VARCHAR2(4300);
s_qry VARCHAR2(80) := 0;
v_resort_id NUMBER := 1;

begin

l_qry := 'select a.column1,';

FOR pci in ( select id,name from table_pci where resort_id = v_resort_id) LOOP

s_qry := s_qry||'package.some_function (a.id,''' || pci.id || ''' , ''PC'') Property_type,' ;

 END LOOP;

   l_qry := l_qry ||s_qry;

   l_qry := l_qry||'a.column2 from features a where a.feature_type = ''condition1'' ';


return(l_qry);

end;

Property_type 是动态列上的硬编码别名,因此每次循环都会尝试生成具有相同名称的列和 Apex 并将其标记为错误。如果我选​​择 使用通用列名(仅在运行时解析查询)它返回正确的列数,但命名为 Col1、Col2、Col3...

如果我尝试从 table_pci 中获取动态的名称,我尝试过:

s_qry := s_qry||'package.some_function (a.id,''' || pci.id || ''' , ''PC'') '''|| pci.name || ''',' ;

我得到错误

failed to parse SQL query:
ORA-00923: FROM keyword not found where expected

对于找到动态命名列的方法的任何帮助都非常感谢。 任何指针、任何建议和链接。

【问题讨论】:

    标签: sql oracle oracle-apex


    【解决方案1】:

    我认为您在尝试使用动态列别名时可能会遇到语法错误。

    试试:

    s_qry := s_qry||'package.some_function (a.id,''' || pci.id || ''' , ''PC'') AS '|| pci.name || ',' ;
    

    如果pci.name 中的值可能包含空格,则用双引号将其括起来:

    s_qry := s_qry||'package.some_function (a.id,''' || pci.id || ''' , ''PC'') AS "'|| pci.name || '",' ;
    

    希望对你有帮助...

    【讨论】:

    • 你是救生员。第二个选项有效 - 你的“'|| pci.name||' "对于 Apex 与 '''|| 有某种不同pci.name||'''
    • 很高兴它有帮助。如果将列别名括在双引号中(第二个示例),则它可以容忍空格和其他字符。
    猜你喜欢
    • 1970-01-01
    • 2019-06-30
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-26
    • 1970-01-01
    • 1970-01-01
    • 2015-01-03
    相关资源
    最近更新 更多