关于Pl / SQL生成的查询的Oracle Apex唯一列别名

时间:2013-09-18 16:07:36

标签: sql oracle oracle-apex

我正在尝试获取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会将其标记为error.If I select 使用通用列名称(仅在运行时解析查询)它返回正确的列数,但命名为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

任何帮助找到一种方法来动态地命名列,这是非常有用的。 任何指针,任何建议和链接。

1 个答案:

答案 0 :(得分:2)

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

尝试:

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 || '",' ;

希望它有所帮助...