Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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
Php 如何通过PL/SQL将结构传递给oracle过程-绑定问题_Php_Arrays_Oracle_Plsql_Procedure - Fatal编程技术网

Php 如何通过PL/SQL将结构传递给oracle过程-绑定问题

Php 如何通过PL/SQL将结构传递给oracle过程-绑定问题,php,arrays,oracle,plsql,procedure,Php,Arrays,Oracle,Plsql,Procedure,我正在尝试通过PL/SQL将日志发送到远程oracle数据库。它被发送到程序记录\u MANAGEMENT.ADD\u to(@文章底部)。这个过程有点像一个入口点 挑战存在于过程期望的4种对象类型中 我试过两件事: 尝试隐式调用-此处不会绑定数组 原始方法-语法错误 更新#1 3.类似于第二种方式;这将在原始PL中以字符串形式插入变量 //for all 4 object types it reports this err oci_execute(): ORA-06550: line 2, c

我正在尝试通过PL/SQL将日志发送到远程oracle数据库。它被发送到程序记录\u MANAGEMENT.ADD\u to(@文章底部)。这个过程有点像一个入口点

挑战存在于过程期望的4种对象类型中

我试过两件事:

  • 尝试隐式调用-此处不会绑定数组
  • 原始方法-语法错误
  • 更新#1 3.类似于第二种方式;这将在原始PL中以字符串形式插入变量

    //for all 4 object types it reports this err
    oci_execute(): ORA-06550: line 2, column 11:
    PLS-00201: identifier 'PROJ_DB.EMPLOYEE_TYPE' must be declared
    ORA-06550: line 2, column 11:
    
    //on three occasions this is also stated
    PL/SQL: Item ignored
    ORA-06550: line 19, column 3:
    PLS-00320: the declaration of the type of this expression is incomplete or malformed
    
    
    如果有人有任何建议,那将非常有帮助!最近刚开始“Oragling”

    第一次尝试的例子

        $var1 = ["1111", null, null, null, null, null, null, null, null, null, null, null];
        $var2 = 'String 1';
        $var3 = ["String 2", null, null, null, null, null, null, null, null, null];
        $var4 = '2020-06-03 07:00:00';
        $var5 = ["String 3",null,null];
        $var6 = ["String 4",null];
        $var7 = '222222';
        $var8 = NULL;
        $var9 = NULL;
        $var10= 'String 5';
        $var11= '333333';
        $var12= '444444';
        $var13= '555555';
        $var14= '666666';
        $var15= NULL;
    
        $stmt = oci_parse($conn, "BEGIN PROJ_DB.RECORD_MANAGEMENT.ADD_INTO(:val1, :val2, :val3, :val4, :val5, :val6, :val7, :val8, :val9, :val10, :val11, :val12, :val13, :val14, :val15); END;");
    
        oci_bind_array_by_name($stmt,':var1',$var1,count($var1),-1);
        oci_bind_by_name($stmt,':var2', $var2);
        oci_bind_array_by_name($stmt,':var3', $var3,count($var3),-1);
        oci_bind_by_name($stmt,':var4', $var4);
        oci_bind_array_by_name($stmt,':var5', $var5,count($var5),-1);
        oci_bind_array_by_name($stmt,':var6', $var6,count($var6),-1);
        oci_bind_by_name($stmt,':var7', $var7);
        oci_bind_by_name($stmt,':var8', $var8);
        oci_bind_by_name($stmt,':var9', $var9);
        oci_bind_by_name($stmt,':var10', $var10);
        oci_bind_by_name($stmt,':var11', $var11);
        oci_bind_by_name($stmt,':var12', $var12);
        oci_bind_by_name($stmt,':var13', $var13);
        oci_bind_by_name($stmt,':var14', $var14);
        oci_bind_by_name($stmt,':var15', $var15);
    
        oci_execute($stmt); 
    
    第二次尝试的示例(尝试了不同的语法A:A:=A)

    在第三次尝试的示例中,变量作为字符串插入到pl中,从而避免了绑定

    //$var1-3-5-6 is not anymore array
            VAR_A := PROJ_DB.EMPLOYEE_TYPE($var1, null, null, null, null, null, null, null, null, null, null, null); 
            VAR_B :='".$var2."'; 
            VAR_C := PROJ_DB.PROJECT_TYPE($var3, null, null, null, null, null, null, null, null, null);
            VAR_D := to_date('".$var4."', 'dd.mm.yyyy hh24:mi:ss'); 
            VAR_E := PROJ_DB.SYSTEM_TYPE($var5, null, null); 
            VAR_F := PROJ_DB.ACTION_TYPE('".$var6."', null);
            VAR_G :=$var7; 
            VAR_H :=NULL; 
            VAR_I :=NULL; 
            VAR_J :='".$var10."'; 
            VAR_K :=$var11; 
            VAR_L :=$var12; 
            VAR_M :=$var13; 
            VAR_N :=$var14; 
            VAR_O := NULL; 
    
    
    程序的一个条目示例(第二次尝试基于此示例)


    不要试图传入对象类型。相反,传递用于初始化对象类型的值。您可以
    首先在中间变量中声明
    项,也可以直接将它们初始化到过程的参数中,而不使用中间变量:

    开始
    记录\u管理。将\u添加到(
    变量A=>PROJ\u DB.EMPLOYEE\u类型(
    :var_a,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null
    ),
    VAR_B=>:VAR_B,
    VAR_C=>PROJ_DB.PROJECT_类型(
    :var_c,null,null,null,null,null,null,null,null,null,null,null
    ),
    VAR_D=>截止日期(:VAR_D,'dd.mm.yyyyyh24:mi:ss'),
    VAR_E=>项目数据库系统类型(:VAR_E,null,null),
    VAR\u F=>项目数据库操作类型(:VAR\u F,null),
    VAR\u G=>:VAR\u G,
    VAR_H=>:VAR_H,
    变量I=>:变量I,
    VAR_J=>:VAR_,
    VAR_K=>:VAR_K,
    VAR_L=>:VAR_L,
    VAR_M=>:VAR_M,
    变量N=>:变量N,
    VAR\u O=>:VAR\u O
    );
    犯罪
    结束;
    
    不要试图传入对象类型。相反,传递用于初始化对象类型的值。您可以
    首先在中间变量中声明
    项,也可以直接将它们初始化到过程的参数中,而不使用中间变量:

    开始
    记录\u管理。将\u添加到(
    变量A=>PROJ\u DB.EMPLOYEE\u类型(
    :var_a,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null
    ),
    VAR_B=>:VAR_B,
    VAR_C=>PROJ_DB.PROJECT_类型(
    :var_c,null,null,null,null,null,null,null,null,null,null,null
    ),
    VAR_D=>截止日期(:VAR_D,'dd.mm.yyyyyh24:mi:ss'),
    VAR_E=>项目数据库系统类型(:VAR_E,null,null),
    VAR\u F=>项目数据库操作类型(:VAR\u F,null),
    VAR\u G=>:VAR\u G,
    VAR_H=>:VAR_H,
    变量I=>:变量I,
    VAR_J=>:VAR_,
    VAR_K=>:VAR_K,
    VAR_L=>:VAR_L,
    VAR_M=>:VAR_M,
    变量N=>:变量N,
    VAR\u O=>:VAR\u O
    );
    犯罪
    结束;
    
    我们需要知道PL/SQL过程和类型定义。PHPOci8不支持许多PL/SQL对象类型,因此您可能需要使用从PHP调用的某种“包装器”PL/SQL块,然后调用当前的PL/SQL过程。检查和。在我成功地将值绑定到过程参数并调用oci_execute($stmt)后,我在所有4种对象类型上都出现了错误。显示此错误:ORA-06550-PL/SQL:语句被忽略。简言之,我无法看到我的用户对象类型,所以由于访问受限,过程无法找到它们。在给管理员发电子邮件后,我获得了访问权限,现在一切都顺利运行!我们需要知道PL/SQL过程和类型定义。PHPOci8不支持许多PL/SQL对象类型,因此您可能需要使用从PHP调用的某种“包装器”PL/SQL块,然后调用当前的PL/SQL过程。检查和。在我成功地将值绑定到过程参数并调用oci_execute($stmt)后,我在所有4种对象类型上都出现了错误。显示此错误:ORA-06550-PL/SQL:语句被忽略。简言之,我无法看到我的用户对象类型,所以由于访问受限,过程无法找到它们。在给管理员发电子邮件后,我获得了访问权限,现在一切都顺利运行!通过这种方式实现,绑定就像一种魅力。谢谢通过这种方式实现,绑定就像一种魅力。谢谢
        $var1 = ["1111", null, null, null, null, null, null, null, null, null, null, null];
        $var2 = 'String 1';
        $var3 = ["String 2", null, null, null, null, null, null, null, null, null];
        $var4 = '2020-06-03 07:00:00';
        $var5 = ["String 3",null,null];
        $var6 = ["String 4",null];
        $var7 = '222222';
        $var8 = NULL;
        $var9 = NULL;
        $var10= 'String 5';
        $var11= '333333';
        $var12= '444444';
        $var13= '555555';
        $var14= '666666';
        $var15= NULL;
    
        $stmt = oci_parse($conn, "BEGIN PROJ_DB.RECORD_MANAGEMENT.ADD_INTO(:val1, :val2, :val3, :val4, :val5, :val6, :val7, :val8, :val9, :val10, :val11, :val12, :val13, :val14, :val15); END;");
    
        oci_bind_array_by_name($stmt,':var1',$var1,count($var1),-1);
        oci_bind_by_name($stmt,':var2', $var2);
        oci_bind_array_by_name($stmt,':var3', $var3,count($var3),-1);
        oci_bind_by_name($stmt,':var4', $var4);
        oci_bind_array_by_name($stmt,':var5', $var5,count($var5),-1);
        oci_bind_array_by_name($stmt,':var6', $var6,count($var6),-1);
        oci_bind_by_name($stmt,':var7', $var7);
        oci_bind_by_name($stmt,':var8', $var8);
        oci_bind_by_name($stmt,':var9', $var9);
        oci_bind_by_name($stmt,':var10', $var10);
        oci_bind_by_name($stmt,':var11', $var11);
        oci_bind_by_name($stmt,':var12', $var12);
        oci_bind_by_name($stmt,':var13', $var13);
        oci_bind_by_name($stmt,':var14', $var14);
        oci_bind_by_name($stmt,':var15', $var15);
    
        oci_execute($stmt); 
    
    $proc="
    DECLARE
      VAR_A PROJ_DB.EMPLOYEE_TYPE;
      VAR_B VARCHAR2(200);
      VAR_C PROJ_DB.PROJECT_TYPE;
      VAR_D DATE;
      VAR_E PROJ_DB.SYSTEM_TYPE;
      VAR_F PROJ_DB.ACTION_TYPE;
      VAR_G NUMBER;
      VAR_H VARCHAR2(200);
      VAR_I VARCHAR2(200);
      VAR_J CLOB;
      VAR_K NUMBER;
      VAR_L NUMBER;
      VAR_M NUMBER;
      VAR_N NUMBER;
      VAR_O VARCHAR2(200);
    BEGIN
      VAR_A var1;
      VAR_B var2;
      VAR_C var3;
      VAR_D var4;
      VAR_E var5;
      VAR_F var6;
      VAR_G var7;
      VAR_H var8;
      VAR_I var9;
      VAR_J var10;
      VAR_K var11;
      VAR_L var12;
      VAR_M var13;
      VAR_N var14;
      VAR_O var15;
    
      RECORD_MANAGEMENT.ADD_INTO(
        VAR_A => VAR_A,
        VAR_B => VAR_B,
        VAR_C => VAR_C,
        VAR_D => VAR_D,
        VAR_E => VAR_E,
        VAR_F => VAR_F,
        VAR_G => VAR_G,
        VAR_H => VAR_H,
        VAR_I => VAR_I,
        VAR_J => VAR_J,
        VAR_K => VAR_K,
        VAR_L => VAR_L,
        VAR_M => VAR_M,
        VAR_N => VAR_N,
        VAR_O => VAR_O
      );
      COMMIT;
    END;
    ";
    //variables same as in first example
    $stmt = oci_parse($conn, $proc);
    //binding also same
    oci_execute($stmt); 
    
    
    //$var1-3-5-6 is not anymore array
            VAR_A := PROJ_DB.EMPLOYEE_TYPE($var1, null, null, null, null, null, null, null, null, null, null, null); 
            VAR_B :='".$var2."'; 
            VAR_C := PROJ_DB.PROJECT_TYPE($var3, null, null, null, null, null, null, null, null, null);
            VAR_D := to_date('".$var4."', 'dd.mm.yyyy hh24:mi:ss'); 
            VAR_E := PROJ_DB.SYSTEM_TYPE($var5, null, null); 
            VAR_F := PROJ_DB.ACTION_TYPE('".$var6."', null);
            VAR_G :=$var7; 
            VAR_H :=NULL; 
            VAR_I :=NULL; 
            VAR_J :='".$var10."'; 
            VAR_K :=$var11; 
            VAR_L :=$var12; 
            VAR_M :=$var13; 
            VAR_N :=$var14; 
            VAR_O := NULL; 
    
    
    DECLARE
      VAR_A PROJ_DB.EMPLOYEE_TYPE;
      VAR_B VARCHAR2(200);
      VAR_C PROJ_DB.PROJECT_TYPE;
      VAR_D DATE;
      VAR_E PROJ_DB.SYSTEM_TYPE;
      VAR_F PROJ_DB.ACTION_TYPE;
      VAR_G NUMBER;
      VAR_H VARCHAR2(200);
      VAR_I VARCHAR2(200);
      VAR_J CLOB;
      VAR_K NUMBER;
      VAR_L NUMBER;
      VAR_M NUMBER;
      VAR_N NUMBER;
      VAR_O VARCHAR2(200);
    BEGIN
      VAR_A := PROJ_DB.EMPLOYEE_TYPE(11111, null, null, null, null, null, null, null, null, null, null, null);
      VAR_B := 'String 1';
      VAR_C := PROJ_DB.PROJECT_TYPE('String 2', null, null, null, null, null, null, null, null, null);
      VAR_D := to_date('24.02.2020 08:00:00', 'dd.mm.yyyy hh24:mi:ss');
      VAR_E := PROJ_DB.SYSTEM_TYPE('String 3', null, null);
      VAR_F := PROJ_DB.ACTION_TYPE('String 4', null);
      VAR_G := 2222222;
      VAR_H := NULL;
      VAR_I := NULL;
      VAR_J := 'String 5';
      VAR_K := 3333333;
      VAR_L := 4444444;
      VAR_M := 5555555;
      VAR_N := 6666666;
      VAR_O := NULL;
    
      RECORD_MANAGEMENT.ADD_INTO(
        VAR_A => VAR_A,
        VAR_B => VAR_B,
        VAR_C => VAR_C,
        VAR_D => VAR_D,
        VAR_E => VAR_E,
        VAR_F => VAR_F,
        VAR_G => VAR_G,
        VAR_H => VAR_H,
        VAR_I => VAR_I,
        VAR_J => VAR_J,
        VAR_K => VAR_K,
        VAR_L => VAR_L,
        VAR_M => VAR_M,
        VAR_N => VAR_N,
        VAR_O => VAR_O
      );
      COMMIT;
    END;