我創建了以下存儲過程在Oracle中:執行SQL存儲過程傳遞變量
create or replace
PROCEDURE APPUSERCT
(
PROJNAME IN VARCHAR2
, WHEREDATE IN VARCHAR2 ,
cnt OUT long
) AS
BEGIN
select count(Distinct UPPER(field1)) into cnt from bs_log where application_name=PROJNAME and field1 is not null and log_type='info' || WHEREDATE;
END APPUSERCT;
在我的PHP頁面WHEREDATE設置爲:
$ whereDate =」和(TO_DATE (created_on,'mm/dd/yyyy HH24:MI:SS')> = TO_DATE(''。$ startDate。'','mm/dd/yyyy')AND TO_DATE(created_on,'mm/dd/yyyy HH24: MI:SS')< = TO_DATE('「。$ endDate。」','mm/dd/yyyy'))「;
我然後綁定的參數和值,並調用SP:
$sql = 'BEGIN APPUSERCT(:projName,:whereDate,:cnt); END;';
$result = oci_parse($dbconn, $sql);
oci_bind_by_name($result,':cnt',$totalRowCount,32);
oci_bind_by_name($result,':projName',$projName,32);
oci_bind_by_name($result,':whereDate',$whereDate,200);
oci_execute($result);
如果用戶PHP頁面上沒有輸入的日期範圍,那麼WHEREDATE是空白SP和SQL在存儲過程(SP)中運行時沒有任何範圍或附加任何附加語法。
當用戶進入PHP頁面上的時間範圍,則WHEREDATE PARAM變爲:
and (TO_DATE(created_on,'mm/dd/yyyy HH24:MI:SS')>=TO_DATE('05/01/2015','mm/dd/yyyy') AND TO_DATE(created_on,'mm/dd/yyyy HH24:MI:SS')<=TO_DATE('05/07/2015','mm/dd/yyyy'))
和它被附加到在SP的SQL的結束。但是每當發生這種情況時,我的php頁面總是從執行的SQL返回0計數。沒有錯誤,只有0計數。
如果我嘗試直接在Oracle中運行SQL是:
select count(Distinct UPPER(field1)) as cnt from bs_log where application_name='Myweather' and field1 is not null and log_type='info' and (TO_DATE(created_on,'mm/dd/yyyy HH24:MI:SS')>= TO_DATE('05/01/2015','mm/dd/yyyy') AND TO_DATE(created_on,'mm/dd/yyyy HH24:MI:SS')<= TO_DATE('05/07/2015','mm/dd/yyyy'))
,我得到的結果。我得到一個計數。但是通過這個過程調用它時,我會得到0.任何人都可以看到爲什麼?
謝謝!
什麼數據類型是'created_on'?我猜這是一個日期,你有不同的NLS設置,你的隱式轉換不會以正確的值結束。如果是日期,那麼你不應該爲它調用'to_date'。請澄清類型,並添加樣本值。 –