<!DOCTYPE html>
<html>
<!-- try-stored-subroutine.php
adapted from examples from Peter Johnson
adapted by: Sharon Tuttle
last modified: 4-24-13
-->
<head>
<title> Calling Oracle Stored Procedures and Functions from PHP using
OCI8 </title>
<meta charset="utf-8" />
</head>
<body>
<h1> Calling Oracle Stored Procedures and Functions from PHP
using OCI8 </h1>
<?php
// do you need to ask for username and password?
if (! array_key_exists('username', $_POST))
{
print <<<PASSWORD_FORM
<form method="post" action="$_SERVER[PHP_SELF]">
PASSWORD_FORM;
?>
<label> Username:
<input type="text" name="username" /> </label>
<br />
<label> Password:
<input type="password" name="password" />
</label> <br />
<input type="submit" value="Log in" />
</form>
<?php
}
else // you HAVE the username and password
{
$username = strip_tags($_POST['username']);
// do we need to strip or convert anything in the password??
$password = $_POST['password'];
// try to connect to Oracle student database on birch
$db = "(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)
(HOST = cedar.humboldt.edu)
(PORT = 1521))
(CONNECT_DATA = (SID = STUDENT)))";
// now try to log on to this database
$conn = oci_connect($username, $password, $db);
if ($conn == false)
{
echo "<p> Oops, could not log into Oracle server </p>";
require("my-std-footer.html");
exit;
}
//*****-----
// setting up an Oracle stored procedure call, and then executing it
//*****-----
$proc_call = 'begin sp_from_java(:bind1, :bind2, :bind3, '.
':bind4, :bind5); end;';
$stmt = oci_parse($conn, $proc_call);
// 4th argument below is apparently the length of the value
// being returned. I rather-randonly
// used 10, knowing all 3 of these output parameters have
// short little values... 8-)
oci_bind_by_name($stmt, ":bind1", $out_var1, 10);
oci_bind_by_name($stmt, ":bind2", $out_var2, 10);
// oddity: oci_bind_by_name NEEDS a variable for its 3rd argument,
// even when it is passing a value for an IN parameter...!?
$arg3 = 20;
oci_bind_by_name($stmt, ":bind3", $arg3); // set :bind3 to 20
$arg4 = "red";
oci_bind_by_name($stmt, ":bind4", $arg4); // set :bind4 to "red"
oci_bind_by_name($stmt, ":bind5", $out_var5, 10);
oci_execute($stmt, OCI_DEFAULT);
?>
<h2> RESULTS of STORED PROCEDURE CALL (sp_from_java) </h2>
<p>
out parameter #1 value: <?= $out_var1 ?> <br />
out parameter #2 value: <?= $out_var2 ?> <br />
out parameter #5 value: <?= $out_var5 ?> <br />
</p>
<?php
oci_free_statement($stmt);
//*****-----
// now call a stored function
//*****-----
$funct_call = 'begin :return_value := max_on_hand(:pub_name); end;';
$stmt = oci_parse($conn, $funct_call);
oci_bind_by_name($stmt, ":return_value", $ret_val, 10);
$this_pub = 'Addison-Wesley';
oci_bind_by_name($stmt, ":pub_name", $this_pub);
oci_execute($stmt, OCI_DEFAULT);
?>
<h2> RESULTS of STORED FUNCTION CALL (max_on_hand) </h2>
<p>
Max on hand for <?= $this_pub ?>: <?= $ret_val ?>
</p>
<?php
$this_pub = 'Prentice Hall';
oci_bind_by_name($stmt, ":pub_name", $this_pub);
oci_execute($stmt, OCI_DEFAULT);
?>
<h2> RESULTS of STORED FUNCTION CALL (max_on_hand) </h2>
<p>
Max on hand for <?= $this_pub ?>: <?= $ret_val ?>
</p>
<?php
// close statement and connection...
oci_free_statement($stmt);
oci_close($conn);
}
require("my-std-footer.html");
?>