調用firebird存儲過程我有一個返回字符串的firebird存儲過程sp_clinic_id。它編譯和執行得很好。 Sp有一個暫停在它的身體。無法從php
所以我用select out1 from sp_clinic_id()
從php pdo調用過程。
下面的代碼:
$sqlproc = "select out1 from SP_CLINIC_ID()";
// execute the stored procedure
$stmt = $pdo->prepare($sqlproc);
$stmt->execute();
而不是返回一個準備好的聲明,pdo->準備在返回false。
錯誤是「動態Sql錯誤-104。令牌未知」。由於該過程在firebird中編譯並執行得很好,所以我不明白爲什麼我會收到Dynamic Sql錯誤。
這裏是存儲過程定義:
CREATE PROCEDURE SP_CLINIC_ID
RETURNS(
MAXID VARCHAR(10))
AS
DECLARE VARIABLE temp_char CHAR(10);
DECLARE VARIABLE temp_id INTEGER;
BEGIN
/* Procedure body */
select MAX(CLINIC_id) from COVER_SHEET into MAXID;
select SUBSTRING(:MAXID from 4 for CHAR_LENGTH(:MAXID))
from rdb$database into temp_char ;
select cast(:temp_char as NUMERIC) from rdb$database into temp_id;
temp_id = temp_id + 1;
if (temp_id < 10) THEN
BEGIN
maxid = 'REG000000'|| temp_id;
END
else if (temp_id < 100) THEN
begin
maxid = 'REG00000'|| temp_id;
end
else if (temp_id < 1000) THEN
begin
maxid = 'REG0000'|| temp_id;
end
else if (temp_id < 10000) THEN
begin
maxid = 'REG000'|| temp_id;
end
ELSE if (temp_id < 100000) THEN
begin
maxid = 'REG00'|| temp_id;
end
ELSE if (temp_id < 1000000) THEN
begin
maxid = 'REG0'|| temp_id;
end
ELSE if (temp_id < 10000000) THEN
begin
maxid = 'REG'|| temp_id;
end
SUSPEND;
END;
'stmt'是否有'open'方法?如果是,那麼使用它來代替'execute'。 – ain
謝謝。我會嘗試打開。但這並沒有進展到這一點。準備失敗。 –
您可以顯示存儲過程的定義嗎? –