存储过程有测试通过吗?
如果存储过程测试通过了应该是你的SQL这句里有问题
$sql="call insert_update('".$path1."','".$path2."','".$path3."','".$path4."','".$path5."','".$path6."','".$path7."','".$path8."','".$path9."','".$path10."','".$path11."','".$path12."','".$path13."','".$path14."','".$path15."','".$path16."','".$path17."','".$path18."','".$path19."','".$path20."','".$path21."','".$path22."','".$path23."','".$path24."','".$path25."','".$path26."','".$path27."','".$path28."','".$path29."','".$path30."','".$path31."','".$path32."')";
具体没有细看。

解决方案 »

  1.   

    把sql打印出来 在oracle里运行一下 看报错不 
      

  2.   

    顶2楼
    把sql打印出来 在oracle里运行一下
      

  3.   


    这个过程是怎么一回事?
    如何打印sql 如何在oracle中 运行呢?
    是不是我只运行 update 和 insert 这两个语句呢?
      

  4.   

    楼主你的存储过程在Oracle里不能像调用MySQL存储过程一样。
    $gConn=ocilogon("test","test");$stmt = OCIParse($gConn,"BEGIN 存储过程(:参数);END;");
    OCIBindByName($stmt,":参数",$变量,32);
    OCIExecute($stmt);OCIFreeStatement($stmt);
    OCILogoff($gConn); 
      

  5.   

    请问 在存储过程中的参数个数 是不是 需要跟OCIBindByName所绑定的变量的个数要一样呢?
    我是在我的存储过程中 存在如下四个参数:创建人 创建日期 修改人 修改日期
    创建人 和 修改人 用系统当前登陆者的信息
    创建日期和修改日期用的是当前系统时间
    如果是增加记录的话 创建人 被赋值 修改人此时为空  此时CREATETIME=sysdate 
    如果是修改记录信息的话 是 创建人信息不变 只是对修改人部分进行更新 MODIFYTIME=sysdate (此时为Oracle取时间函数,自动赋值)
    但是 我这上面的调用参数中 我没有 创建日期和修改日期 
    并且我只传递了一个“创建人或是修改人信息” 请问 我该如何去操作呢?
    因为按照楼上的进行修改后
    报错为:Warning: ociexecute(): OCIStmtExecute: ORA-01008: 并非所有变量都已关联 in d:\myweb\a\cost\include\compute.php on line 286
      

  6.   

    下面这段代码是我调用insert_update存储过程部分
    $path*  是 绑定的变量
    该存储过程中使用了35个变量
    详细存储过程见顶楼中SQL部分代码仍出现如下错误情况,望高手多加指教:
    ociexecute(): OCIStmtExecute: ORA-01008: 并非所有变量都已关联 in d:\myweb\a\cost\include\compute.php on line 
    session_start();
    if($_POST['Submit']==true){  for($i=1;$i<=$_POST["jilushu"];$i++){
      //设定绑定,以下用于绑定的PHP变量
          $path1=$_POST['upcode'.$i];//属装图号
      $path2=$_POST['upname'.$i];//属装图名
      $path3=$_POST['ditem'.$i]; //键号
      $path4=$_POST['dcode'.$i];//图号
      $path5=$_POST['dname'.$i]; //图名
      $path6=$_POST['dmaterial'.$i]; //材料
      $path7=$_POST['dweight'.$i]; //单重
          
      
      $path8=$_POST['sjyl'.$i];    // 设计用量-----》总重  DTWEIGHT $path7=$_POST['dtweight'.$i]; //总重
      $path9=$_POST['dquantity'.$i]; //数量
      $path10=$_POST['dre'.$i]; //备注
      $path11=$_POST['dother1'.$i]; //工艺分工
               $path12=$_POST['dproductdwg'.$i];  //所属产品
      
      $path13=$_POST['G1'.$i];
      $path14=$_POST['G2'.$i];
      $path15=$_POST['G3'.$i];
      $path16=$_POST['G4'.$i];
      $path17=$_POST['G5'.$i];
      $path18=$_POST['G6'.$i];
      $path19=$_POST['G7'.$i];
      $path20=$_POST['G8'.$i];
      $path21=$_POST['G9'.$i];
      
      $path22=$_POST['xialiao'.$i]; //下料尺寸
      $path23=$_POST['dinge'.$i]; //定额
               $path24=$_POST['lldw'.$i];//领料单位
      $path25=$_POST['d'.$i];//自制/外购/标准件
      
      $path26=$_POST['invcost'.$i];//计划价
      
      $path27=$_POST['dxcb'.$i];//单向成本-----》其实 就是 计划总价 TINVCOST 
      $path28=$_POST['cinvcode'.$i];//新物料码
      $path29=$_POST['dinvunit'.$i]; //计量单位
      $path30=$_POST['yongyou'.$i];//用友码
           
      $path31=$_POST['changerate'.$i];//转换率
      
               $path32 = $_SESSION['pdmuser']; //创建人,$_SESSION['pdmuser']是系统当前登陆人员信息
      $path33 = '';                 //创建日期
      $path34 = $_SESSION['pdmuser']; //修改人
      $path35 = '';                   //修改日期

     
      $sql = "BEGIN insert_update(:path1,:path2,:path3,:path4,:path5,:path6,:path7,:path8,:path9,:path10,:path11,:path1,:path12,:path13,:path14,:path15,:path16,:path17,:path18,:path19,:path20,:path21:path1,:path22,:path23,:path24,:path25,:path26,:path27,:path28,:path29,:path30,:path31,:path32,:path33,:path34,:path35);END;";
          $stmt = ociparse($conn,$sql);
      //执行绑定
      OCIBindByName($stmt,":path1",$path1);
      OCIBindByName($stmt,":path2",$path2);
      OCIBindByName($stmt,":path3",$path3);
      OCIBindByName($stmt,":path4",$path4);
      OCIBindByName($stmt,":path5",$path5);
      OCIBindByName($stmt,":path6",$path6);
      OCIBindByName($stmt,":path7",$path7);
      OCIBindByName($stmt,":path8",$path8);
      OCIBindByName($stmt,":path9",$path9);
      OCIBindByName($stmt,":path10",$path10);
      OCIBindByName($stmt,":path11",$path11);
      OCIBindByName($stmt,":path12",$path12);
      OCIBindByName($stmt,":path13",$path13);
      OCIBindByName($stmt,":path14",$path14);
      OCIBindByName($stmt,":path15",$path15);
      OCIBindByName($stmt,":path16",$path16);
      OCIBindByName($stmt,":path17",$path17);
      OCIBindByName($stmt,":path18",$path18);
      OCIBindByName($stmt,":path19",$path19);
      OCIBindByName($stmt,":path20",$path20);
      OCIBindByName($stmt,":path21",$path21);
      OCIBindByName($stmt,":path22",$path22);
      OCIBindByName($stmt,":path23",$path23);
      OCIBindByName($stmt,":path24",$path24);
      OCIBindByName($stmt,":path25",$path25);
      OCIBindByName($stmt,":path26",$path26);
      OCIBindByName($stmt,":path27",$path27);
      OCIBindByName($stmt,":path28",$path28);
      OCIBindByName($stmt,":path29",$path29);
      OCIBindByName($stmt,":path30",$path30);
      OCIBindByName($stmt,":path32",$path32);
      OCIBindByName($stmt,":path32",$path33); 
      OCIBindByName($stmt,":path32",$path34); 
      OCIBindByName($stmt,":path32",$path35);
     
      if(ociexecute($stmt)){ 这里面就是报错所在行  
         echo "<script>alert('操作成功!');</script>";
      }else{
         echo "<script>alert('操作失败!');</script>";
      } 
      OCIFreeStatement($stmt);
      }
    }
      

  7.   

    最后的:path32帮定了四遍,而:path33、:path34、:path35都没有帮定值。
      

  8.   

    现在我遇到了这么一个情况
    我再plSQL中 用xtdetail用户进行登陆的时候 是可以进行登陆的
    但是 当我在oracle9i直接登陆数据库的时候 用xtdetail用户进行登录的时候 说我的权限不够
    请问这是一种什么情况?
      

  9.   

    现在本人的程序 出现了 如下错误:
    Warning: ociexecute(): OCIStmtExecute: ORA-06502: PL/SQL: 数字或值错误 : 字符到数值的转换错误 ORA-06512: 在line 1 in d:\myweb\a\cost\include\compute.php on line请问这种情况是怎么回事 
    网上也没有给出很好的解决方法
    希望有此经历的人 能告知本人
    不胜感谢