标签: ora-01008

ORA-01008:并非所有变量都绑定.他们受约束

我遇到了一个Oracle问题,到目前为止我无法找到原因.下面的查询适用于Oracle SQL开发人员,但在.NET中运行时会抛出:

ORA-01008:并非所有变量都绑定

我试过了:

  • 更改lot_priority(Varchar2或int32)的Oracle数据类型.
  • 更改lot_priority(string或int)的.NET数据类型.
  • 一个绑定变量名称在查询中使用两次.这在我在其他查询中不是一个问题,它在多个位置使用相同的绑定变量,但只是为了确保我尝试使用另一个名称将第二个实例作为自己的变量并单独绑定它.
  • 几种不同的绑定变量的方法(参见注释代码;还有其他).
  • 移动bindByName()调用.
  • 用文字替换每个绑定变量.我有两个独立的变量导致问题(:lot_pri和:lot_priprc).在两者之间我记不起一些小的变化.更改为文字使查询起作用,但它们确实需要使用绑定.

查询和代码如下.变量名已被更改以保护无辜者:

SELECT rf.myrow floworder, rf.stage, rf.prss,
rf.pin instnum, rf.prid, r_history.rt, r_history.wt
FROM
(
    SELECT sub2.myrow, sub2.stage, sub2.prss, sub2.pin, sub2.prid
    FROM (
        SELECT sub.myrow, sub.stage, sub.prss, sub.pin,
            sub.prid, MAX(sub.target_rn) OVER (ORDER BY sub.myrow) target_row
            ,sub.hflag
        FROM (
            WITH floc AS 
            (
                SELECT flow.prss, flow.seq_num
                FROM rpf@mydblink flow
                WHERE flow.parent_p = :lapp
                AND flow.prss IN (
                    SELECT r_priprc.prss
                    FROM r_priprc@mydblink r_priprc
                    WHERE priprc = :lot_priprc
                )
                AND rownum = 1
            )
            SELECT …
Run Code Online (Sandbox Code Playgroud)

c# data-binding oracle oracle9i ora-01008

27
推荐指数
3
解决办法
11万
查看次数

"ORA-01008:并非所有变量都绑定"错误

我使用以下方法通过使用jdbc计算工资单,但"ORA-01008:并非所有变量绑定"错误都没有删除.

有什么好主意吗?

我正在使用以下代码

public double getPayroll(){
            ResultSet rs = null;
            ResultSet rs1 = null;
            ResultSet rs2 = null;

            Connection conn = null;
            PreparedStatement pstmt = null;
            try {
                    conn = getDBConnection();
                    double dailyPay=0,basicPay=0,payroll2=0;
                    int houseRent=0,convAllow=0,noOfPresents=0,empId=0;
                    String q = "select e_id from employee";
                    pstmt = conn.prepareStatement(q);
                    rs = pstmt.executeQuery();
                    while (rs.next()) {
                        empId=rs.getInt(1);
                        String q1 = "select count(att_status) from attendance where att_status='p'";
                        pstmt = conn.prepareStatement(q1);
                        rs1 = pstmt.executeQuery(q1);
                        while(rs1.next()){
                            noOfPresents=rs1.getInt(1);
                            String q2 = "select e_salary,e_house_rent,e_conv_allow from employee where e_id=?";
                            pstmt = …
Run Code Online (Sandbox Code Playgroud)

java oracle jdbc prepared-statement ora-01008

12
推荐指数
1
解决办法
4万
查看次数

ORA-01008绑定了所有变量

我正在使用System.Data.OracleClient它按名称进行参数绑定,并验证CommandText和Parameters是否同步:

    public string CommandText { get; set; }
    public IEnumerable<OracleParameter> Parameters { get; set; }

    private void VerifyThatAllParametersAreBound()
    {
        var variableNames = Regex.Matches(CommandText, ":\\w+")
            .Cast<Match>().Select(m => m.Value).ToArray();
        var parameteterNames = Parameters.Select(p => p.ParameterName).ToArray();

        var unboundVariables = variableNames.Except(parameteterNames).ToArray();
        if (unboundVariables.Length > 0)
        {
            throw new Exception("Variable in CommandText missing parameter: "
                + string.Join(", ", unboundVariables) + ".");
        }

        var unboundParameters = parameteterNames.Except(variableNames).ToArray();
        if (unboundParameters.Length > 0)
        {
            throw new Exception("Parameter that is not used in CommandText: "
                + string.Join(", …
Run Code Online (Sandbox Code Playgroud)

c# oracle oracleclient ora-01008

7
推荐指数
1
解决办法
2万
查看次数

通过CLOB参数将巨大的XML从C#/.Net传递到Oracle存储过程 - ORA-01008:并非所有变量都绑定

环境:

服务器: 64位Windows 2008上的Oracle 11.2g服务器

客户端: Windows XP SP3,ASP.Net 4.0,Visual Studio 2010,C#上的Oracle 11g客户端

输入大小为XML~ 1,206,500个字符(根据我将拥有的最大数据计算).

场景:

Web应用程序生成oracle存储过程用于更新数据库中的表的XML.由于XML大小非常大,因此选择的存储过程参数类型是CLOB而不是LONG,因为LONG具有32760个字符的限制.

问题:

使用CLOB作为参数类型会抛出错误"ORA-01008:并非所有变量绑定"对于相同的存储过程代码,该代码完全适用于参数类型LONG(和XML长度<32760)

用于调用存储过程的C#代码:

OracleCommand DbUpdateCommand = null;
OracleLob tempLOB = null;

DbUpdateCommand.CommandText = "declare xx clob; begin dbms_lob.createtemporary(xx, false, 0); :tempclob := xx; end;";
DbUpdateCommand.Parameters.Add(new OracleParameter("tempclob", OracleType.Clob)).Direction = ParameterDirection.Output;
DbUpdateCommand.ExecuteNonQuery();

//Assign the value to the LOB
tempLOB = (OracleLob)DbUpdateCommand.Parameters[0].Value;
tempLOB.BeginBatch(OracleLobOpenMode.ReadWrite);

//Convert the string to byte array to write to LOB
UnicodeEncoding encoding = new UnicodeEncoding();
byte[] renewalDetailXMLBytes = encoding.GetBytes(renewalDetailXML);
tempLOB.Write(renewalDetailXMLBytes, 0, renewalDetailXMLBytes.Length); …
Run Code Online (Sandbox Code Playgroud)

oracle ora-01008

6
推荐指数
1
解决办法
2万
查看次数