我试过以下
class DatabaseConnection {
private $con;
private $credentials;
protected $statement;
private $dbName;
// parsedSQL is not intended to used by anything except logging in the case of failed execution.
public $parsedSql;
protected $mode = OCI_COMMIT_ON_SUCCESS;
const OCI_RETURN_DB_POINTER = 1001;
const OCI_RETURN_DB_PERSISTENT = 1002;
const OCI_RETURN_DB_UNIQUE = 1003;
public function __construct($dbName, $connectType = DatabaseConnection::OCI_RETURN_DB_POINTER) {
$this->credentials = array (
"slrukdb" => array (
"username" => "OBLICORE",
"pw" => "xxx",
"connstr" => "OIUKDB.prod.uk"
),
);
$dbName = strtolower ( $dbName );
$this->dbName = $dbName;
switch ($connectType) {
case DatabaseConnection::OCI_RETURN_DB_POINTER :
$this->con = oci_connect ( $this->credentials [$dbName] ['username'], $this->credentials [$dbName] ['pw'], $this->credentials [$dbName] ['connstr'] );
break;
case DatabaseConnection::OCI_RETURN_DB_PERSISTENT :
$this->con = oci_pconnect ( $this->credentials [$dbName] ['username'], $this->credentials [$dbName] ['pw'], $this->credentials [$dbName] ['connstr'] );
break;
case DatabaseConnection::OCI_RETURN_DB_UNIQUE :
$this->con = oci_new_connect ( $this->credentials [$dbName] ['username'], $this->credentials [$dbName] ['pw'], $this->credentials [$dbName] ['connstr'] );
break;
default:
echo "No Connection";
die();
break;
}
if ($this->dbName == 'slrukdb') {
$dbt = debug_backtrace ();
$location = substr ( strrchr ( $dbt [0] ["file"], "/" ), 1 ) . " (" . $dbt [0] ["line"] . ")";
oci_set_client_identifier ( $this->con, $location );
}
}
public function execute($sql = null) {
if ($this->dbName == 'slrukdb') {
$dbt = debug_backtrace ();
$location = substr ( strrchr ( $dbt [0] ["file"], "/" ), 1 ) . " (" . $dbt [0] ["line"] . ")";
//print_r($this->con);
//print_r($location);
oci_set_client_identifier ( $this->con, $location );
}
if (! is_null ( $sql )) {
$ocistatement = oci_parse ( $this->con, $sql );
} else {
$ocistatement = $this->statement;
}
$success = oci_execute ( $ocistatement, $this->mode );
if (! $success) {
if ($this->mode != OCI_COMMIT_ON_SUCCESS) {
$this->transactionRollback ();
$exceptionSql = (is_null ( $sql )) ? $this->parsedSql : $sql;
throw new Exception ( "Statement execution failed. Transaction rolled back. SQL: $exceptionSql" );
} else {
$message = "";
$oci_error = oci_error ();
if (! empty ( $oci_error )) {
$message = "OCI_ERROR: " . $oci_error ["code"] . ": " . $oci_error ["message"];
if (! empty ( $oci_error ["sqltext"] )) {
$message .= " in SQL{" . $oci_error ["sqltext"] . "}";
}
} else {
$message = "unknown error in DatabaseConnection->execute";
if (! empty ( $this->parsedSql )) {
$message .= " with parsed SQL{" . $this->parsedSql . "}";
} else if (! empty ( $sql )) {
$message .= " with SQL{" . $sql . "}";
}
}
trigger_error ( $message, E_USER_ERROR );
}
}
return $ocistatement;
}
}
$db = new DatabaseConnection ( 'slrukdb' );
$db->execute ( "P_B_NMS_Interface_Latency" );
我收到错误
PHP Warning: oci_execute(): ORA-00900: invalid SQL statement in /var/SP/oiadm/docroot/common/php/DatabaseConnection.php on line 170
PHP Fatal error: unknown error in DatabaseConnection->execute with SQL{P_B_NMS_Interface_Latency} in /var/SP/oiadm/docroot/common/php/DatabaseConnection.php on line 196
程序
create or replace PROCEDURE P_B_NMS_Interface_Latency as
BEGIN
insert into B_NMS_Interface_Latency values (sysdate,'A','IMSI',(Select max(timestamp) from B_NMS_A_Interface where IMSI is not null and IMSI >= 1000));
insert into B_NMS_Interface_Latency values (sysdate,'A','Cell',(Select max(timestamp) from B_NMS_A_Interface where Cell is not null and Cell >= 1000));
insert into B_NMS_Interface_Latency values (sysdate,'A','IMEI',(Select max(timestamp) from B_NMS_A_Interface where IMEI is not null and IMEI >= 1000));
insert into B_NMS_Interface_Latency values (sysdate,'A','PNUM',(Select max(timestamp) from B_NMS_A_Interface where PNUM is not null and PNUM >= 1000));
insert into B_NMS_Interface_Latency values (sysdate,'IuCS','IMSI',(Select max(timestamp) from B_NMS_IuCS_Interface where IMSI is not null and IMSI >= 1000));
insert into B_NMS_Interface_Latency values (sysdate,'IuCS','Cell',(Select max(timestamp) from B_NMS_IuCS_Interface where Cell is not null and Cell >= 1000));
insert into B_NMS_Interface_Latency values (sysdate,'IuCS','IMEI',(Select max(timestamp) from B_NMS_IuCS_Interface where IMEI is not null and IMEI >= 1000));
insert into B_NMS_Interface_Latency values (sysdate,'IuCS','PNUM',(Select max(timestamp) from B_NMS_IuCS_Interface where PNUM is not null and PNUM >= 1000));
insert into B_NMS_Interface_Latency values (sysdate,'Gb','IMSI',(Select max(timestamp) from B_NMS_Gb_Interface where IMSI is not null and IMSI >= 1000));
insert into B_NMS_Interface_Latency values (sysdate,'Gb','Cell',(Select max(timestamp) from B_NMS_Gb_Interface where Cell is not null and Cell >= 1000));
insert into B_NMS_Interface_Latency values (sysdate,'Gb','IMEI',(Select max(timestamp) from B_NMS_Gb_Interface where IMEI is not null and IMEI >= 1000));
insert into B_NMS_Interface_Latency values (sysdate,'Gb','APN',(Select max(timestamp) from B_NMS_Gb_Interface where APN is not null and APN >= 1000));
insert into B_NMS_Interface_Latency values (sysdate,'IuPS','IMSI',(Select max(timestamp) from B_NMS_IuPS_Interface where IMSI is not null and IMSI >= 1000));
insert into B_NMS_Interface_Latency values (sysdate,'IuPS','Cell',(Select max(timestamp) from B_NMS_IuPS_Interface where Cell is not null and Cell >= 1000));
insert into B_NMS_Interface_Latency values (sysdate,'IuPS','IMEI',(Select max(timestamp) from B_NMS_IuPS_Interface where IMEI is not null and IMEI >= 1000));
insert into B_NMS_Interface_Latency values (sysdate,'IuPS','APN',(Select max(timestamp) from B_NMS_IuPS_Interface where APN is not null and APN >= 1000));
insert into B_NMS_Interface_Latency values (sysdate,'GN2G','IMSI',(Select max(timestamp) from B_NMS_GN2G_Interface where IMSI is not null and IMSI >= 1000));
insert into B_NMS_Interface_Latency values (sysdate,'GN2G','IMEI',(Select max(timestamp) from B_NMS_GN2G_Interface where IMEI is not null and IMEI >= 1000));
insert into B_NMS_Interface_Latency values (sysdate,'GN2G','APN',(Select max(timestamp) from B_NMS_GN2G_Interface where APN is not null and APN >= 1000));
insert into B_NMS_Interface_Latency values (sysdate,'GN2G','PURL',(Select max(timestamp) from B_NMS_GN2G_Interface where PURL is not null and PURL >= 1000));
insert into B_NMS_Interface_Latency values (sysdate,'GN2G','DOM',(Select max(timestamp) from B_NMS_GN2G_Interface where DOM is not null and DOM >= 1000));
insert into B_NMS_Interface_Latency values (sysdate,'GN3G','IMSI',(Select max(timestamp) from B_NMS_GN3G_Interface where IMSI is not null and IMSI >= 1000));
insert into B_NMS_Interface_Latency values (sysdate,'GN3G','IMEI',(Select max(timestamp) from B_NMS_GN3G_Interface where IMEI is not null and IMEI >= 1000));
insert into B_NMS_Interface_Latency values (sysdate,'GN3G','APN',(Select max(timestamp) from B_NMS_GN3G_Interface where APN is not null and APN >= 1000));
insert into B_NMS_Interface_Latency values (sysdate,'GN3G','PURL',(Select max(timestamp) from B_NMS_GN3G_Interface where PURL is not null and PURL >= 1000));
insert into B_NMS_Interface_Latency values (sysdate,'GN3G','DOM',(Select max(timestamp) from B_NMS_GN3G_Interface where DOM is not null and DOM >= 1000));
insert into B_NMS_Interface_Latency values (sysdate,'AllVoice','IMSI',(Select max(timestamp) from B_NMS_AllVoice_Interface where IMSI is not null and IMSI >= 1000));
insert into B_NMS_Interface_Latency values (sysdate,'AllVoice','IMEI',(Select max(timestamp) from B_NMS_AllVoice_Interface where IMEI is not null and IMEI >= 1000));
insert into B_NMS_Interface_Latency values (sysdate,'AllVoice','PNUM',(Select max(timestamp) from B_NMS_AllVoice_Interface where PNUM is not null and PNUM >= 1000));
insert into B_NMS_Interface_Latency values (sysdate,'BO','webi',(Select max(timestamp) from B_NMS_BOTimestamps where Type = 'webi'));
insert into B_NMS_Interface_Latency values (sysdate,'BO','deski',(Select max(timestamp) from B_NMS_BOTimestamps where Type = 'deski'));
commit;
END P_B_NMS_Interface_Latency;
更新
当我尝试
时 $db->execute ( "call P_B_NMS_Interface_Latency()" );
错误:
PHP Warning: oci_execute(): ORA-01858: a non-numeric character was found where a numeric was expected
ORA-06512: at "OBLICORE.P_B_NMS_INTERFACE_LATENCY", line 5 in /var/SP/oiadm/docroot/common/php/DatabaseConnection.php on line 170
PHP Fatal error: unknown error in DatabaseConnection->execute with SQL{call P_B_NMS_Interface_Latency()} in /var/SP/oiadm/docroot/common/php/DatabaseConnection.php on line 196
答案 0 :(得分:2)
你在BEGIN..END匿名区块内调用一个程序,如下所示
$sql = 'BEGIN P_B_NMS_Interface_Latency(); END;';
$stmt = oci_parse($conn,$sql);
oci_execute($stmt);
答案 1 :(得分:0)
也许你错过了分号?