【发布时间】:2015-04-06 22:16:59
【问题描述】:
开发人员,
我到处搜索,但找不到这个简单问题的解决方案。
情况:
我需要编写一个过程,它将列名作为输入并返回该列中存在的所有不同值作为输出。然后我必须在一些 c# 代码中使用这个过程。
在 MS 服务器中,这很容易,因为它会直接给出结果集,这与 PL/SQL 不同。
我可以写的脚本(这并没有给我我需要的结果):
CREATE OR REPLACE
PROCEDURE GetCol(PARAM IN STRING, recordset OUT sys_refcursor)
AS
BEGIN
OPEN recordset FOR
SELECT DISTINCT(PARAM)
FROM my_table;
END
;
当我尝试使用此代码检查记录集中的数据时:
DECLARE
l_cursor SYS_REFCURSOR;
l_sname VARCHAR2(50);
BEGIN
GetCol('col_name',l_cursor);
LOOP
FETCH l_cursor INTO l_sname;
EXIT WHEN l_cursor%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(l_sname);
END LOOP;
CLOSE
有人可以帮我处理这段代码吗?
【问题讨论】:
-
逻辑看起来是正确的,但是你的 select 语句很奇怪。如果你运行“select distinct('col_name') from my_table”你会得到什么?您需要立即执行。
-
我只需要从该特定列中获取所有唯一值。
标签: oracle stored-procedures plsql procedure cursors