oracle|ストアド プロシージャ
私は PHP を学び始めてからジョイインターナショナルビレッジに来ています。数か月が経ちましたが、私自身がサンプルを書いたので、役立つことを願っています。
PHP プログラムは、ストアド プロシージャを使用してデータベースにアクセスできます。
ストアド プロシージャを使用する方が保守が簡単だと考える人もいます。
ただし、この問題については、DBA と開発者によって異なる意見があると思います。より緊密に協力する必要があります。
一方が変更されれば、それを維持することは明らかに困難になります。
しかし、ストアド プロシージャを使用すると、速度と効率という最も明白な利点が少なくとも 2 つあります。
ストアド プロシージャを使用すると明らかに高速になります。効率の観点から、アプリケーションが一連の SQL 操作を一度に実行する必要がある場合、PHP と ORACLE の間を行き来する必要があります。ラウンド数を減らすために、アプリケーションをデータベースに直接配置する方が良いでしょう。出張が可能になり、効率が向上します。
ただし、インターネット アプリケーションでは速度が非常に重要であるため、ストアド プロシージャを使用する必要があります。
私も少し前に PHP を使用してストアド プロシージャを呼び出し、次の例を実行しました。
----------------------------------------------------- --------------------
//テストテーブルを作成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テスト WHERE ID = 5; END PROC_TEST; - ------------------------
-------------- ------------ -------------------------------------- --
// データベース接続を確立します$user = "scott"; //データベースユーザー名
$password = "tiger" //パスワード
$conn_str = "tnsname"; string (cstr: Connection_STRing)
$remote = true / /リモート接続するかどうか
if ($remote) {
$conn = OCILogon($user, $password, $conn_str);
}
else {
$conn = OCILogon ($user, $password);
}
/ /Set binding
$id = 5; //バインディング用の php 変数 ID を準備します
$name = "" //バインディング用の php 変数名を準備します
/ **ストアド プロシージャを呼び出す SQL ステートメント (sql_sp: SQL_StoreProcedure)
* 構文:
* BEGIN ストアド プロシージャ名 ([[:] パラメータ])
* コロンを追加すると、パラメータが位置であることを示します
**/
$sql_sp = "BEGIN PROC_TEST(:id, :name); END;";
//Parse
$stmt = OCIParse($conn, $sql_sp);
//バインディングを実行
OCIBindByName($stmt, ":id", $id, 16); //パラメータの説明: PHP 変数 $id をposition:id にバインドし、バインド長を 16 ビットに設定します
OCIBindByName($stmt, ": name", $name, 30 );
//Execute
OCIExecute($stmt);
//Result
echo "name : $name
";
?>