Jak získat output param ze stored procedure v MS SQL

Michal Kumžák
Člen | 106
+
0
-

Zdravím

Mám problém s načtením hodnoty parametru po spuštění procedury. Tu spouštím takto:

$sql = "EXEC dbo.hp_InsertHlavickyOZ @Ident, @Sklad=?, @DruhPohybu=?, @RadaDokladu=?, @Insert=?, @IDPosta=?,
				@Mena=?, @CisloOrg=?, @DatumPorizeni=?";
$this->helios->query($sql, $sklad, $druhpohybu, $radadokladu, $insert, $posta, $mena, $org, $datum);

Našel sem všemožné postupy jak ten parametr načíst, ale všechno to je při použití buď sqlsrv fcí, nebo čistého PDO. Mám to samozřejmě i funční ve starém webu, ale protože to předělávám do NETTE, tak sem chtěl použít to co mi NETTE poskytuje.

Děkuji za pomoc.

Michal

ForestCZE
Člen | 209
+
0
-

Jenom tipuju, ale nemělo by to být takto?

$sql = "EXEC dbo.hp_InsertHlavickyOZ @Ident, @Sklad=?, @DruhPohybu=?, @RadaDokladu=?, @Insert=?, @IDPosta=?, @Mena=?, @CisloOrg=?, @DatumPorizeni=?", $sklad, $druhpohybu, $radadokladu, $insert, $posta, $mena, $org, $datum;
$this->helios->query($sql);
Michal Kumžák
Člen | 106
+
0
-

ForestCZE napsal(a):

Jenom tipuju, ale nemělo by to být takto?

$sql = "EXEC dbo.hp_InsertHlavickyOZ @Ident, @Sklad=?, @DruhPohybu=?, @RadaDokladu=?, @Insert=?, @IDPosta=?, @Mena=?, @CisloOrg=?, @DatumPorizeni=?", $sklad, $druhpohybu, $radadokladu, $insert, $posta, $mena, $org, $datum;
$this->helios->query($sql);

Měl sem tam chybku, jak sem to různě zkoušel. Správně je to takto, ještě s definicí toho output prametru, což je @Ident.

$sql = "EXEC dbo.hp_InsertHlavickyOZ @Ident=?, @Sklad=?, @DruhPohybu=?, @RadaDokladu=?, @Insert=?, @IDPosta=?,
				@Mena=?, @CisloOrg=?, @DatumPorizeni=?";
$this->helios->query($sql, $ident, $sklad, $druhpohybu, $radadokladu, $insert, $posta, $mena, $org, $datum);

No a o ten mi jde, jak ho získat.

Jinak čárka za definicí řetězce je syntax chyba.

nightfish
Člen | 468
+
0
-

@MichalKumžák Co vypíše (do Tracy lišty) bdump($this->helios->query(...)->fetchAll());?

Michal Kumžák
Člen | 106
+
0
-

nightfish napsal(a):

@MichalKumžák Co vypíše (do Tracy lišty) bdump($this->helios->query(...)->fetchAll());?

S fetchAll to nejde, to hazí chybu

SQLSTATE[IMSSP]: The active result for the query contains no fields.

bez fetchAll

Nette\Database\ResultSet
connection private => Nette\Database\Connection
pdoStatement private => PDOStatement
queryString => "EXEC dbo.hp_InsertHlavickyOZ @Ident=0, @Sklad='', @DruhPohybu=13, @RadaDokladu=111, @Insert=1, @IDPosta='',
				@Mena='CZK', @CisloOrg=99999, @Datum ... "
result private => null
resultKey private => -1
results private => null
time private => 0.039337158203125
queryString private => "EXEC dbo.hp_InsertHlavickyOZ @Ident=0, @Sklad='', @DruhPohybu=13, @RadaDokladu=111, @Insert=1, @IDPosta='',
				@Mena='CZK', @CisloOrg=99999, @Datum ... "
params private => array ()
types private => null

V původním zdroji za použití sqlsrv to mám takto. Ta proměná $this->invoiceId je po spuštění naplněna automaticky.

$params = array(
	array(&$this->invoiceId, SQLSRV_PARAM_OUT),
	array($sklad, SQLSRV_PARAM_IN),
	array($druhpohybu, SQLSRV_PARAM_IN),
	array($radadokladu, SQLSRV_PARAM_IN),
	array($insert, SQLSRV_PARAM_IN),
	array($posta, SQLSRV_PARAM_IN),
	array($mena, SQLSRV_PARAM_IN),
	array($org, SQLSRV_PARAM_IN),
	array($datum, SQLSRV_PARAM_IN)
);
$sql = "EXEC [dbo].[hp_InsertHlavickyOZ] @Ident=?, @Sklad=?, @DruhPohybu=?, @RadaDokladu=?, @Insert=?, @IDPosta=?, @Mena=?, @CisloOrg=?, @DatumPorizeni=?";
$stmt = sqlsrv_query($this->link, $sql, $params);
Michal Kumžák
Člen | 106
+
+2
-

Zdravím

Tak sem to nakonec zjistil, jak na to.

$sql = "EXEC dbo.hp_InsertHlavickyOZ @Ident=?, @Sklad=?, @DruhPohybu=?, @RadaDokladu=?, @Insert=?, @IDPosta=?,
		@Mena=?, @CisloOrg=?, @DatumPorizeni=?";

$pdo = $this->helios->getPdo();
$sth = $pdo->prepare($sql);
$this->invoiceId = (int)$this->invoiceId;
$ident = &$this->invoiceId;
$sth->bindParam(1, $ident, \PDO::PARAM_INT|\PDO::PARAM_INPUT_OUTPUT, 20);
$sth->bindParam(2, $sklad);
$sth->bindParam(3, $druhpohybu);
$sth->bindParam(4, $radadokladu);
$sth->bindParam(5, $insert);
$sth->bindParam(6, $posta);
$sth->bindParam(7, $mena);
$sth->bindParam(8, $org);
$sth->bindParam(9, $datum);
$sth->execute();