ただし、ストアド プロシージャを使用すると、速度と効率という 2 つの最も明らかな利点が少なくとも得られます。ストアド プロシージャを使用した方が明らかに高速です。効率の観点から、アプリケーションが一連の SQL 操作を一度に実行する必要がある場合は、PHP と Oracle の間を往復する必要があります。往復の回数を減らすために、アプリケーションをデータベースに直接配置する方が良いでしょう。そして効率を高めます。ただし、インターネット アプリケーションでは速度が非常に重要であるため、ストアド プロシージャを使用する必要があります。私も少し前に PHP を使用してストアド プロシージャを呼び出し、次の例を実行しました。
コード
コードをコピー コードは次のとおりです:
//テストテーブルを作成します
create table test (
id number(16) not null,
name varchar2(30) not null,
主キー (id)
); // データを挿入します
insert into test names ( 5, 'php_book');
//ストアド プロシージャを作成します
プロシージャを作成または置換します 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; コードは次のとおりです。 > //データベース接続を確立します
$user = "scott"; //データベースユーザー名
if ($remote) { $conn = ocilogon($user, $password, $conn_str) ; } else { $conn = ocilogon($user, $password);
} // バインディング
$id = 5; be binding
$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); // ociexecute($stmt);
//Result
echo "名前は : $name
";