php-sqlsrv/test/sqlsrv/TC82_StoredProcRS.phpt
2017-05-04 08:14:11 -07:00

109 lines
3.1 KiB
PHP

--TEST--
Complex Stored Proc Test
--DESCRIPTION--
Test output string parameters with rows affected return results before output parameter.
--ENV--
PHPT_EXEC=true
--SKIPIF--
<?php require('skipif.inc'); ?>
--FILE--
<?php
include 'MsCommon.inc';
function StoredProcCheck()
{
include 'MsSetup.inc';
$testName = "ResultSet with Stored Proc";
StartTest($testName);
Setup();
$conn1 = Connect();
$table1 = $tableName."_1";
$table2 = $tableName."_2";
$table3 = $tableName."_3";
$procArgs = "@p1 int, @p2 nchar(32), @p3 nvarchar(64), @p4 nvarchar(max) OUTPUT";
$introText="Initial Value";
$callArgs = array(array(1, SQLSRV_PARAM_IN, SQLSRV_PHPTYPE_INT, SQLSRV_SQLTYPE_INT),
array('Dummy No', SQLSRV_PARAM_IN, SQLSRV_PHPTYPE_STRING(SQLSRV_ENC_CHAR), SQLSRV_SQLTYPE_NCHAR(32)),
array('Dummy ID', SQLSRV_PARAM_IN, SQLSRV_PHPTYPE_STRING(SQLSRV_ENC_CHAR), SQLSRV_SQLTYPE_NVARCHAR(50)),
array( &$introText, SQLSRV_PARAM_OUT, SQLSRV_PHPTYPE_STRING(SQLSRV_ENC_CHAR), SQLSRV_SQLTYPE_NVARCHAR(256)));
$procCode =
"IF (@p3 IS NULL)
BEGIN
INSERT INTO [$table1] (DataID, ExecTime, DataNo) values (@p1, GETDATE(), @p2)
END
ELSE
BEGIN
INSERT INTO [$table1] (DataID, ExecTime, DataNo, DataRef) values (@p1, GETDATE(), @p2, @p3)
END
INSERT INTO [$table2] (DataID, DataNo) values (@p1, @p2)
SELECT @p4=(SELECT Intro from [$table3] WHERE DataID=@p1) ";
CreateTableEx($conn1, $table1, "DataID int, ExecTime datetime, DataNo nchar(32), DataRef nvarchar(64)");
CreateTableEx($conn1, $table2, "DataID int, DataNo nchar(32)");
CreateTableEx($conn1, $table3, "DataID int, Intro nvarchar(max)");
CreateProc($conn1, $procName, $procArgs, $procCode);
$stmt1 = sqlsrv_query($conn1, "INSERT INTO [$table3] (DataID, Intro) VALUES (1, 'Test Value 1')");
InsertCheck($stmt1);
$stmt2 = sqlsrv_query($conn1, "INSERT INTO [$table3] (DataID, Intro) VALUES (2, 'Test Value 2')");
InsertCheck($stmt2);
$stmt3 = sqlsrv_query($conn1, "INSERT INTO [$table3] (DataID, Intro) VALUES (3, 'Test Value 3')");
InsertCheck($stmt3);
$stmt4 = CallProcEx($conn1, $procName, "", "?, ?, ?, ?", $callArgs);
$result = sqlsrv_next_result($stmt4);
while ($result != null)
{
if( $result === false )
{
FatalError("Failed to execute sqlsrv_next_result");
}
$result = sqlsrv_next_result($stmt4);
}
sqlsrv_free_stmt($stmt4);
DropProc($conn1, $procName);
echo "$introText\n";
DropTable($conn1, $table1);
DropTable($conn1, $table2);
DropTable($conn1, $table3);
sqlsrv_close($conn1);
EndTest($testName);
}
//--------------------------------------------------------------------
// Repro
//
//--------------------------------------------------------------------
function Repro()
{
try
{
StoredProcCheck();
}
catch (Exception $e)
{
echo $e->getMessage();
}
}
Repro();
?>
--EXPECT--
Test Value 1
Test "ResultSet with Stored Proc" completed successfully.