【发布时间】:2018-10-30 20:46:18
【问题描述】:
我有一张下表:
CREATE TABLE jun_t AS
SELECT 1 seq, -2000 amt FROM dual
UNION ALL SELECT 2, 4000 FROM dual
UNION ALL SELECT 3, -5000 FROM dual
UNION ALL SELECT 4, -2000 FROM dual
UNION ALL SELECT 5, 3000 FROM dual
UNION ALL SELECT 6, 1500 FROM dual
UNION ALL SELECT 7, -250 FROM dual
UNION ALL SELECT 8, 320 FROM dual
UNION ALL SELECT 9, -4000 FROM dual
UNION ALL SELECT 10, 10000 FROM dual
UNION ALL SELECT 11, -20000 FROM dual;
而且我有事要做,所以我在下面创建并执行了一个 pl/sql 程序:
DECLARE
CURSOR csr is
select seq, amt
from jun_t;
rec csr%ROWTYPE;
total jun_t.amt%TYPE;
BEGIN
OPEN csr;
total := 0;
LOOP
FETCH csr into rec;
EXIT WHEN csr%NOTFOUND;
IF (rec.amt + total) > 0 THEN
total := rec.amt + total;
ELSE
total := 0;
END IF;
dbms_output.put_line(rec.seq || ',' || rec.amt || ',' || total);
END LOOP;
END;
结果是这样的:
1,-2000,0
2,4000,4000
3,-5000,0
4,-2000,0
5,3000,3000
6,1500,4500
7,-250,4250
8,320,4570
9,-4000,570
10,10000,10570
11,-20000,0
问题是这样的。我想在我的 c# 应用程序中使用这个结果集,但我找不到方法……我看到了一个使用 ref 游标的示例代码,但在这种情况下似乎不起作用。
我想用这段代码做一个存储过程。
请有人教我一个解决它的方法,或者告诉我我应该学习什么。
谢谢。
【问题讨论】:
-
您打算使用匿名块还是调用存储过程?
-
我打算使用存储过程。抱歉,我的问题缺乏细节。
-
在这种情况下,请注意 Oracle 允许您将表作为存储过程的参数(很像任何其他类型),并且您可以将参数定义为 INOUT。因此,您在调用程序中创建一个空表,将其传递给存储过程,然后将其返回到您的(调用)代码中,其中包含所有值。