Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle PHP5 oci_execute():ORA-01008:并非所有变量都已绑定_Oracle_Oracle10g - Fatal编程技术网

Oracle PHP5 oci_execute():ORA-01008:并非所有变量都已绑定

Oracle PHP5 oci_execute():ORA-01008:并非所有变量都已绑定,oracle,oracle10g,Oracle,Oracle10g,我在尝试进行合并时遇到以下错误: PHP Warning: oci_execute(): ORA-01008: not all variables bound 我已经确保查询中的所有值都是使用oci_bind_by_name函数绑定的,并且数据是有效的 这是我的密码: //Sample values just to test $col1val = 'test1'; $col2val = 'test2'; $col3val = 'test3'; $col4val = 'test4';

我在尝试进行合并时遇到以下错误:

PHP Warning:  oci_execute(): ORA-01008: not all variables bound
我已经确保查询中的所有值都是使用oci_bind_by_name函数绑定的,并且数据是有效的

这是我的密码:

//Sample values just to test
$col1val = 'test1';
$col2val = 'test2';
$col3val = 'test3';
$col4val = 'test4';

        $sql = "merge into tablespace.tb1 c using (select :col1val from dual) cd
                on (c.col1 = cd.col1)
                when not matched then
                    insert (c.col2, c.col1, c.col3, c.col4) 
                    values (:col2val, :col1val, :col3val, :col4val)";



        oci_bind_by_name($stid, ":col1val", $col1val);
        oci_bind_by_name($stid, ":col2val", $col2val);  
        oci_bind_by_name($stid, ":col3val", $col3val);          
        oci_bind_by_name($stid, ":col4val", $col4val);

        $stid = oci_parse($conn, $sql);
        $result = oci_execute($stid);
                    oci_free_statement($stid);
我使用的是PHP5和Oracle10g


有什么想法吗?

我不知道oci_bind_by_name是如何工作的,但我知道oracle下的EXECUTE IMMEDIATE语句需要为您想要影响的值的每个实例使用一个bind变量,例如,如果您使用两次VAL1,您仍然必须使用两个bind变量:1和:2,您不能使用:1两次

因此,在您的示例中,由于:col1val使用了两次,因此我建议您尝试使用:col5val。另外,尝试按照脚本中变量的出现顺序进行绑定

这是我的贡献:-让我们保持联系


rgds.

我不知道oci_bind_by_name是如何工作的,但我知道oracle下的EXECUTE IMMEDIATE语句将需要一个bind变量,用于您想要影响的值的每个实例,例如,如果您使用两次VAL1,您仍然必须使用两个绑定变量:1和:2,您不能使用:1两次

因此,在您的示例中,由于:col1val使用了两次,因此我建议您尝试使用:col5val。另外,尝试按照脚本中变量的出现顺序进行绑定

这是我的贡献:-让我们保持联系


rgds.

问题在于,在oci\u解析之前,调用了oci\u bind\u by\u name。需要首先调用oci_parse。

问题是在oci_parse之前调用了oci_bind_by_name。需要首先调用oci_parse。

您的statemt错误,您需要cd中的值的别名

使用select:col1val col1 from dual cd合并到tablespace.tb1 c中 在c.col1=cd.col1上 当不匹配时 插入c.col2、c.col1、c.col3、c.col4
值:col2val,:col1val,:col3val,:col4val

您的状态错误,cd中的值需要别名

使用select:col1val col1 from dual cd合并到tablespace.tb1 c中 在c.col1=cd.col1上 当不匹配时 插入c.col2、c.col1、c.col3、c.col4
值:col2val,:col1val,:col3val,:col4val

您是否尝试过将出现的:col1val重命名为唯一的名称,并添加第5个绑定?天哪……我想我可能已经发现了明显的问题;在oci_解析之前,通过_名称调用oci_bind_。让我更新我的脚本并重新运行。+1-OP一直在寻找,显然解决了他们自己的问题。@BadProgrammer-记住堆栈溢出鼓励回答自己的问题-您是否尝试过将出现的:col1val重命名为唯一的名称,并添加第5个绑定?天哪……我想我可能已经发现了明显的问题;在oci_解析之前,通过_名称调用oci_bind_。让我更新我的脚本并重新运行。+1-OP一直在寻找,显然解决了他们自己的问题。@BadProgrammer-记住堆栈溢出鼓励回答自己的问题-