【发布时间】:2013-12-23 15:50:29
【问题描述】:
从包含 rfid 字符串(随机 varchar 字符串)的表中,我必须选择一个尚未在另一个表中使用的免费 rfid 字符串,为此我使用以下 sql 语句:
select * from (
select rfid
from rfid_col
where rfid not in (select rfid from person)
)where rownum<=1;
sql 本身可以正常工作,但我需要将其放入存储过程中
create or replace
procedure getFreeRfid(rfidout out varchar2) is
begin
select * into rfidout
from (select rfid from rfid_col where rfid not in (select rfid from person)
)where rownum<=1;
end getFreeRfid;
此代码在 oracle sql developer 中运行良好
要在 C# 中使用 oracle 数据检索它,我使用以下代码
OracleCommand rfidcommand = db.connection.CreateCommand();
rfidcommand.CommandType = System.Data.CommandType.StoredProcedure;
rfidcommand.CommandText = "getFreeRfid";
rfidcommand.Parameters.Add(new OracleParameter("rfidout", OracleDbType.Varchar2)).Direction = System.Data.ParameterDirection.Output;
rfidcommand.ExecuteNonQuery();
string rfid = rfidcommand.Parameters["rfidout"].Value.ToString();
但是这会以某种方式抛出:
A first chance exception of type 'Oracle.DataAccess.Client.OracleException' occurred in Oracle.DataAccess.dll
ORA-06502: PL/SQL: numeric or value error
ORA-06512: at "TIM.GETFREERFID", line 3
ORA-06512: at line 1
我已经为这个问题苦苦挣扎了很长一段时间,这是我最后的解决方案
【问题讨论】:
-
rfid的类型是什么? -
根据sql developer varchar2(10byte)
-
我们可以看到这两个表的定义吗?
-
我什至没有将它插入到第二个表中,但首先我必须将它检索到我的程序中
-
创建表 RFID_col (RFID varchar(10) PRIMARY KEY NOT NULL);