Oracle 函数将行返回到 C#

一个红萝卜

我想在 oracle 中创建一个过程函数,它向我的应用程序返回多于一行的不同类型。我在互联网上找到了一些例子,但我无法让它工作......

示例:我在 oracle 中创建了一个自定义类型:

create type proc_selectall is object 
    (Mjera varchar2(50),
    Status number(10,0),
    Naziv varchar2(50),
    Stat number(10,0));

然后:

create type ret_selectall is table of proc_selectall;

然后创建函数:

create or replace function fsp_SelectAll return ret_selectall
is
l_ret_selectall ret_selectall := ret_selectall();
n integer := 0;
BEGIN 
    for r in(SELECT JEDINICAMJERE.Mjera,
    JEDINICAMJERE.Status, 
    KATEGORIJE.Naziv, 
    KATEGORIJE.Status as Stat
FROM JEDINICAMJERE, KATEGORIJE)
loop
  l_ret_selectall.extend;
  n := n + 1;
  l_ret_selectall(n) := proc_selectall(r.Mjera, r.Status, r.Naziv, r.Stat);
end loop;
return l_ret_selectall;
END;

当我输入这一行时:

select * from table (fsp_SelectAll)

我得到了一个不错的预期输出:

MJERA | STATUS | NAZIV | STAT
tr      0        name1   1
fd      1        name2   1
ds      1        name3   0
.....

后来我尝试在我的应用程序中获取这些值。我试过这样的事情:

//cmd.Parameters.Add("proc_selectall ", OracleDbType.Object);
//cmd.Parameters.Add("ret_selectall ", OracleDbType.Array);
//cmd.Parameters["ret_selectall "].Direction = ParameterDirection.ReturnValue;
//if (connection.State == ConnectionState.Closed)
//    connection.Open();
//cmd.ExecuteNonQuery();

后来这...

//OracleCommand objCmd = new OracleCommand("select * from table fsp_SelectAll", connection);
//objCmd.CommandType = CommandType.StoredProcedure;
//objCmd.ExecuteNonQuery();
//int size=objCmd.ExecuteReader().FieldCount;

我也试过

//adapter = new OracleDataAdapter(cmd);...

但是总是有一些关于类型、参数的错误......(连接到oracle工作。我执行了插入、更新、删除过程,它们工作正常)

我也尝试创建这个程序:(这是我的第一次尝试)

CREATE OR REPLACE PROCEDURE osp_SelectAll (Mjera OUT VARCHAR2,
Status OUT NUMBER, Naziv OUT VARCHAR2,Stat OUT NUMBER) AS 
BEGIN 
    SELECT JEDINICAMJERE.Mjera,
    JEDINICAMJERE.Status, 
    KATEGORIJE.Naziv, 
    KATEGORIJE.Status as Stat INTO Mjera, Status, Naziv, Stat
FROM JEDINICAMJERE, KATEGORIJE;
END osp_SelectAll;

但它不返回任何行或行......我放弃了。

请帮助我,我需要解决这个问题。

沃恩弗里德·多姆沙伊特

返回用户定义的对象并不容易,它需要很多额外的努力。

试试这个:

create or replace function fsp_SelectAll return SYS_REFCURSOR is
   res SYS_REFCURSOR;
BEGIN 
    OPEN res FOR
    SELECT JEDINICAMJERE.Mjera,
      JEDINICAMJERE.Status, 
      KATEGORIJE.Naziv, 
      KATEGORIJE.Status as Stat
    FROM JEDINICAMJERE, KATEGORIJE;
    return res;
END;

然后

OracleCommand objCmd = new OracleCommand("fsp_SelectAll", connection);
objCmd.CommandType = CommandType.StoredProcedure;
objCmd.Parameters.Add("res", OracleDbType.RefCursor, ParameterDirection.ReturnValue);

var da = new OracleDataAdapter(objCmd);
var dt = new DataTable();
da.Fill(dt);

或者ExecuteReader(),如果您愿意,也可以使用

OracleDataReader dr = objCmd.ExecuteReader();
while ( dr.Read() ) {
   ...
}
dr.Close();

请注意,我从未与.CommandType = CommandType.StoredProcedure;. 如果失败,请使用以下语法:

OracleCommand objCmd = new OracleCommand("BEGIN :res := fsp_SelectAll; END;", connection);
objCmd.CommandType = CommandType.Text;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将记录表从Oracle函数返回到C#应用程序

来自分类Dev

将XML从Oracle Procedure返回到C#Restful服务

来自分类Dev

将数组地址从函数返回到指针(C ++)

来自分类Dev

OpenVMS(VAX)Fortran函数将字符*(*)返回到C

来自分类Dev

将char数组从C ++函数返回到tcl

来自分类Dev

C:如何将多个值从函数返回到main

来自分类Dev

将数组地址从函数返回到指针(C ++)

来自分类Dev

C语言如何将指针从函数返回到指针

来自分类Dev

如何将返回指针从C ++ dll函数返回到C#

来自分类Dev

如何从C的PyObject类型的函数将值从C返回到python?

来自分类Dev

从C#调用C dll中的函数,该函数将某种类型的指针返回到函数指针

来自分类Dev

导出托管的C#函数以将更改的char *参数返回到非托管代码

来自分类Dev

将Javascript变量传递给C#函数aspx并从其返回到aspx页面

来自分类Dev

将int array []或指向int array []的指针返回到C中的调用例程的函数

来自分类Dev

使用指针将字符和浮点值从 scanf 返回到主函数 C

来自分类Dev

从Oracle 12c函数返回多个值

来自分类Dev

在C#上返回函数oracle的数据

来自分类Dev

C#-Oracle存储过程返回没有行的RefCursor

来自分类Dev

C ++将VS连接到Oracle

来自分类Dev

如何使用inline-c来包装将指针返回到自定义结构类型的函数?

来自分类Dev

如何将类从C ++代码返回到C#

来自分类Dev

将结构数组从c返回到c#

来自分类Dev

将int数组从C ++ .dll返回到C#

来自分类Dev

MEX:如何将矩阵从C ++ / C返回到MATLAB

来自分类Dev

c ++函数,可将数据返回到参考向量

来自分类Dev

将“预期的” Oracle异常返回到Java Groovy / Grails的最佳方法

来自分类Dev

尝试将ORACLE光标输出返回到变量时出现错误

来自分类Dev

如何将Oracle存储过程的结果返回到Shell脚本

来自分类Dev

将多个字段返回到Oracle SQL Developer中的单个用逗号分隔的字段

Related 相关文章

  1. 1

    将记录表从Oracle函数返回到C#应用程序

  2. 2

    将XML从Oracle Procedure返回到C#Restful服务

  3. 3

    将数组地址从函数返回到指针(C ++)

  4. 4

    OpenVMS(VAX)Fortran函数将字符*(*)返回到C

  5. 5

    将char数组从C ++函数返回到tcl

  6. 6

    C:如何将多个值从函数返回到main

  7. 7

    将数组地址从函数返回到指针(C ++)

  8. 8

    C语言如何将指针从函数返回到指针

  9. 9

    如何将返回指针从C ++ dll函数返回到C#

  10. 10

    如何从C的PyObject类型的函数将值从C返回到python?

  11. 11

    从C#调用C dll中的函数,该函数将某种类型的指针返回到函数指针

  12. 12

    导出托管的C#函数以将更改的char *参数返回到非托管代码

  13. 13

    将Javascript变量传递给C#函数aspx并从其返回到aspx页面

  14. 14

    将int array []或指向int array []的指针返回到C中的调用例程的函数

  15. 15

    使用指针将字符和浮点值从 scanf 返回到主函数 C

  16. 16

    从Oracle 12c函数返回多个值

  17. 17

    在C#上返回函数oracle的数据

  18. 18

    C#-Oracle存储过程返回没有行的RefCursor

  19. 19

    C ++将VS连接到Oracle

  20. 20

    如何使用inline-c来包装将指针返回到自定义结构类型的函数?

  21. 21

    如何将类从C ++代码返回到C#

  22. 22

    将结构数组从c返回到c#

  23. 23

    将int数组从C ++ .dll返回到C#

  24. 24

    MEX:如何将矩阵从C ++ / C返回到MATLAB

  25. 25

    c ++函数,可将数据返回到参考向量

  26. 26

    将“预期的” Oracle异常返回到Java Groovy / Grails的最佳方法

  27. 27

    尝试将ORACLE光标输出返回到变量时出现错误

  28. 28

    如何将Oracle存储过程的结果返回到Shell脚本

  29. 29

    将多个字段返回到Oracle SQL Developer中的单个用逗号分隔的字段

热门标签

归档