我正在尝试报告 PL/SQL 块正在动态提取哪个查询。我从 这篇文章中得到灵感 ,列数是动态的,取决于循环:
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 并将其标记为错误。如果我选择 Use Generic Column Names (parse query at runtime only)它返回正确的数字列但命名为 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
任何有助于找到动态命名列的方法都非常受欢迎。任何指针,任何建议和链接。