【发布时间】:2017-01-11 03:28:31
【问题描述】:
这是我关于堆栈溢出的第一篇文章,如果我的问题被问错了,请 lmk。
我正在尝试在 plsql 中创建一个过程(我最近几周才使用过),它传递了两个参数:列名及其关联的表。然后在 Oracle APEX 中调用此过程,从而创建一个 DataTable,并将列名作为填充行的表的标题。
我已经让这个过程静态地使用列名和表名的预定义值,但我希望它是动态的,因为这个过程将在其他地方使用。这是我目前的尝试:
procedure dataTable(column_name VARCHAR2, table_name VARCHAR2) as
select_sql varchar2(1024);
--this should be a record or cursor i think, but I'm not sure how to do either
result_sql varchar2(1024);
begin
htp.p('<table width="100%" class="table table-striped table-bordered" id="some_id"String cellspacing="0"String><thead><tr>');
htp.p('<th>'||column_name||'</th>');
htp.p('</tr></thead><tbody>');
select_sql := 'SELECT ' ||column_name||' FROM '||table_name;
--error occurs on line below
EXECUTE IMMEDIATE select_sql into result_sql;
for i in result_sql LOOP
htp.p('<tr><td>'||i.(something here to access row data)||'</td></tr>');
end loop;
end;
这给出了错误:
编译失败,第 40 行 (13:52:44) PLS-00456:项目 'RESULT_SQL' 不是游标编译失败,第 40 行 (13:52:44) PL/SQL:语句被忽略
我查看了oracle docs 关于动态 plsql 和记录/游标的信息,并尝试了这些示例但无济于事。
有什么建议吗?谢谢。
编辑:修复小错误
【问题讨论】:
-
错误对应的是哪一行?目前,我们看不到第 40 行。
-
另外,尝试将
EXECUTE行更改为:EXECUTE IMMEDIATE '' || select_sql || ' into ' || result_sql;并告诉我们会发生什么。 -
仅使用@GurV 下面的答案我得到了另一个错误,并补充说我没有更多错误。 +1
标签: oracle stored-procedures plsql