C#程序oracle数据库只能够 Insert into怎样得到返回该条纪录的主键的值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#程序oracle数据库只能够 Insert into怎样得到返回该条纪录的主键的值相关的知识,希望对你有一定的参考价值。

语法是这样,c#怎么调用不清楚

insert into t1 values(t1_seq.nextval,'four')
returning id into l_id;追问

谢谢啊,这个值我已经得到了,就是要在c#中得到他

参考技术A 返回该条纪录的主键的值
拿到它Id
你想拿什么!追问

var sid varchar2(10);
insert into ts_assay_data (assay_date,had ,fcad ) values('2008-5-5 00:00:00','1','5.55') RETURNING ID into :sid;
在oracle中运行这个sid就是返回插入的主键值,在c#程序中我怎么才能得到这个值。

在 C# 中清除 Oracle 高级队列

【中文标题】在 C# 中清除 Oracle 高级队列【英文标题】:Purging an Oracle Advanced Queue in C# 【发布时间】:2015-03-16 20:54:44 【问题描述】:

我正在开发一个使用 Oracle 高级队列来控制它的 Windows 服务。命令对象将被放置在队列中,服务会将其出列并尝试执行任务。为了控制服务,我还开发了一个小命令应用程序。此应用程序会将命令放入队列,但我也希望它能够在按下按钮时通过调用 dbms_aqadm.purge_queue_table 来清除队列。我试过这两种方法。首先我尝试了:

using (OracleConnection conn = new OracleConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))

    conn.Open();

    OracleCommand cmd = conn.CreateCommand();

    cmd.CommandType = CommandType.StoredProcedure;
    cmd.CommandText = "dbms_aqadm.purge_queue_table";

    cmd.Parameters.Add("queue_table", "PRISMPRO_Q_TAB");
    cmd.Parameters.Add("purge_condition", DBNull.Value);
    cmd.Parameters.Add("purge_options", DBNull.Value);

    cmd.ExecuteNonQuery();

    conn.Close();

我收到以下错误:

ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to 'PURGE_QUEUE_TABLE'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored

dbms_aqadm.purge_queue_table 有 3 个参数,我给它传递了 3 个参数。此外,它们是正确的类型。没有理由尽我所能说明为什么会发生此错误。我无法弄清楚如何让它消失,所以我尝试了以下方法:

using (OracleConnection conn = new OracleConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))

    conn.Open();

    OracleCommand cmd = conn.CreateCommand();

    cmd.CommandType = CommandType.Text;
    cmd.CommandText = "exec dbms_aqadm.purge_queue_table('PRISMPRO_Q_TAB', NULL, NULL)";

    cmd.ExecuteNonQuery();

    conn.Close();

并得到错误:

ORA-00900: invalid SQL statement

SQL 语句不是无效的。它在 SQL Developer 中运行良好。所以在任何一种情况下,我都会收到错误消息,除非我错过了我不应该得到的东西。我想不出办法解决这个问题。有人可以告诉我我做错了什么或如何解决这个问题吗?

【问题讨论】:

您使用的是哪个版本的 Oracle?根据SO - problems calling package with varchar2,Oracle 9.2.0.6.0 中存在导致间歇性 VARCHAR2 绑定错误的错误。 我们使用的是 12c 版本 【参考方案1】:

我打赌你只需要:

cmd.BindByName = true;

【讨论】:

很遗憾不是这样。当我最初编写这个应用程序时,我使用了 Oracle 的 ODP.net,它使用了位置绑定。但是,当我遇到这个问题时,我尝试使用 Microsoft 的 System.Data.OracleClient,但这也没有解决问题。 System.Data.OracleClient默认按名称绑定参数。

以上是关于C#程序oracle数据库只能够 Insert into怎样得到返回该条纪录的主键的值的主要内容,如果未能解决你的问题,请参考以下文章

我尝试用 c# (winforms) 在 oracle 数据库中写一些东西,我只能让 SELECT 语句工作,而不是 INSERT 语句

C#insert语句

数据库之Oracle

Python批量执行oracle中的insert语句

Oracle-触发器

oracle 导出超长Clob字段insert语句执行报字段过长的问题解决方案