PHP プログラムはストアド プロシージャを使用してデータベースにアクセスできます。ストアド プロシージャを使用する方が保守が簡単だと考える人もいます。しかし、この問題については、人によって意見が異なります。ストアド プロシージャを使用するということは、DBA と開発者がより緊密に協力する必要があることを意味すると思います。それらのうちの 1 つが変更されると、明らかに維持が困難になります。
しかし、ストアド プロシージャを使用すると、速度と効率という最も明白な利点が少なくとも 2 つあります。
ストアド プロシージャを使用すると明らかに高速になります。効率の観点から、アプリケーションが一連の SQL 操作を一度に実行する必要がある場合、PHP と ORACLE の間を行き来する必要があります。ラウンド数を減らすために、アプリケーションをデータベースに直接配置する方が良いでしょう。出張が可能になり、効率が向上します。
ただし、インターネット アプリケーションでは速度が非常に重要であるため、ストアド プロシージャを使用する必要があります。
私も少し前に PHP を使用してストアド プロシージャを呼び出し、次の例を実行しました。
コード:---------------------------------------------- -- ----------------------------------
//TEST テーブルを作成する
CREATE TABLE TEST ( ID NUMBER (16) NOT NULL,
NAME VARCHAR2(30) NOT NULL,
PRIMARY KEY (ID)
);
//データを挿入
//ストアド プロシージャを作成します
p_id IN OUT NUMBER,
p_name OUT VARCHAR2
) AS
BEGIN
SELECT NAME INTO p_name
FROM TEST
WHERE ID = 5;
END PROC_TEST;
/
---------------------------------------------------- ---- ------------------------
PHP コード:------------- ---------------------------------------------------- ---- -------------
//データベース接続を確立します
$user = "scott";$conn_str = "tnsname"; string (cstr: Connection_STRing)
$remote = true //リモート接続するかどうか
if ($remote) {
$conn = OCILogon($user, $password, $conn_str)
}
else {
$conn = OCILogon ($user, $password);
}
// バインディングを設定します
$id = 5; "; // バインディング用に準備された PHP 変数名
/**ストアド プロシージャを呼び出す SQL ステートメント (sql_sp: SQL_StoreProcedure)
* 構文:
* BEGIN ストアド プロシージャ名 ([[:] パラメータ]); END;
**/
$s ql_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);
echo "名前は : $name< ;br>";
www.bkjia.com