Ich bin mit einem sehr seltsamen Problem konfrontiert möglicherweise habe ich etwas verpasst.Classic ASP Aufruf von Oracle gespeicherte Prozedur mit OraOleadb Treiber
Hier ist das Szenario, wir haben eine ASP-Anwendung, die Oracle 11G als Backend-Datenbank verwendet.
Wir rufen eine gespeicherte Prozedur auf, die diese Parameter akzeptiert.
PROCEDURE PR_SUMMARY_IN(theAccountId in varchar2,
theAwardId in number,
theDueDate in varchar2,
theSubmittedDate in varchar2,
theReportDescription in varchar2,
theFormId in varchar2,
theReturnCode out number)
AS
v_submitted_date date;
BEGIN
IF theSubmittedDate IS NOT NULL THEN
v_submitted_date := to_date(theSubmittedDate,'MM/DD/YYYY');--error here
ELSE
v_submitted_date := NULL;
END IF;
insert into abc (.....) values (....)
end
und die Parameterwerte wie unten
'3407840001'
8714898
'05/09/2016'
'05/09/2016'
'Test'
'1'
Wenn ich diese Prozedur SQLPlus leite, es funktioniert, aber wenn ich es von ASP-Code nenne, es wirft einen Fehler
ORA-20502: ORA-01858: Ein nichtnumerisches Zeichen wurde gefunden, wenn ein numerischer Wert erwartet wurde.
Im Folgenden finden Sie ASP-Code Snapshot
due_date = Request.Form("due_date" & i)
IF Len(due_date) = 0 THEN
theDueDt = NULL
ELSE
theDueDt = "'" & due_date & "'"
END IF
submitted_date = Request.Form("submitted_date" & i)
IF Len(submitted_date) = 0 THEN
theSubmittedDt = NULL
ELSE
theSubmittedDt = "'" & submitted_date & "'"
END IF
report_description = Request.Form("report_description" & i)
IF Len(report_description) = 0 THEN
theReportDesc = NULL
ELSE
theReportDesc = "'" & Replace(report_description,"'","''") & "'"
END IF
form_id = Request.Form("form_id" & i)
IF Len(form_id) = 0 THEN
theFrmId = NULL
ELSE
theFrmId = "'" & Replace(form_id,"'","''") & "'"
END IF
cmd.CommandType = 4
cmd.CommandText = "deadlines_summary.PR_SUMMARY_IN"
cmd.Parameters.Append cmd.CreateParameter("theAccountId", 12, 1, 100, Request.Form ("aid"))
cmd.Parameters.Append cmd.CreateParameter("theAwardId", adNumeric, 1, 100, award_id)
cmd.Parameters.Append cmd.CreateParameter("theDueDate", 12, 1, 100, theDueDt)
cmd.Parameters.Append cmd.CreateParameter("theSubmittedDate", 12, 1, 100, theSubmittedDt)
cmd.Parameters.Append cmd.CreateParameter("theReportDescription", 12, 1, 100, theReportDesc)
cmd.Parameters.Append cmd.CreateParameter("theFormId", 12, 1, 100, theFrmId)
cmd.Parameters.Append cmd.CreateParameter("theReturnCode", 131, 2, 10)
IF Len(report_description) > 0 THEN
set rs = cmd.execute
END IF
Irgendwelche Vorschläge
Für Testzwecke bitte ich lokale Variable als varchar2 in SP und zugewiesenen Wert '12/09/2016' in mm erklärt haben/TT/JJJJ-Format.
und bekam unter log. Vorher und nachher.
Wenn Wert hart codiert, behandelt es ohne Anführungszeichen. Wie fragst du dich?
CREATED_ON----------MSG--------------------------------------------------------------------------------
05/09/2016 1.1 theDueDate '12/09/2016' tmp_theDueDate 12/09/2016 v_due_date
05/09/2016 1.2 theSubmittedDate '11/09/2016' tmp_theSubmittedDate 11/09/2016 v_submitted_date
05/09/2016 2.1 theSubmittedDate '11/09/2016' tmp_theSubmittedDate 11/09/2016 v_submitted_date 2016-11-09 00:00:00
05/09/2016 2.2 theDueDate '12/09/2016' tmp_theDueDate 12/09/2016 v_due_date 2016-12-09 00:00:00
Übergeben Sie den Parametertyp, der den Parametern der gespeicherten Prozedur entspricht? Können Sie Ihren ASP-Code einfügen, der einen Befehl erstellt und Parameter hinzufügt und so weiter? – shahkalpesh
Könnten Sie Konstanten wie 'adVarchar' anstelle von 12 verwenden (was' adVariant' ist)? Was nützt 10 für Ausgangsparameter? Warum ist 'Request.Form (" aid ") nicht in Anführungszeichen gesetzt? – shahkalpesh
@shahkalpesh, ich habe meine Frage mit einigen gefunden aktualisiert. 1.1, 1.2 ist vor dem Szenario und 2.1.2.2 ist nach dem Szenario. Hardcoded Wert anders behandelt – Prathyush