Detaillierte Erläuterung des PHP-Zugriffs auf gespeicherte Oracle-Prozeduren

怪我咯
Freigeben: 2023-03-13 11:32:02
Original
1610 Leute haben es durchsucht

In diesem Artikel werden hauptsächlich die relevanten Informationen zum Zugriff von PHP auf die gespeicherte Prozedur mit detaillierten Beispielen vorgestellt. Hier ist der Beispielcode, der Ihnen bei der Implementierung einer solchen Funktion helfen soll

Detaillierte Erläuterung des Zugriffs von PHP auf Instanzen gespeicherter Oracle-Prozeduren

Zum Beispiel enthält meine lokale Oracle-Datenbank ein Paket mit einer gespeicherten Prozedur:

create or replace package PKG_TRANS_REL is

 -- Author : test
 -- Created : 
 -- Purpose : test

 -- Public type declarations
 PKG_NAME varchar2(20) := 'PKG_TRANS_REL';
 --存储过程,测试用
 procedure pro_GC_withdraw(in_merch_no   in varchar2,
              in_withdraw_amt in number,
              out_result   out number,
              out_errmsg   out varchar2);
end PKG_TRANS_REL;
Nach dem Login kopieren


Der Paketname ist PKG_TRANS_REL und die gespeicherte Prozedur ist pro_GC_withdraw. Diese gespeicherte Prozedur hat vier Parameter, zwei Eingabeparameter und zwei Ausgabeparameter.

Beispiel für einen Aufruf über pdo in PHP:


  $this->_pdo = new PDO(PDO_DB_DNS, PDO_DB_USER, PDO_DB_PASSWORD);
  $call = "CALL PKG_TRANS_REL.pro_GC_withdraw(?,?,?,?)";

  try{
      $stmt = $this->_pdo->prepare($call);

      $stmt->bindParam(1, $merch_no);
      $stmt->bindParam(2, $amount, PDO::PARAM_INT);

      $stmt->bindParam(3, $result, PDO::PARAM_INT, 4);
      $stmt->bindParam(4, $error_msg, PDO::PARAM_STR, 64);

      $stmt->execute();

    }catch (PDOException $e)
    {
      $msg = 'SQL:'.$e->getMessage();
      $msg = iconv('GBK','UTF-8',$msg);
      user_dump('SQL:'.$msg);
      return false;
    }

    ...
Nach dem Login kopieren

Der dritte Parameter von bindParam ist standardmäßig PDO::PARAM_STR, falls dies der Fall ist Für andere -Typen müssen Sie

EingabeparameterÜbergabewert relativ einfach angeben, während Ausgangsparameter etwas komplizierter sind die Länge muss angegeben werden.

PHP-Programme können auf die Datenbank zugreifen, indem sie gespeicherte Prozeduren verwenden. Einige Leute denken, dass die Verwendung gespeicherter Prozeduren einfacher zu warten ist. Wohlwollende Menschen haben jedoch unterschiedliche Meinungen zu diesem Thema. Ich denke, dass die Verwendung gespeicherter Prozeduren eine engere Zusammenarbeit zwischen DBA und Entwicklern erfordert.

Aber die Verwendung gespeicherter Prozeduren hat mindestens zwei der offensichtlichsten Vorteile: Geschwindigkeit und Effizienz. Die Verwendung gespeicherter Prozeduren ist offensichtlich schneller. Aus Effizienzgründen muss eine Anwendung, wenn sie eine Reihe von SQL-Vorgängen gleichzeitig ausführen muss, zwischen PHP und Oracle hin- und herwechseln. Um die Anzahl der Roundtrips zu reduzieren, ist es besser, die Anwendung direkt in die Datenbank zu stellen und die Effizienz steigern. Bei Internetanwendungen ist die Geschwindigkeit jedoch äußerst wichtig, daher ist die Verwendung gespeicherter Prozeduren erforderlich. Ich habe vor Kurzem auch PHP verwendet, um gespeicherte Prozeduren aufzurufen, und habe das folgende Beispiel gemacht.

Code

//建立一个test表 
  create table test ( 
  id number(16) not null, 
  name varchar2(30) not null, 
  primary key (id) 
  ); 
  //插入一条数据 
  insert into test values (5, 'php_book'); 
  //建立一个存储过程 
  create or replace procedure proc_test ( 
  p_id in out number, 
  p_name out varchar2 
  ) as 
  begin 
  select name into p_name 
  from test 
  where id = 5; 
  end proc_test;
Nach dem Login kopieren

PHP-Code 

<?php 
  //建立数据库连接 
  $user = "scott"; //数据库用户名 
  $password = "tiger"; //密码 
  $conn_str = "tnsname"; //连接串(cstr : connection_string) 
  $remote = true //是否远程连接 
  if ($remote) { 
  $conn = ocilogon($user, $password, $conn_str); 
  } 
  else { 
  $conn = ocilogon($user, $password); 
  } 
  //设定绑定 
  $id = 5; //准备用以绑定的php变量 id 
  $name = ""; //准备用以绑定的php变量 name 
  /** 调用存储过程的sql语句(sql_sp : sql_storeprocedure) 
  * 语法: 
  * begin 存储过程名([[:]参数]); end; 
  * 加上冒号表示该参数是一个位置 
  **/ 
  $sql_sp = "begin proc_test(:id, :name); end;"; 
  //parse 
  $stmt = ociparse($conn, $sql_sp); 
  //执行绑定 
  ocibindbyname($stmt, ":id", $id, 16); //参数说明:绑定php变量$id到位置:id,并设定绑定长度16位 
  ocibindbyname($stmt, ":name", $name, 30); 
  //execute 
  ociexecute($stmt); 
  //结果 
  echo "name is : $name<br>"; 
  ?>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des PHP-Zugriffs auf gespeicherte Oracle-Prozeduren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!