简体   繁体   中英

How to resolve ORA-01036

I am creating a online system using PHP and Oracle OCI8.

Anyone here have encountered the error:

Warning: oci_bind_by_name() [function.oci-bind-by-name]: Error while trying to retrieve text for error ORA-01036 in dbcontrol.php on line 50
Success 

Here is my dbcontrol.php:

function plsql_insert($plsql, $array){
        $this -> connect(); //Create Database Connection
        $this -> statement = oci_parse($this -> conn, $plsql); //Prepare the statement to call PL/SQL stored procedure

        foreach ($array as $key => $value){
            oci_bind_by_name($this -> statement, $key, $array[$key]);
        }

        $this -> execute = oci_execute($this -> statement); //Execute the statement
        $this -> result = ($this -> execute) ? "Success" : "Failed";
        return $this->result;
    }

Here is my code that calls for that function:

include "../dbaseconn/dbcontrol.php";

extract($_GET);

$personalBackground = explode(",",$personalBackground);

$arrPersonal = array();

foreach($personalBackground as $val)
{
    $tmpData = explode("*",$val);
    $arrPersonal[$tmpData[0]]=$tmpData[1];
}
$arrPersonal[':REC_NO'] = '4';
$plsql = "call TEST.INSERT_BACK_PERSONAL(:NAME_LAST,:NAME_FIRST,:NAME_MIDDLE,:PRESENT_ADDRESS,:MOBILE_PHONE,:PERMANENT_ADDRESS,:HOME_NUMBER,:DATE_OF_BIRTH,:BIRTH_PLACE,:CIVIL_STATUS,:SSS_NO,:TIN,:PHILHEALTH_NO,:HDMF_NO,:BLOOD_TYPE,:GENDER,:GOV_LICENSE,:EMAIL_ADDRESS,:REC_NO)";
$dbcontrol = new DbControl;
echo $dbcontrol->plsql_insert($plsql,$arrPersonal);

And my PL/SQL Block:

CREATE OR REPLACE PACKAGE BODY RECRUIT.TEST AS                        


 PROCEDURE INSERT_BACK_PERSONAL( v_NAME_LAST IN VARCHAR2,
                  v_NAME_FIRST IN VARCHAR2,
                  v_NAME_MIDDLE IN VARCHAR2,
                  v_PRESENT_ADDRESS IN VARCHAR2,
                  v_MOBILE_PHONE IN VARCHAR2,
                  v_PERMANENT_ADDRESS IN VARCHAR2,
                  v_HOME_NUMBER IN VARCHAR2,
                  v_DATE_OF_BIRTH IN CHAR,
                  v_BIRTH_PLACE IN CHAR,
                  v_CIVIL_STATUS IN CHAR,
                  v_SSS_NO IN VARCHAR2,
                  v_TIN IN VARCHAR2,
                  v_PHILHEALTH IN VARCHAR2,
                  v_HDMF_NO IN VARCHAR2,
                  v_BLOOD_TYPE IN VARCHAR2,
                  v_GENDER IN CHAR,
                  v_GOV_LICENSE IN VARCHAR2,
                  v_EMAIL_ADDRESS IN VARCHAR2,
                  v_REC_NO IN VARCHAR2
                  )

                  --out_data out CV_TYPE

IS           


BEGIN           
          INSERT INTO  RECRUIT.BACK_PERSONAL (REC_NO, NAME_LAST,NAME_FIRST, NAME_MIDDLE, 
                                              PRESENT_ADDRESS, MOBILE_PHONE, PERMANENT_ADDRESS,  
                                              HOME_NUMBER, DATE_OF_BIRTH, BIRTH_PLACE, CIVIL_STATUS, 
                                              SSS_NO, TIN, PHILHEALTH_NO, HDMF_NO,  
                                              BLOOD_TYPE, GENDER, GOV_LICENSE, EMAIL_ADDRESS, INSERTDATE)
          VALUES (v_REC_NO, v_NAME_LAST, v_NAME_FIRST, v_NAME_MIDDLE,
                  v_PRESENT_ADDRESS, v_MOBILE_PHONE, v_PERMANENT_ADDRESS,
                  v_HOME_NUMBER, v_DATE_OF_BIRTH, v_BIRTH_PLACE, v_CIVIL_STATUS, 
                  v_SSS_NO, v_TIN, v_PHILHEALTH, v_HDMF_NO, 
                  v_BLOOD_TYPE, v_GENDER, v_GOV_LICENSE, v_EMAIL_ADDRESS, SYSDATE
                  );
          commit;


END INSERT_BACK_PERSONAL;  

As I try this, I can successfully insert into my database but I am having that warning: ORA-01036. which is kinda annoying.

How to solve this issue?

please visit This Answer it is same which you want...It is just direct written PL/SQL block instead of call procedure....

Recover a table of varchar2 from a pl/sql function in php

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM